You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio连接SQL Server无法显示数据问题求助

Android连接SQL Server:解决net.sourceforge.jtds.jdbc.Driver错误及数据加载失败问题

核心问题排查与修复

1. 驱动类找不到与连接URL格式错误

你遇到的net.sourceforge.jtds.jdbc.Driver错误,主要来自两个原因:

  • 连接URL格式错误:代码中ConnectionURL开头写成了jdbc;jtds,正确格式应为jdbc:jtds(冒号而非分号);同时参数中存在多余空格(如databasename =、password= ),会导致解析失败。
  • 驱动依赖未正确配置:即使安装了旧版JDBC驱动,若未在项目中正确引入,依然会找不到驱动类。

2. 数据库配置混淆

代码中database = "ExperimentTable",但查询语句是Select * from ExperimentTable——这里大概率是把表名当成了数据库名,需要确认SQL Server中实际的数据库名称,替换此处的ExperimentTable。

3. 主线程网络操作的不安全做法

使用StrictMode.ThreadPolicy.Builder().permitAll()强制允许主线程做网络操作,会导致ANR风险,建议改用异步任务执行数据库操作。


修正后的代码

ConnectionHelper类

package com.example.connectandroid_sql;
import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectionHelper {
    String uName, pass, iP, port, database;

    @SuppressLint("NewAPI")
    public Connection connectionClass() {
        iP = "136.158.28.124";
        // 替换为实际的数据库名称,而非表名
        database = "你的数据库名称";
        uName = "sa";
        pass = "admin";
        port = "1433";

        Connection connection = null;
        String ConnectionURL = null;

        // 仅临时调试用,发布版请移除并改用异步操作
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        try{
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            // 修正URL格式,移除参数中的多余空格
            ConnectionURL = "jdbc:jtds:sqlserver://" + iP + ":" + port
                    + ";databasename=" + database + ";user=" + uName
                    + ";password=" + pass + ";";
            connection = DriverManager.getConnection(ConnectionURL);
        }
        catch (Exception ex){
            Log.e("Error",ex.getMessage());
        }
        return connection;
    }
}

MainActivity类(改用AsyncTask执行异步操作)

package com.example.connectandroid_sql;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class MainActivity extends AppCompatActivity {

    Connection connect;
    TextView tx1, tx2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tx1 = findViewById(R.id.textView);
        tx2 = findViewById(R.id.textView2);
    }

    public void getTextFromSQL(View v){
        new LoadSQLDataTask().execute();
    }

    // 异步任务执行数据库查询,避免主线程阻塞
    private class LoadSQLDataTask extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... voids) {
            try{
                ConnectionHelper connectionHelper = new ConnectionHelper();
                connect = connectionHelper.connectionClass();
                if (connect != null){
                    String query = "Select * from ExperimentTable";
                    Statement st = connect.createStatement();
                    ResultSet rs = st.executeQuery(query);

                    while (rs.next()){
                        // 在UI线程更新控件
                        runOnUiThread(() -> {
                            tx1.setText(rs.getString(2));
                            tx2.setText(rs.getString(3));
                        });
                    }
                    return "数据加载成功";
                } else {
                    return "连接失败,请检查配置";
                }
            } catch (Exception ex){
                Log.e("Error", ex.getMessage());
                return "加载出错:" + ex.getMessage();
            } finally {
                // 关闭连接,避免资源泄漏
                try {
                    if (connect != null) connect.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        protected void onPostExecute(String result) {
            Log.d("SQLResult", result);
        }
    }
}

额外配置与验证步骤

  1. 添加驱动依赖:在app模块的build.gradle中添加jtds驱动依赖(替换为你使用的版本):
dependencies {
    implementation 'net.sourceforge.jtds:jtds:1.3.1'
}
  1. SQL Server配置验证:
    • 确认SQL Server已启用TCP/IP协议,1433端口在防火墙中开放
    • 确认sa账户已启用,密码正确,且拥有目标数据库的访问权限
    • 确认远程连接已在SQL Server中开启
  2. 次要错误处理:
    • Invalid File Path for libcolorx-loader.so:属于系统或第三方库的警告,可通过清理项目缓存(Build -> Clean Project)、更新Android Studio版本解决
    • E/Perf: perftest packageName...:是系统性能测试相关的日志,不影响业务逻辑,可忽略

内容的提问来源于stack exchange,提问作者JazzIQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:40:21