Android 连接网络数据库的方式
以连接MS SQL(sqlserver数据库)的网络数据库为例,从当前搜集的资料来看,一共有两种方式:在Android工程中引入JDBC驱动,直接连接;通过WebService等方法的间接连接。
采用JDBC方法主要问题是安全性不高,而且一旦要访问的数据量过多,容易出问题。另外,Android系统本身有对json或者xml直接解析的api,所以建议采用第二种方法,实用性与安全性都提高了。
1 直接连接方式
1.1 使用jtds方法
用jdts连接sql server数据库有两种方式:
第一种就是指定用户和密码;第二种就是windows系统账户。
两种连接有什么不同呢?url不同,然后就是第二种不需要用户名和密码。
两种url如下:
第一种:url="jdbc:jtds:sqlserver://10.253.66.19;database=Assess";
第二种:url="jdbc:jtds:sqlserver://10.253.66.19;database=Assess;integratedSecurity=true";
然后的代码就差不多了:
Class.forName(DRIVER);
conn=DriverManager.getConnection(url,user_name, password);//第一种
//conn=DriverManager.getConnection(url;//第二种
System.out.println("connect success!");
但是仅仅做上面的工作是不够的,我们还需要把jdts的ntlmauth.dll文件copy到java的bin目录下。一般是copy到jre/bin目录下,但是我们在开发中通常会选择jdk/bin目录。所以保险的做法是两个地方都copy到。
具体可操作如下:
首先,需要下载jdts最新的Jar包 https://sourceforge.net/projects/jtds/ 。
然后,在工程目录下,建立一个libs文件夹,把jtds的jar包拷贝进去。(据说android开发第三方jar文件必须放在libs目录下,未经考证,不只真假);
右键,选择build path,添加到编译目录。这时会自动生成一个Referenced Libraries引用,这样就OK了。
最后,添加如下的测试代码,运行测试。
package com.sundee.utility; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import android.util.Log; public class DBHelper
{ public static void Test()
{
try
{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
System.out.println("数据库驱动成功");
} catch (ClassNotFoundException e1)
{
e1.printStackTrace();
System.out.println("加载数据库引擎失败");
Log.i("test", e1.getMessage());
} try
{ Connection con = DriverManager.getConnection(
"jdbc:jtds:sqlserver://192.168.0.103:1433/201111RuiDiKe", "sa",
"123456");
System.out.println("连接数据库成功");
Statement stmt = con.createStatement();// 创建SQL命令对象 // 创建表
System.out.println("开始创建表");
String query = "create table stu(ID NCHAR(2),NAME NCHAR(10))";// 创建表SQL语句
stmt.executeUpdate(query);// 执行SQL命令对象
System.out.println("表创建成功"); // 输入数据
System.out.println("开始插入数据");
String a1 = "INSERT INTO stu VALUES('1','嘻嘻')";// 插入数据SQL语句
String a2 = "INSERT INTO stu VALUES('2','哈哈')";
String a3 = "INSERT INTO stu VALUES('3','咳咳')";
stmt.executeUpdate(a1);// 执行SQL命令对象
stmt.executeUpdate(a2);
stmt.executeUpdate(a3);
System.out.println("插入数据成功"); // 读取数据
System.out.println("开始读取数据");
ResultSet rs = stmt.executeQuery("SELECT * FROM stu");// 返回SQL语句查询结果集(集合)
// 循环输出每一条记录
while (rs.next())
{
// 输出每个字段
System.out.println(rs.getString("ID") + "\t"
+ rs.getString("NAME"));
}
System.out.println("读取完毕"); // 关闭连接
stmt.close();// 关闭命令对象连接
con.close();// 关闭数据库连接
} catch (SQLException e)
{
e.printStackTrace();
System.out.println("数据库连接错误"); }
}
}
有关jdts的具体的查询与应用,可参考文章[3,4]进行操作。
具体可参考文章[5]
2 通过WebService方式进行连接
2.1 样例1
具体可参考文章【6,7】进行测试开发。
参考文章
1. mozart, android 直连 sqlserver 2008 R2
3. chenyucong, Android 连接 SQL Server (jtds方式)——下
4.荒野程序猿, 【Android解决方案】连接SQL Server
5. conowen, Android学习笔记(21)————利用JDBC连接服务器数据库
6. long_zhou316, Android通过webservice连接SQLServer 详细教程
7. Bottle, Android实现访问Sqlserver
Android 连接网络数据库的方式的更多相关文章
- atitit.client连接oracle数据库的方式总结
client连接oracle数据库的方式总结 文件夹 Java程序连接一般使用jar驱动连接.. ... 桌面GUI一般採取c语言驱动oci.dll 直接连接... 间接连接(须要配置tns及其env ...
- Android连接远程数据库的避坑指南
Android连接远程数据库的避坑指南 今天用Android Studio连接数据库时候,写了个测试连接的按钮,然后连接的时候报错了,报错信息: 2021-09-07 22:45:20.433 705 ...
- android连接Mysql数据库之JDBC方式
一.创建一个数据库和若干表,并导入相关信息.这里以我之前使用的一个图书系统的数据库为例子. 首先假设已经安装并配置好Mysql.(建议大家安装WAMP,也就是安装完这个,就相当于安装了Mysql,PH ...
- 1-MySQL数据库(android连接MySQL数据库)
很好的链接 http://www.cnblogs.com/best/p/6517755.html 一个小时学会MySQL数据库 http://www.cnblogs.com/klguang/p/47 ...
- android 连接网络的简单实例
1.android有两种连接网络的类HttpURLConnect和HttpClient,但是HttpClient已逐渐被HttpURLConnect类代替所以就不提及. 2.实例 String add ...
- Delphi使用ADO连接网络数据库,断网后重连问题
原始文章: https://blog.csdn.net/blog_jihq/article/details/11737699# 使用TADOConnection对象连接网络数据库(以MySQL为例), ...
- java连接MySQL数据库的方式
Java连接数据库的几种方法 *说明 1.以MySQL数据库为例 2.分为四个步骤: 建立数据库连接, 向数据库中提交sql 处理数据库返回的结果 关闭数据库连接 一:JDBC 1.建立数据库连接 只 ...
- 【Android】Android连接SQLite3数据库的操作
在前面使用SQLite3的时候,并没有留意到有SQLiteOpenHelper这个类,所以只好在Activity里面去创建和维护数据库跟数据表的创建. 但是,现在有了SQLiteOpenHelper这 ...
- Android 检测网络连接状态
Android连接网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置. 首先,要判断网络状态,需要有相应的权限,下面为权限代码(Androi ...
随机推荐
- @RequestMapping[转]
转自 http://www.cnblogs.com/qq78292959/p/3760560.html#undefined 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST. ...
- POJ 2299 Ultra-QuickSort【树状数组 ,逆序数】
题意:给出一组数,然后求它的逆序数 先把这组数离散化,大概就是编上号的意思--- 然后利用树状数组求出每个数前面有多少个数比它小,再通过这个数的位置,就可以求出前面有多少个数比它大了 这一篇讲得很详细 ...
- 在 android studio 中更新安卓应用版本号
随着应用程序不断修改,版本号也应当变化.要更新安卓应用的版本号,只需要在 build.gradle(module:app) 中修改 versionCode 和 versionName 即可,也可以只改 ...
- The Node.js Event Loop, Timers, and process.nextTick() Node.js事件循环,定时器和process.nextTick()
个人翻译 原文:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ The Node.js Event Loop, Ti ...
- spring boot ---web应用开发-错误处理
一.错误的处理 方法一:Spring Boot 将所有的错误默认映射到/error, 实现ErrorController @Controller @RequestMapping(value = &qu ...
- mven系列问题
1.前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把 project1项目完全迁移并应用mave ...
- echars 在vue v-if 切换会 显示不出来或者显示出来但是不是百分百显示
我也是百度看别人写的原因,然后自己总结,以后用到的时候来复制就可以将 v-if换成 v-show 第二不是百分百显示 可以用 this.$nextTick(function() { this.in ...
- 按shift键调出命令行的脚本
打开Notepad++,粘贴以下命令,并将文件命名为opencmdhere.reg(注意:文件编码格式为UCS-2 Little Endian,否则会导致中文乱码),再双击打开即可 Windows R ...
- Qt之图形(简笔画-绘制卡通蚂蚁)
简述 关于简笔画的介绍很多,有动物.水果.蔬菜.交通工具等,通常会对绘制一步步进行拆分.组合.然后绘制为我们想要的结果. 下面来介绍另外的一个种类:昆虫类-卡通蚂蚁. 简述 绘制 效果 源码 绘制 效 ...
- C++写的UrlEncode和UrlDecode
关于UrlEncode的实现(C++).网上有非常多不同的版本号.对须要编码的字符集的选取并不统一.那么究竟有没有标准呢?答案是有的.參见wiki 绝对不编码的,仅仅有字母.数字.短横线(-).下划线 ...