91丨国产丨白浆秘 喷水,国产熟妇毛多 A片欧美蜜臀,北京熟妇搡BBBB搡BBBB,国产精品人人做人人爽人人添

  您的位置: 【卓安特保-您身邊的護(hù)衛(wèi)專家】山東卓安安防工程有限公司,電話13361029977 >> 安防資訊 >> 卓安安防 >> Android編程
 閱讀文章

android端直接鏈接服務(wù)端sqlserver數(shù)據(jù)庫(kù)

  文章作者:網(wǎng)絡(luò)來(lái)源:網(wǎng)絡(luò)轉(zhuǎn)摘瀏覽次數(shù):6519字體:字體顏色
 閱讀權(quán)限:游客身份花費(fèi)會(huì)員幣:0添加時(shí)間:2020/3/20 9:24:19提交會(huì)員:佚名

1、開發(fā)中遇到需要android端直接鏈接服務(wù)端sqlserver數(shù)據(jù)庫(kù),并向sqlserver數(shù)據(jù)庫(kù)插入數(shù)據(jù)的場(chǎng)景。
2、鏈接到sqlserver數(shù)據(jù)庫(kù),需要用到 jtds 工具包,我使用的是 jtds-1.3.1.jar。點(diǎn)擊百度網(wǎng)盤下載,密碼: fma7
3、下面就是直接鏈接sqlserver數(shù)據(jù)庫(kù)的代碼:
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數(shù)據(jù)庫(kù)
 */

public class MtjServerDatabaseTools {
    private static String user = "數(shù)據(jù)庫(kù)用戶名";
    private static String password = "數(shù)據(jù)庫(kù)密碼";
    private static String DatabaseName = "數(shù)據(jù)庫(kù)名稱";
    private static String IP = "數(shù)據(jù)庫(kù)所在的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;

    /**
     * 鏈接數(shù)據(jù)庫(kù)
     *
     * @return
     */
    private static Connection getSQLConnection() {
        Connection con = null;
        try {
            //加載驅(qū)動(dòng)換成這個(gè)
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            //連接數(shù)據(jù)庫(kù)對(duì)象
            con = DriverManager.getConnection(connectDB, user,
                    password);
        } catch (Exception e) {
        }
        return con;
    }

    /**
     * 向服務(wù)器數(shù)據(jù)庫(kù)插入數(shù)據(jù)
     * @tabName 要插入的表名
     * @tabTopName 要插入的字段名字符串,例如(name,password,age)
     * @values 與tabTopName 中 字段名一一對(duì)應(yīng)的值。一次插入多跳數(shù)據(jù),可以用逗號(hào)隔開。例如("張三","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", "同步數(shù)據(jù)庫(kù)表【" + tabName + "】失敗。");
        }
        return i;
    }

    /**
     * 向服務(wù)器數(shù)據(jù)庫(kù)插入數(shù)據(jù)---并返回插入的主鍵id。
     * 注意,此方法只能返回最新插入的一條數(shù)據(jù)的id。所以一次插入多跳數(shù)據(jù)時(shí),只返回最后一個(gè)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", "同步數(shù)據(jù)庫(kù)表【" + tabName + "】---->失敗。");
            }
        } catch (SQLException e) {
            e.printStackTrace();
            Log.i("mtj", "同步數(shù)據(jù)庫(kù)表【" + tabName + "】---->失敗。");
        }
        return id;
    }

    /**
     * 關(guān)閉數(shù)據(jù)庫(kù)鏈接
     */
    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數(shù)據(jù)庫(kù)的方法就完成了,是不是很簡(jiǎn)單。
4、我們模仿一個(gè)場(chǎng)景演示一下。從本地?cái)?shù)據(jù)庫(kù)user表中取出所有數(shù)據(jù),插入到sqlserver數(shù)據(jù)中。
從本地取出所有的user數(shù)據(jù)。轉(zhuǎn)換成上面 insertIntoData()方法中所需要傳入的字符串。
假設(shè)本地user表和sqlserver中的user表的字段都是一致的。
            SQLiteDatabase database = 獲取一個(gè)可讀的就行,這里就不說;
            //數(shù)據(jù)庫(kù)表的所有字段名稱
            StringBuilder tabTopName = new StringBuilder();
            //存放數(shù)據(jù)庫(kù)表的數(shù)據(jù)
            StringBuilder values = new StringBuilder();
            //按照表名user,查詢出所有數(shù)據(jù)
            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);
                    //過濾掉本地?cái)?shù)據(jù)庫(kù)的id;因?yàn)閟qlserver有自增的id
                    if (!"id".equals(s)) {
                        tabTopName.append(s);
                        if (k != column - 1) {
                            tabTopName.append(",");
                        } else {
                            tabTopName.append(")");
                        }
                    }
                }
                //拼接所有數(shù)據(jù)
                //例如("張三","zhangsan","24"),("李四","lisi","26")
                while (cursor.moveToNext()) {
                    values.append("(");
                    for (int k = 0; k < column; k++) {
                        String s = cursor.getColumnName(k);
                        //過濾掉本地?cái)?shù)據(jù)庫(kù)的id;因?yàn)閟qlserver有自增的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語(yǔ)句的格式。向服務(wù)器數(shù)據(jù)庫(kù)插入數(shù)據(jù)。
                int count = MtjServerDatabaseTools.insertIntoData("user", tabTopName.toString(), values.toString());
                if (count > 0) {
                    //同步數(shù)據(jù)庫(kù)表成功
                } else {
                    //同步數(shù)據(jù)庫(kù)表失敗
                }
            }
OK。從android本地?cái)?shù)據(jù)讀取數(shù)據(jù),并向服務(wù)器sqlserver數(shù)據(jù)庫(kù)插入數(shù)據(jù)的場(chǎng)景就完成了,是不是非常的簡(jiǎn)單呢。有空的話,可以自己試一試吧。歡迎批評(píng)指正!
————————————————
版權(quán)聲明:本文為CSDN博主「帥氣的鉛筆」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_28779083/article/details/79986357

·上篇文章:SQL Server 2012 數(shù)據(jù)庫(kù)鏡像配置
·下篇文章:影響網(wǎng)絡(luò)質(zhì)量的幾種原因
復(fù)制 】 【 打印
 相關(guān)文章
沒有相關(guān)文章
特別聲明:本站除部分特別聲明禁止轉(zhuǎn)載的專稿外的其他文章可以自由轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處和原始作者。文章版權(quán)歸文章原始作者所有。對(duì)于被本站轉(zhuǎn)載文章的個(gè)人和網(wǎng)站,我們表示深深的謝意。如果本站轉(zhuǎn)載的文章有版權(quán)問題請(qǐng)聯(lián)系我們,我們盡快予以更正,謝謝。
關(guān)于我們 | 業(yè)務(wù)范圍 | 免責(zé)聲明 | 聯(lián)系我們 | 友情連接
版權(quán)所有 Copyright © 2007 【卓安特保-您身邊的護(hù)衛(wèi)專家】山東卓安安防工程有限公司,電話13361029977 All Rights Reserved.
魯ICP備11024361號(hào)-5    頁(yè)面執(zhí)行時(shí)間:15.63MS
超薄肉丝足交一区二区 | 精品无人妻一区二区三区免费蜜桃 | 蜜臀久久99精品久久久晴天影视 | 少妇裸体精品无码久久久久久久久久 | 国产成人精品免费网站 | 家庭乱伦小说视频 | 在线观看无码视频 | 搡BBB搡BBB免费观看 | 麻豆 美女 丝袜 人妻 排行 | HEYZO久久成人无码区AV | 中文字幕精品一区 | 91偷国精产品久 | 中文字字幕在线中文乱码 | 国产精品一二三区成毛片视频 | 亚洲av高清在线观看 | 国产农村妇女一级A片免黑人 | 久久AⅤ乱码一区二区三区 蝌蚪视频丨9lPoNRY | 免费中文字幕在线视频 | 亚洲精品国产av | 一区二区国产精品一站 | 久久成人精品视频 | 无码人妻精品一区二区在线A片 | 国产女人18毛片水真多成人如厕 | wWWW特级西西大胆女人的艺术 | 亚洲午夜精品一级毛片无码 | 亚洲精品一区二区三区中文字幕 | 醉地av一区二区三区 | 17c.c-起草蜜桃视频 | 国产免费AV一区二区 | 亚洲柠檬福利资源导航 | 国产乱码一区二区三区四区在线 | 搡老女人免费国产一级 | 国产-nc18嫩'草 | 欧美成人性生交大片免费 | 红桃视频乱码一区二区三区 | 亚洲国产中文字幕 | 国产女教师一级爽A片 | 精品少妇高潮乱码久久久久 | 亚洲午夜精品久久久久久app_97人 | 欧美成人高清视频 | 91精品国产aⅴ一区二区 |