Android连接本地MS SQL报错求助(附代码示例)
排查Android连接本地MS SQL数据库的常见问题
我来帮你一步步排查Android连接本地MS SQL数据库时遇到的问题,咱们从代码到环境逐个核对:
1. 代码层面的核心修正
首先,你的代码缺少完整的连接字符串构建和异常处理逻辑,先补上正确的实现示例:
String ip = "192.168.1.100"; // 替换成你电脑的实际局域网IP,别用示例的999.999.9.9 String classs = "net.sourceforge.jtds.jdbc.Driver"; String db = "Mydbname"; String un = "username"; String password = "Password"; String instance = "SQLEXPRESS"; String z = ""; protected String doInBackground(String... params) { if(userid.trim().equals("")|| password.trim().equals("")) z = "Please enter User Id and Password"; else { try { // 加载JDBC驱动 Class.forName(classs); // 构建jtds标准连接字符串 String connectionUrl = String.format( "jdbc:jtds:sqlserver://%s:1433/%s;instance=%s;user=%s;password=%s", ip, db, instance, un, password ); // 尝试建立连接 Connection conn = DriverManager.getConnection(connectionUrl); if (conn != null) { z = "Connection successful!"; // 用完记得关闭连接,避免资源泄漏 conn.close(); } } catch (ClassNotFoundException e) { z = "驱动加载失败:" + e.getMessage(); e.printStackTrace(); } catch (SQLException e) { z = "SQL连接错误:" + e.getMessage(); e.printStackTrace(); } catch (Exception e) { z = "未知错误:" + e.getMessage(); e.printStackTrace(); } } return z; }
代码里需要注意:
- 必须替换
ip为SQL Server所在电脑的实际局域网IP(可以在电脑上用ipconfig命令查看IPv4地址) - 连接字符串要包含端口、实例名等关键参数,jtds的格式是固定的,不能随意省略
2. 网络与SQL Server配置检查
这是最容易踩坑的环节:
- 局域网连通性:确保Android设备和SQL Server电脑在同一个WiFi网络下,你可以用Android设备ping电脑IP测试是否能通
- SQL Server端口设置:
- 打开SQL Server配置管理器,找到「SQL Server网络配置」→「SQLEXPRESS的协议」,启用TCP/IP
- 双击TCP/IP,在「IP地址」选项卡找到「IPAll」,设置「TCP端口」为1433,然后重启SQL Server服务
- 防火墙放行:在电脑的防火墙中添加入站规则,允许1433端口的TCP连接,否则Android设备会被防火墙拦截
- 远程连接开关:打开SQL Server Management Studio(SSMS),右键服务器→「属性」→「连接」,勾选「允许远程连接到此服务器」
3. 账号与权限配置
- 身份验证模式:确保SQL Server设置为「混合模式(SQL Server和Windows身份验证模式)」,可以在SSMS右键服务器→「属性」→「安全性」查看修改,修改后需重启服务
- 账号权限:确认你使用的
username账号拥有远程连接权限,并且对Mydbname数据库有读写权限。可以在SSMS中给账号添加「public」和「db_datareader/db_datawriter」角色
4. Android项目依赖与权限
- 添加jtds依赖:在app模块的
build.gradle(Module level)中添加依赖:implementation 'net.sourceforge.jtds:jtds:1.3.1' - 网络权限:在
AndroidManifest.xml中添加必备的网络权限:<uses-permission android:name="android.permission.INTERNET" />
如果按照上面的步骤排查后还是出错,建议把捕获到的异常信息贴出来,能更精准定位问题~
内容的提问来源于stack exchange,提问作者user9615218
相关产品推荐
相关产品推荐

