android直接鏈接sqlserver數據庫
2018年04月18日 11:54:10 帥氣的鉛筆 閱讀數:310更多
版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_28779083/article/details/79986357
1、開發中遇到需要android端直接鏈接服務端sqlserver數據庫,並向sqlserver數據庫插入數據的場景。
2、鏈接到sqlserver數據庫,需要用到 jtds 工具包,我使用的是 jtds-1.3.1.jar。點擊百度網盤下載,密碼: fma7
3、下面就是直接鏈接sqlserver數據庫的代碼:
package com.mtjsoft.www.myapplication.data;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author mtj 2018-4-9 10:00:48
* Created by Administrator on 2018/4/9.
* android 鏈接sqlserver數據庫
*/
public class MtjServerDatabaseTools {
private static String user = "數據庫用戶名";
private static String password = "數據庫密碼";
private static String DatabaseName = "數據庫名稱";
private static String IP = "數據庫所在的IP地址";
/**
* 連接字符串
*/
private static String connectDB = "jdbc:jtds:sqlserver://" + IP + ":1433/" + DatabaseName + ";useunicode=true;characterEncoding=UTF-8";
private static Connection conn = null;
private static Statement stmt = null;
/**
* 鏈接數據庫
*
* @return
*/
private static Connection getSQLConnection() {
Connection con = null;
try {
//加載驅動換成這個
Class.forName("net.sourceforge.jtds.jdbc.Driver");
//連接數據庫對象
con = DriverManager.getConnection(connectDB, user,
password);
} catch (Exception e) {
}
return con;
}
/**
* 向服務器數據庫插入數據
* @tabName 要插入的表名
* @tabTopName 要插入的字段名字符串,例如(name,password,age)
* @values 與tabTopName 中 字段名一一對應的值。一次插入多跳數據,可以用逗號隔開。例如("張三","zhangsan","24"),("李四","lisi","26")
*/
public static int insertIntoData(String tabName, String tabTopName, String values) {
int i = 0;
try {
if (conn == null) {
conn = getSQLConnection();
stmt = conn.createStatement();
}
if (conn == null || stmt == null) {
return i;
}
String sql = "insert into " + tabName + tabTopName + " values " + values;
i = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
Log.i("mtj", "同步數據庫表【" + tabName + "】失敗。");
}
return i;
}
/**
* 向服務器數據庫插入數據---並返回插入的主鍵id。
* 注意,此方法只能返回最新插入的一條數據的id。所以一次插入多跳數據時,只返回最後一個id。
*/
public static int insertIntoDataReturnId(String tabName, String tabTopName, String values, CallBackImp callBackImp) {
int id = 0;
try {
if (conn == null) {
conn = getSQLConnection();
stmt = conn.createStatement();
}
if (conn == null || stmt == null) {
return id;
}
String sql = "insert into " + tabName + tabTopName + " values " + values;
int i = stmt.executeUpdate(sql);
if (i > 0) {
ResultSet resultSet = stmt.executeQuery("select SCOPE_IDENTITY() as id;");
while (resultSet.next()) {
id = resultSet.getInt(1);
}
} else {
Log.i("mtj", "同步數據庫表【" + tabName + "】---->失敗。");
}
} catch (SQLException e) {
e.printStackTrace();
Log.i("mtj", "同步數據庫表【" + tabName + "】---->失敗。");
}
return id;
}
/**
* 關閉數據庫鏈接
*/
public static void closeConnect() {
if (stmt != null) {
try {
stmt.close();
stmt = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
android端連接sqlserver數據庫的方法就完成了,是不是很簡單。
4、我們模仿一個場景演示一下。從本地數據庫user表中取出所有數據,插入到sqlserver數據中。
- 從本地取出所有的user數據。轉換成上面 insertIntoData()方法中所需要傳入的字符串。
- 假設本地user表和sqlserver中的user表的字段都是一致的。
SQLiteDatabase database = 獲取一個可讀的就行,這裏就不說;
//數據庫表的所有字段名稱
StringBuilder tabTopName = new StringBuilder();
//存放數據庫表的數據
StringBuilder values = new StringBuilder();
//按照表名user,查詢出所有數據
Cursor cursor = database.query("user", null, "",
null, null, null, null);
if (cursor != null && cursor.getCount() > 0) {
int column = cursor.getColumnCount();
//拼接所有字段名,例如 (name,password,age)
tabTopName.append("(");
for (int k = 0; k < column; k++) {
String s = cursor.getColumnName(k);
//過濾掉本地數據庫的id;因爲sqlserver有自增的id
if (!"id".equals(s)) {
tabTopName.append(s);
if (k != column - 1) {
tabTopName.append(",");
} else {
tabTopName.append(")");
}
}
}
//拼接所有數據
//例如("張三","zhangsan","24"),("李四","lisi","26")
while (cursor.moveToNext()) {
values.append("(");
for (int k = 0; k < column; k++) {
String s = cursor.getColumnName(k);
//過濾掉本地數據庫的id;因爲sqlserver有自增的id
if (!"id".equals(s)) {
String strValue = cursor.getString(k);
values.append("'");
values.append(strValue);
values.append("'");
if (k != column - 1) {
values.append(",");
} else {
values.append(")");
}
}
}
values.append(",");
}
values.deleteCharAt(values.length() - 1);
cursor.close();
database.close();
//組合成sql語句的格式。向服務器數據庫插入數據。
int count = MtjServerDatabaseTools.insertIntoData("user", tabTopName.toString(), values.toString());
if (count > 0) {
//同步數據庫表成功
} else {
//同步數據庫表失敗
}
}