AndroidStudio通过JTDS远程访问SQLServer数据库
引用http://blog.sina.com.cn/s/blog_45eaa01a0102y8ug.html
一、下载SQL驱动JTDS 1 到这里 https://sourceforge.net/projects/jtds/files/jtds/ 下载 jtds-1.3.1-dist.zip 2 在Android Studio中导入Library项目 在开发环境菜单 File -- New -- Import Project... 从中找到下载的加入 3 把Library项目添加到源项目中 这部不做,调用以下语句 Class.forName("net.sourceforge.jtds.jdbc.Driver"); 会出现 ClassNotFound:net.sourceforge.jtds.jdbc.Driver 错误 在开发环境,从菜单 File -- Project Structure,点击进入 在窗口左侧选择自己的项目后,点击右侧的Dependencies。 点击右侧的“+”添加按钮,在下拉菜单中找到Module Dependency,点击打开项目选择窗口。 选择前面步骤中导入的Library项目后,点击OK按钮导入到自己项目中2 建立数据库和表 数据库 BOOK 建立表 管理员,字段 编号,姓名,密码,内容如下: 编号 姓名 密码 1001 穆木 1212 1002 久九 123 1003 巴芭 111 1004 admin 111
三、用JTDS连接SQLServer数据库相关代码 1 Android 访问sql server的类 package com.example.wmx.myapplication6; //package com.example.androidsql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBUtil { private static Connection getSQLConnection(String ip, String user, String pwd, String db) { Connection con = null; try { Class.forName("net.sourceforge.jtds.jdbc.Driver"); con = DriverManager.getConnection("jdbc:jtds:sqlserver://" + ip + ":1433/" + db, user, pwd); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return con; } public static String QuerySQL() { String result = ""; try { Connection conn = getSQLConnection("10.3.1.37", "sa", "123", "book"); String sql = "select top 10 * from 管理员"; Statement stmt = conn.createStatement();// ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { String s1 = rs.getString("姓名"); String s2 = rs.getString("密码"); result += s1 + " - " + s2 + "\n"; System.out.println(s1 + " - " + s2); } rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); result += "异常!" + e.getMessage(); } return result; } public static void main(String[] args) { QuerySQL(); } } 2 MainActivity.java package com.example.wmx.myapplication6; //package com.example.androidsql; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { private View btnTest; private View btnClean; private TextView tvTestResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnTest=findViewById(R.id.btnTestSql); btnClean=findViewById(R.id.btnClean); tvTestResult = (TextView)findViewById(R.id.tvTestResult); btnTest.setOnClickListener(getClickEvent()); btnClean.setOnClickListener(getClickEvent()); } private View.OnClickListener getClickEvent(){ return new View.OnClickListener() { @Override public void onClick(View v) { tvTestResult.setText("..."); if(v==btnTest){ test(); } } }; } private void test() { Runnable run = new Runnable() { @Override public void run() { //测试数据库的语句,在子线程操作,在主线程好像不成功。 String ret = DBUtil.QuerySQL(); Message msg = new Message(); msg.what=1001; Bundle data = new Bundle(); data.putString("result", ret); msg.setData(data); mHandler.sendMessage(msg); } }; new Thread(run).start(); } Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1001: String str = msg.getData().getString("result"); tvTestResult.setText(str); break; default: break; } }; }; } 以下 XML文件中都有大量的 左尖括号<,测试发现博客中的 < 需要和它后面的内容之间空一格才行,这样做太麻烦了,为了简单拍成图片 3 activity_main.xml
5 strings.xml
五 IP地址的获得 SQL SERVER 数据库位于PC机上, 手机和PC机位于同一个局域网内 1 获得 PC机IP地址10.3.1.37 从命令行执行 ipconfig 获得Windows IP 配置如下: 无线局域网适配器 无线网络连接: 连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : fe80::59cb:ec67:d8a1:77d3 IPv4 地址 . . . . . . . . . . . . : 192.168.123.1 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : 以太网适配器 本地连接: 连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : fe80::50fb:a1b7:500e:82ef IPv4 地址 . . . . . . . . . . . . : 10.3.1.37 子网掩码 . . . . . . . . . . . . : 255.255.0.0 默认网关. . . . . . . . . . . . . : 10.3.0.1 2 获得手机的IP地址 10.0.2.10 这一步不需要,只是将来需要静态设置时需要 从手机上, 设置--关于手机-- 状态信息