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

Android端如何通过编程校验SQL Server登录信息与连接有效性

实现步骤

1. 前置配置

  • 首先在AndroidManifest.xml中添加网络权限,Android 4.4默认禁止应用网络访问,必须声明:
<uses-permission android:name="android.permission.INTERNET" />
  • 确认服务端SQL Server已经开启TCP/IP协议,默认1433端口已放通防火墙,允许外部设备访问。

2. 核心连接校验逻辑

Android 4.4禁止主线程执行网络IO操作,所有连接校验逻辑必须放在子线程中执行,以下是适配Android 4.4的实现方案:

核心代码示例

// 校验参数的异步任务,入参为IP、用户名、密码
private class CheckDbConnectionTask extends AsyncTask<String, Void, ConnectionResult> {
    @Override
    protected ConnectionResult doInBackground(String... params) {
        String ip = params[0];
        String username = params[1];
        String password = params[2];
        // 可选参数:如果支持用户自定义端口、实例名、数据库名可改为动态传入
        int port = 1433;
        String dbName = "你的默认业务库名"; // 无指定库需求可直接移除该参数
        Connection conn = null;
        try {
            // 旧版本Android必须显式加载jtds驱动,避免类找不到异常
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            // 拼接jtds连接URL
            String connUrl = String.format("jdbc:jtds:sqlserver://%s:%d;databaseName=%s;useUnicode=true;characterEncoding=utf-8",
                    ip, port, dbName);
            // 尝试建立连接
            conn = DriverManager.getConnection(connUrl, username, password);
            return new ConnectionResult(true, "连接成功,凭证有效");
        } catch (ClassNotFoundException e) {
            return new ConnectionResult(false, "驱动加载失败,请检查APP编译配置");
        } catch (java.net.UnknownHostException e) {
            return new ConnectionResult(false, "IP地址不可达,请检查IP填写是否正确、设备与数据库网络是否互通");
        } catch (java.net.SocketTimeoutException e) {
            return new ConnectionResult(false, "连接超时,请检查端口是否开放、防火墙是否允许访问");
        } catch (java.sql.SQLInvalidAuthorizationSpecException e) {
            return new ConnectionResult(false, "用户名或密码错误,请重新填写");
        } catch (java.sql.SQLException e) {
            return new ConnectionResult(false, "连接失败:" + e.getMessage());
        } finally {
            // 校验完成立即关闭连接,避免占用数据库资源
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ignore) {}
            }
        }
    }

    @Override
    protected void onPostExecute(ConnectionResult result) {
        // 回到主线程更新UI反馈结果
        if (result.isSuccess) {
            // 连接成功逻辑:可将配置加密存储到本地
            Toast.makeText(SettingActivity.this, result.msg, Toast.LENGTH_SHORT).show();
        } else {
            // 连接失败逻辑:对应提示用户修改配置
            Toast.makeText(SettingActivity.this, result.msg, Toast.LENGTH_SHORT).show();
        }
    }
}

// 连接结果实体类
private static class ConnectionResult {
    boolean isSuccess;
    String msg;
    public ConnectionResult(boolean isSuccess, String msg) {
        this.isSuccess = isSuccess;
        this.msg = msg;
    }
}

3. 调用方式

用户点击「校验连接」按钮时,取输入框参数执行异步任务即可:

String inputIp = etIp.getText().toString().trim();
String inputUsername = etUsername.getText().toString().trim();
String inputPwd = etPwd.getText().toString().trim();

// 基础非空校验
if (TextUtils.isEmpty(inputIp) || TextUtils.isEmpty(inputUsername)) {
    Toast.makeText(this, "IP和用户名不能为空", Toast.LENGTH_SHORT).show();
    return;
}

// 启动校验任务
new CheckDbConnectionTask().execute(inputIp, inputUsername, inputPwd);
注意事项
  • jtds 1.2.4默认兼容SQL Server 2000~2014版本,若SQL Server版本高于2014,需在连接URL中添加ssl=request参数适配加密连接。
  • 用户填写的数据库敏感信息存储到本地时需做加密处理,禁止明文存储在SharedPreferences等路径。
  • 若SQL Server使用命名实例或动态端口,需让用户补充填写实例名,在连接URL中添加instance=实例名参数即可。

内容的提问来源于stack exchange,提问作者Saher Al-Sous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:39:00