You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动