• Android studio连接sqlserver数据库


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

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

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

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

    https://zhidao.baidu.com/question/1896011812162672700.html

    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 }

    (2)xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/create_database"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="创建数据库"/>
    
        <Button
            android:id="@+id/add_data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加数据"/>
    
        <EditText
            android:id="@+id/result_text"
            android:layout_width="300sp"
            android:layout_height="100sp"/>
    
    
    </LinearLayout>
    View Code

    查询结果:

    碰到的问题:

    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。

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

  • 相关阅读:
    vue 优化hash持久化缓存
    用vue的抽象组件来做一个防止img标签url为空或url地址出错的验证
    读源码学会一些编程小技巧
    webpack编译后的代码如何在浏览器执行
    vue@cli3 public目录下的静态图片,如何使用在css类文件中(sass可行,纯css不行)
    vue@cli3 项目模板怎么使用public目录下的静态文件,找了好久都不对,郁闷!
    vscode如何配置ts的lint,如何配置才能让eslint和prettier不冲突一键格式化代码(vue开发使用)
    rollup 使用babel7版本的插件rollup-plugin-babel,rollup-plugin-babel使用报错解决办法。
    深入研究webpack之Tree Shaking相关属性sideEffects用处
    前端性能优化之http缓存
  • 原文地址:https://www.cnblogs.com/panqiaoyan/p/12869971.html
Copyright © 2020-2023  润新知