android直接鏈接sqlserver數據庫

android直接鏈接sqlserver數據庫

2018年04月18日 11:54:10 帥氣的鉛筆 閱讀數:310更多

個人分類: android數據庫

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 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 {
                    //同步數據庫表失敗
                }
            }

OK。從android本地數據讀取數據,並向服務器sqlserver數據庫插入數據的場景就完成了,是不是非常的簡單呢。有空的話,可以自己試一試吧。歡迎批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章