Android端、java端连接到SQL Server ,使用 jdbc 和 jtds ,总结

今天设置了Android端到SQL  Server 的连接,用的是 jtds的包连接的,期间各种问题不断,甚是烦,整了一天加一个早上才堪堪搞定,中间也测试了用java的  jdbc 连接方式来连接数据库,最后连接成功,现总结如下

jdbc的连接方式总结:
  1. java 的 jdbc 连接要在要在classpath环境变量里设置 jdbc  包的路径;
  2. 运行sqlservermanager.msc,打开SQL Server的配置工具,打开MSSQLSERVER的协议,启用TCP/IP  ;
  3. 同时要把sqljdbc4.jar包放进libraries里面,一开始用的是sqljdbc.jar的包,可是报错,要用后面后数字4的哪个包才行。
代码如下:

  

import java.sql.Connection;
import java.sql.*;
public class TestDemo {
public static void main(String[] srg) {
  String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  //加载JDBC驱动
  String dbURL = "jdbc:sqlserver://192.168.1.25:1433; DatabaseName=mydata";  //连接服务器和数据库sample
  String userName = "sa";  //默认用户名a
  String userPwd = "000";  //密码
  Connection dbConn;
  try {
   Class.forName(driverName);
   dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
   System.out.println("Connection Successful!");  //如果连接成功 控制台输出Connection Successful!
   testConnection(dbConn);
  } catch (Exception e) {
   e.printStackTrace();
  }
  
}
public static void testConnection(Connection con) throws java.sql.SQLException {               
    try {      
        String sql = "SELECT * FROM dbo.grouporder";
        Statement stmt = con.createStatement();//创建Statement     
        ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor     
            
        while (rs.next()) {//ResultSet最初指向第一行     
            System.out.println(rs.getString("date"));  
            System.out.println( rs.getString("state"));                        
        }      
        rs.close();    
        stmt.close();    
    } catch (SQLException e) {    
        System.out.println(e.getMessage().toString());    
    } finally {    
        if (con != null)    
            try {    
                con.close();    
            } catch (SQLException e) {    
            }    
    }    
}     
}

jtds 的连接方式,这是Android端使用的连接方式,总结如下:
  1. 运行sqlservermanager.msc,打开SQL Server的配置工具,打开MSSQLSERVER的协议,启用TCP/IP  和Named Pipes;
  2. 同时要把jtds-1.3.0.jar包依赖进libs里面,我测试了很多个包,但也不知道哪个包才是合适的;
  3. jtds要不要在classpath环境变量里设置 jtds  包的路径我也不太清楚,反正我设置了的。

package com.sanhuan.demo.a20170713test;

import android.os.AsyncTask;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
public Button mButton, mButton6;
public TextView mTextView1, mTextView2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.button);
mButton6 = (Button) findViewById(R.id.button6);
mButton6.setOnClickListener(this);
mButton.setOnClickListener(this);
mTextView1 = (TextView) findViewById(R.id.textView1);
mTextView2 = (TextView) findViewById(R.id.textView2);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button6:
mTextView1.setText("执行中...");

Log.e("chen", "点击");
ConnectTask dt = new ConnectTask();
dt.execute(1);

break;
case R.id.button:
mTextView1.setText("测试");
mTextView2.setText("测试");
break;
}
}

class ConnectTask extends AsyncTask {
Connection con = null;

@Override
protected String doInBackground(Integer... params) {
Log.e("chen", "线程启动");
//建立于数据库的连接
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver"); //连接数据库
con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.1.25:1433/mydata", "sa", "000"); //192.168.1.25是使用本机(pc)的IP,mydata是我的数据库名称
Log.e("chen", "连接成功");
testConnection(con);//测试数据库连接
} catch (ClassNotFoundException e1) {

e1.printStackTrace();
Log.e("chen....Class.forName::ClassNotFoundException", e1.getMessage());
} catch (SQLException e) {
Log.e("chen", "SQLException");
e.printStackTrace();
}

return "执行完毕";
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.e("chen", result);
}

public void testConnection(Connection con) throws java.sql.SQLException {
try {
String sql = "SELECT * FROM dbo.grouporder";//查询表名为“Seed.Person”的所有内容
Statement stmt = con.createStatement();//创建Statement
ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor

while (rs.next()) {//ResultSet最初指向第一行
Log.e("&&&&&", rs.getString("date"));
Log.e("&&&&&", rs.getString("state"));
}
rs.close();
stmt.close();
} catch (SQLException e) {
System.out.println(e.getMessage().toString());
} finally {
if (con != null)
try {
con.close();
} catch (SQLException e) {
}
}
}
}
}

Android端、java端连接到SQL Server ,使用 jdbc 和 jtds ,总结_第1张图片


你可能感兴趣的:(Android端、java端连接到SQL Server ,使用 jdbc 和 jtds ,总结)