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

Java应用指定SQL Server数据库后仍连接错误库的问题求助

Java Swing项目SQL Server连接异常:配置目标库为acadio却连接到java库

问题描述

基于Swing开发的Java课程项目,在学校笔记本通过Git拉取代码后出现异常:

  • 已在新电脑SQL Server实例中配置好acadio数据库,且修改了登录用户名和密码
  • 数据库端和代码配置看似正常,但应用始终连接到用于测试的java库,导致Swing组件展示错误数据
  • 已尝试刷新/重启项目、重启Eclipse、删除重建acadio库,均无效

环境信息

  • Eclipse版本:2023-09 (4.29.0),此前使用2024-03版本
  • 操作系统:Windows 11 x86_64
  • Java版本:17.0.8.1(Eclipse Adoptium)

数据库连接代码

package services;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BD {

    public Connection con = null;
    public PreparedStatement st = null;
    public ResultSet rs = null;

    private final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private final String DATABASENAME = "acadio";
    private final String URL = "jdbc:sqlserver://localhost;databasename=" + DATABASENAME;
    // 已隐去登录信息
    private final String LOGIN = "*******";
    private final String PASSWORD = "*****";
    // private final String INTEGRATED_SECURITY = "true";

    /**
     * 建立数据库连接
     * @return 连接成功返回true,失败返回false
     */
    public boolean getConnection() {
        try {
            Class.forName(DRIVER);
            con = DriverManager.getConnection(URL, LOGIN, PASSWORD);
            System.out.println("Connected successfully!");
            return true;
        } catch (SQLException error) {
            System.out.println("Error connecting to the database: " + error.toString());
            return false;

        } catch (ClassNotFoundException error) {
            System.out.println("Error loading the driver: " + error.toString());
        }
        return true;
    }

    /**
     * 关闭连接并释放资源
     */
    public void close() {

    }

    public static void main(String[] args) {
        BD bd = new BD();
        bd.getConnection();
    }
}

排查与解决方案

  1. 验证实际连接URL
    在getConnection方法中添加打印语句,确认生成的URL是否正确:

    System.out.println("实际连接URL: " + URL);
    

    运行main方法,检查输出的URL是否确实包含databasename=acadio,排除字符串拼接错误。

  2. 检查SQL Server登录用户的默认数据库

    • 打开SQL Server Management Studio,找到代码中LOGIN对应的登录账号
    • 右键选择「属性」,查看「默认数据库」选项,若设置为java,会导致连接时自动切换到该库
    • 将默认数据库修改为acadio,或确保URL中显式指定的databaseName优先级生效(注意SQL Server大小写敏感性场景)
  3. 清理Eclipse编译缓存

    • 右键项目 → 「Clean...」,选择当前项目执行清理
    • 手动删除项目下的bin目录,重新编译项目,避免旧编译文件残留导致的配置不生效
  4. 排查配置文件或硬编码覆盖

    • 检查项目中是否存在数据库连接配置文件(如.properties、.xml),确认代码是否实际读取配置文件而非类中常量
    • 全局搜索项目中包含java库名的代码,排查是否有其他地方硬指定了数据库名称
  5. 直接验证连接后的数据库
    在连接成功后执行查询,确认当前连接的数据库:

    if (con != null) {
        ResultSet rs = con.createStatement().executeQuery("SELECT DB_NAME()");
        if (rs.next()) {
            System.out.println("当前连接的数据库: " + rs.getString(1));
        }
    }
    

    此步骤可直接定位连接的实际库名,明确问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:02:08