Android 通过jdbc直接连接SQLserver数据库

时间:2021-08-15 13:30:59

       由于项目上有需求,需要通过android移动终端直接向pc端的sqlserver数据库上写数据,由于各种原因,无法通过接口来实现,所以就研究了一下,其中也遇到很多问题,*出去看了很多大神的解决方案才搞定,在这里记录一下,给自己和需要的童鞋点帮助。

       首先,看到这个需求的时候,第一之间就想到了我们在pc端通过java进行数据库连接使用的是jdbc技术,那么既然android也是基于java的,我也使用jdbc来实现是否可以呢?第一步就进行了jdbc的实现,import进sqljdbc4.jar的包,加入java连接jdbc的代码。果不其然,马上就遇到了第一个问题:不能再主线程中访问网络资源。是啊,既然我要通过jdbc连接pc端的数据库,那必然是需要通过网络来进行的。所以这里就涉及到两个问题,第一,必须为项目添加网络访问权限

<uses-permission android:name="android.permission.INTERNET" />
第二,必须在子线程中发起网络请求(在子线程中进行数据库的连接),线程这里有很多方法,这里不是重点,就不在这里赘述。

        接下来,改好之后继续兴致勃勃的debug,果然还是有错的,这次报的错就有点奇葩了,

com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“Socket closed”。
java.net.SocketException: Socket closed

这个错误纠结了很久很久,找了很多解决方案都搞不定(在这里不得不吐槽一下度娘,浪费了很多时间),包括换jdk版本啊,换eclipse啊都没用。后来*出去求助google,在茫茫英文海中发现了一个帖子,貌似跟我遇到的是一样的问题,这是帖子的原地址,有兴趣的可以看看。在这里,他找到了解决方案,就是使用jtds来进行数据库连接,而不是我们最常用的sqljdbc4.jar。于是赶紧动手,正好发现我的存货里有jtds1.3.1.jar的包,果断拿来用,放到项目的libs目录,然后import到项目里边来,并且对原来的代码进行一些改动

//这是原来的加载驱动字符串
//String JDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL数据库引擎
//String connectDB = "jdbc:sqlserver://192.168.1.109:1433;DatabaseName=kmjh";// 这是原来的数据库连接字符串
 String connectDB = "jdbc:jtds:sqlserver://192.168.1.109:1433;DatabaseName=kmjh";// 连接字符串换成这个

try {
//Class.forName(JDriver);// 加载数据库引擎,返回给定字符串名的类
Class.forName("net.sourceforge.jtds.jdbc.Driver");//加载驱动换成这个
} catch (Exception e) {
// e.printStackTrace();
System.out.println("加载数据库引擎失败");
System.exit(0);
}
System.out.println("数据库驱动成功");

try {
String user = "sa";
String password = "123123";
Connection con = DriverManager.getConnection(connectDB, user,
password);// 连接数据库对象
System.out.println("连接数据库成功");
满心欢喜的debug,结果。。。还是错了错了错了。。。和别人的代码比较了一下没什么区别啊,结果报了

 java.lang.VerifyError: net/sourceforge/jtds/jdbc/TdsCore

错误,想不通,又去找了一下问题,发现是jtds1.3.1版本的问题,使用jtds1.3.0.jar就可以了。。。也是醉了。这里就不说了,网上已经很多。重新下了jtds1.3.0.jar放到项目里,可以用了。。。