当前位置:首页 > 百科 > 安卓连接sqlserver数据库源码

安卓连接sqlserver数据库源码

2026-10-17 05:46:53 [探索] 来源:力不从心网

安卓直连 SQL Server 这件事,安卓技术上是连接可行的,但坑比想象中多。据库我去年做过一个内部工具,源码需要让平板上的安卓 App 直接查公司内网的 SQL Server,绕不开 JDBC。连接Android 原生没有 JDBC 驱动,据库得手动把 jtds 或微软的源码 mssql-jdbc 塞进项目里。

先说驱动选择。安卓jTDS 是连接老牌方案,体积小,据库兼容 SQL Server 2005 到 2012 比较稳。源码微软官方的安卓 mssql-jdbc 从 6.0 版本开始才支持 Android,但要求 API 级别 21 以上,连接而且依赖了 java.sql 的据库一些边角类,打包时容易报重复类。我最后用的是 jTDS 1.3.1,jar 包不到 300KB,丢进 libs 目录,在 build.gradle 里加一行 implementation files('libs/jtds-1.3.1.jar') 就能用。

连接字符串格式是这样的:

String url = "jdbc:jtds:sqlserver://192.168.1.100:1433;databaseName=TestDB;user=sa;password=123456;"; Connection conn = DriverManager.getConnection(url); 

别急着复制。Android 主线程不允许网络操作,这段必须扔进子线程。我习惯用 ExecutorService 开一个单线程池,或者直接 new Thread 包起来。下面是一个能跑的最小示例:

new Thread(() -> {  try {  Class.forName("net.sourceforge.jtds.jdbc.Driver"); Connection conn = DriverManager.getConnection(url); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT TOP 10 * FROM Users"); while (rs.next()) {  Log.d("DB", rs.getString("UserName")); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) {  e.printStackTrace(); } }).start(); 

实际跑起来会遇到几个典型问题。第一个是网络权限,AndroidManifest.xml 里必须加 android.permission.INTERNET,否则连不上还看不到明确报错。第二个是明文流量限制,Android 9 以后默认禁止 HTTP 明文传输,虽然 JDBC 走的是 TCP 不是 HTTP,但有些设备或定制 ROM 会误判,保险做法是在 manifest 的 application 标签里加 android:usesCleartextTraffic="true"。

第三个坑更隐蔽:SQL Server 的 TCP/IP 协议默认可能是禁用的。你得打开 Sql Server Configuration Manager,在“SQL Server 网络配置”里把对应实例的 TCP/IP 启用,并且确认端口是 1433。我那次折腾了一下午,一直报“连接被拒绝”,最后发现是服务器端 TCP 没开。

性能方面,直连 JDBC 在局域网内延迟大概 20 到 50 毫秒,查询几百行数据没问题。但别指望它做复杂联表或者大数据量拉取,Android 的 JDBC 驱动没有连接池,每次查询都新建连接,频繁操作会卡。我的做法是维护一个长连接,配合简单的连接有效性检查,比如每 30 秒发一次 SELECT 1。

安全上,明文密码写在代码里是下策。稍微正经一点的做法是把连接参数放在服务端接口里,App 通过 HTTPS 拿临时令牌,再拿令牌换数据库连接。但那样就不叫“直连”了。所以直连 SQL Server 只适合内网工具、演示原型,或者对安全要求不高的场景。真要上生产,还是走 API 网关更稳妥。

最后给一个容易忽略的细节:jTDS 在 Android 高版本上可能报 java.lang.NoClassDefFoundError: javax.naming.Referenceable。解决办法是在 proguard 规则里加 -dontwarn javax.naming.**,或者干脆关掉 minifyEnabled。我试过开混淆,折腾半天不如直接关掉省事。

这套方案我用了大半年,查报表、改配置都够用。你要是也打算这么干,先把服务器 TCP 端口和驱动版本确认好,剩下的就是写个线程池的事。

(责任编辑:休闲)

推荐文章
  • 网站找不到

    网站找不到 半夜两点十七分,我盯着浏览器里那片刺眼的灰白色,上面只有一行小字:“此网站无法访问”。 这不是我第一次遇见这玩意儿了。上个月帮朋友找一个老牌论坛的存档,输入那个用了十几年的域名,啪,同样的灰白。当时我 ...[详细]
  • 黑洞代理ip

    黑洞代理ip 去年秋天我在做跨境电商数据抓取,目标站点对大陆IP封得死紧,换了好几个机房都不行。朋友扔过来一个黑洞代理的测试账号,说“你试试这个,跟普通代理不一样”。我当时没当回事,结果连上去跑了三天,愣是没掉线。 ...[详细]
  • 反诈宣传经验总结

    反诈宣传经验总结 反诈宣传经验总结 上个月我们社区搞了一次反诈宣讲,来的大多是退休老人。我负责讲“冒充公检法”那一块。刚开讲五分钟,后排一个大爷站起来说:“小伙子你别讲了,我上礼拜刚被骗了八万。”全场安静。他接着说:“ ...[详细]
  • 中国卫生职称网

    中国卫生职称网 去年冬天,我在济南一家社区医院碰到老张。他五十出头,干了二十多年临床,突然问我:“那个中国卫生职称网,到底靠不靠谱?”他正准备报副高,材料攒了一摞,却卡在论文和继续教育学分的上传环节。我让他把网址发我 ...[详细]
  • 信息系统弱口令整改报告怎么写

    信息系统弱口令整改报告怎么写 上周帮一家制造业客户做安全巡检,发现他们内部ERP系统的管理员账号密码是Admin@123,而且这个密码已经用了三年没改过。更夸张的是,连数据库备份服务器的root口令都写在机房白板上,拍照就能看见。 ...[详细]
  • 网页的编辑与发布课件

    网页的编辑与发布课件 打开记事本,敲下 <h1>我的第一个网页</h1>,保存为 index.html。双击这个文件,浏览器里跳出一行黑字。这就是网页编辑最原始的形态——没有可视化界面,没有拖拽组件 ...[详细]
  • 哈尔滨5A大地网测试仪

    哈尔滨5A大地网测试仪 哈尔滨5A大地网测试仪拿到手里,第一感觉是沉。不是那种笨重的沉,是铁壳子加内部线圈和电路板堆出来的扎实感。这台设备在电力系统里有个更直白的称呼——大地网接地电阻测试仪,专门用来测变电站、发电厂那类大型 ...[详细]
  • 渗透面试

    渗透面试 面试官把简历翻到第二页,突然抬头问我:“你刚才说,你上一份工作是在一家做数据标注的公司?”我说是。他笑了,那种笑让我后颈发紧。“那家公司,其实是我们投的。” 我花了三秒才反应过来。他说的“我们”,是眼 ...[详细]
  • 查行业数据的网站有哪些

    查行业数据的网站有哪些 查行业数据,最怕的不是找不到,而是找错地方白花钱。我踩过不少坑,现在手头常用的就那么几个,按靠谱程度和适用场景给你捋一遍。 官方统计渠道永远是第一选择。国家统计局官网stats.gov.cn)里的年度 ...[详细]
  • 无版权电视剧网站

    无版权电视剧网站 ```html 无版权电视剧网站 body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "He ...[详细]
热点阅读