android直接链接sqlserver数据库

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数据库插入数据的场景就完成了,是不是非常的简单呢。有空的话,可以自己试一试吧。欢迎批评指正!

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Android Studio中连接SQL Server数据库,您需要遵循以下步骤: 1. 下载并安装Microsoft JDBC驱动程序:首先,您需要下载并安装适用于SQL Server的Microsoft JDBC驱动程序。这个驱动程序使得与SQL Server进行通信变得可能。您可以从Microsoft的官方网站上找到它。 2. 将驱动程序添加到项目中:在Android Studio中,将下载的JDBC驱动程序依赖项添加到您的项目中。要实现这一点,您可以在项目的build.gradle文件中添加以下行:implementation files('path_to_jdbc_driver.jar')。请替换“path_to_jdbc_driver.jar”为您下载的JDBC驱动程序的实际路径。 3. 编写代码连接到数据库:在您的Android Studio项目中,您可以编写代码来连接到SQL Server数据库。使用JDBC驱动程序,您可以设置数据库连接URL、用户名和密码,并执行SQL查询。以下是一个简单的示例代码片段: ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class SQLConnection { public static void main(String[] args) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String connectionUrl = "jdbc:sqlserver://serverName:portNumber;databaseName=databaseName;user=userName;password=password"; connection = DriverManager.getConnection(connectionUrl); statement = connection.createStatement(); String sql = "SELECT * FROM tableName"; resultSet = statement.executeQuery(sql); while (resultSet.next()) { // 处理查询结果 } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭连接 try { if (resultSet != null) resultSet.close(); if (statement != null) statement.close(); if (connection != null) connection.close(); } catch (Exception e) { e.printStackTrace(); } } } } ``` 以上代码将连接到SQL Server数据库并执行一个查询。 4. 运行您的代码:保存并运行您的Android Studio项目。如果一切正常,您将能够成功地连接到SQL Server数据库并执行您的查询。 希望这些步骤能帮助您连接SQL Server数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的铅笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值