使用jtds-1.3.1连接Android与SQL Server时遇XAConnection字节码找不到错误
解决Android使用jtds连接SQL Server时的
javax/sql/XAConnection缺失问题 我来帮你搞定这个问题!你遇到的Failed to find byte code for javax/sql/XAConnection错误,本质原因是Android的运行时库不包含Java EE标准里的javax.sql.XAConnection类,而你用的jtds 1.3.1版本驱动刚好依赖了这个类,所以才会报错。
下面是具体的解决步骤:
1. 降级jtds驱动版本
换成jtds 1.2.7版本,这个版本的驱动移除了对XAConnection相关类的依赖,完美适配Android环境。你只需要把当前的jtds-1.3.1.jar替换成jtds-1.2.7.jar即可。
2. 修正连接URL的拼写错误
你代码里的URL写了jdbc:jtdc:sqlserver://192.168.1.4/DATABASE,这里有个低级拼写错误:应该是jdbc:jtds:sqlserver://...(是jtds不是jtdc),这个错误会直接导致驱动无法识别URL格式,一定要修正。如果你的SQL Server有实例名,记得加上;instance=SQLEXPRESS(根据你的实例名调整)。
3. 添加网络访问权限
在AndroidManifest.xml里添加网络权限,否则App无法访问远程SQL Server:
<uses-permission android:name="android.permission.INTERNET" />
4. 避免在主线程执行JDBC操作
Android严格禁止在主线程进行网络/数据库操作,否则会触发NetworkOnMainThreadException。建议把连接逻辑放到异步任务里,比如用AsyncTask(Java):
private class SqlConnectionTask extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... params) { String url = "jdbc:jtds:sqlserver://192.168.1.4/DATABASE"; String user = "你的数据库用户名"; String pass = "你的数据库密码"; try { Class.forName("net.sourceforge.jtds.jdbc.Driver"); Connection con = DriverManager.getConnection(url, user, pass); // 连接成功,可在此执行查询等操作 con.close(); return "连接成功!"; } catch (Exception e) { e.printStackTrace(); return "连接失败:" + e.getMessage(); } } @Override protected void onPostExecute(String result) { TextView textView = findViewById(R.id.conn); textView.setText(result); } }
然后在onCreate里启动这个任务:
new SqlConnectionTask().execute();
按照上面的步骤操作,应该就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者Rohit Chauhan




