Android studio连接sqlserver数据库

Android studio连接sqlserver数据库

记录我的学习过程:我是android8.0,jdk13.0

1、要先下载jdbc的两个包(我忘记在哪下载了,可以自行搜一下)

注意:下载之后复制到android studio项目app的libs中,然后右键该包,选择add as library,确定之后就可以了。

Android studio连接sqlserver数据库_第1张图片

2、连接sqlserver数据库前必做的事:(以下链接很详细)

如何连接sqlserver数据库_百度知道

3、第一步完成后,就已经知道数据库用户名和密码了,接下来开始写代码:

sqlserver数据库URL是jdbc:jtds:sqlserver://电脑ip地址:1433;DatabaseName=你的数据库名;

ip地址请看此链接:https://jingyan.baidu.com/article/63f2362816d56c0208ab3dd5.html

 (1)MainActivity.java

 1 package com.example.jdbctest;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 
 5 import android.os.Bundle;
 6 import android.util.Log;
 7 import android.view.View;
 8 import android.view.ViewManager;
 9 import android.widget.Button;
10 import android.widget.EditText;
11 
12 import java.sql.Connection;
13 import java.sql.DriverManager;
14 import java.sql.PreparedStatement;
15 import java.sql.ResultSet;
16 import java.sql.SQLException;
17 import java.sql.Statement;
18 
19 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
20     private Button createDataBase,addData;
21     private EditText resultText;
22     String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
23     //String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=JDBCDemo";
24     String dbURL="jdbc:jtds:sqlserver://192.168.xxx:1433;DatabaseName=JDBCDemo";//数据库连接url
25     String userName="sa";//数据库用户名
26     String userPwd="sasasa";//数据库密码
27     Connection con;
28 
29 
30     @Override
31     protected void onCreate(Bundle savedInstanceState) {
32         super.onCreate(savedInstanceState);
33         setContentView(R.layout.activity_main);
34         init();//初始化组件
35         addData.setOnClickListener(this);
36     }
37 
38 
39     private void init() {
40         createDataBase=(Button)findViewById(R.id.create_database);
41         addData=(Button)findViewById(R.id.add_data);
42         resultText=(EditText)findViewById(R.id.result_text);
43     }
44 
45 
46     @Override
47     public void onClick(View v) {
48         switch (v.getId()){
49             case R.id.add_data:
50                 new Thread(new Runnable() {
51                     @Override
52                     public void run() {
53                         try{
54                             Class.forName(driverName); //jdk版本6.0以上可以省略这句话
55                             con= DriverManager.getConnection(dbURL,userName,userPwd);
56                             String sql="select * from Library";
57                             Statement st=con.createStatement();
58                             ResultSet rs=st.executeQuery(sql);
59                             while(rs.next()){
60                                 Log.i("MainActivity",rs.getString("书籍名称"));
61                             }
62                             rs.close();
63                             st.close();
64                             con.close();
65                             System.out.println("连接数据库成功");
66                         }catch(Exception e){
67                             e.printStackTrace();
68                         }
69                     }
70                 }).start();
71                 break;
72         }
73     }
74 }

查询结果:

Android studio连接sqlserver数据库_第2张图片

碰到的问题:

1.android4.0以上连接数据库不能在主线程执行,要另外来一个子线程去执行,操作看上述代码50-70行。

如果直接在主线程执行,会报以下错误:Attempt to invoke interface method 'java.sql.PreparedStatement java.sql.Connection.prepareStatement(java.lang.String)' on a null object reference

 2.如果你的数据库连接url写成:jdbc:sqlserver://localhost:1433;DatabaseName=JDBCDemo

在eclipse上是可以连接成功的,但在android studio就会报错:com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。

我也不知道为什么会错,后来上网找了半天解决方法,最后终于解决了,就是将url改成 jdbc:jtds:sqlserver://192.168.56.1:1433;DatabaseName=JDBCDemo。

 最后的牢骚:结果出来的一刻非常非常开心,觉得一切的辛苦都是值得的,虽然现在还在摸索状态,也不清楚以后能不能做程序员,但是每解决完一个问题,我就会感觉自己能继续走下去。

The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL)

1.问题描述:
windows本地测试没有问题,linux(Centos 8)上面运行出现问题。sqlserver 数据库链接报错

报错如下

主要报错:Server chose TLSv1, but that protocol version is not enabled or not supported by the client

java.ext.dirs: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre/lib/ext:/usr/java/packages/lib/ext
2020-06-23 16:41:10.267 [main] ERROR com.alibaba.druid.pool.DruidDataSource:936 - init datasource error,
 url: jdbc:sqlserver://192.168.0.174:1433;DatabaseName=xxx;integratedSecurity=false
com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "Server chose TLSv1, but that protocol version is not enabled or not supported by the client.". ClientConnectionId:22917695-6f2a-432e-96e8-e777f4237acc

2.方法1
JDK目录下的jre\lib\security,打开java.security

把3DES_EDE_CBC注释掉。保存,测试成功!

补充说明:开发环境改的是上面路径,实际生产环境修改的是JRE下的java.security

3.方法2 
将系统的openjdk 修改为Oracle jdk

openjdk 更改为Oracle jdk
 

你可能感兴趣的:(android,android)