首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

JDBC 連接 SQL Server 2000 常見錯誤總匯:Socket 錯誤、認證失敗、對象無效、驅動版本不匹配

     編輯:關於SqlServer

環境:XP + SQL Server 2000 + JDBC

錯誤 1:Error establishing socket

原因:缺少 SP3 補丁,或驅動 jar 包版本不匹配。

解決:

  1. 下載官方 SP3:Microsoft SQL Server 2000 Driver for JDBC SP3
  2. 運行 setup.exe 只會解壓,必須進入解壓目錄執行 setup.bat 完成真正安裝
  3. 專案 lib 下替換為 SP3 版的三個 jar:msbase.jar、mssqlserver.jar、msutil.jar

錯誤 2:用戶 'sa' 登錄失敗。原因: 未與信任 SQL Server 連接相關聯

原因:SQL Server 未啟用混合認證(SQL Server + Windows)。

解決:

  1. 企業管理器 → 右鍵服務器 → 「編輯 SQL Server 註冊屬性」 → 選「使用 Windows 身份驗證」
  2. 若無效:右鍵服務器 → 「屬性」 → 「安全性」頁 → 身份驗證選「SQL Server 和 Windows」

錯誤 3:[SQLServer] 對象名 XXX 無效

原因:連接用戶權限不足(如用 sa 連但對象屬於其他用戶)。

解決:改用專門創建的應用用戶,並授予該用戶對應數據庫的 db_owner 或至少 SELECT/INSERT/UPDATE/DELETE 權限。

測試 JSP 代碼(含中文轉碼)

<%@ page contentType="text/html; charset=gb2312" language="java"
    import="java.sql.*,java.io.*" %>
<html><body>
data from SQL Server DB: <hr><table>
<%! 
  String trans(String chi) {
    String result = null;
    try { byte[] temp = chi.getBytes("iso-8859-1"); result = new String(temp); }
    catch (Exception e) { System.out.println(e); }
    return result;
  }
%>
<%
  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
  Connection con = DriverManager.getConnection(
    "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=ch12", "sx", "sx");
  Statement stmt = con.createStatement();
  ResultSet rst = stmt.executeQuery("select * from contact");
  while (rst.next()) {
    out.println("<tr><td>" + trans(rst.getString("userName")) + "</td>"
      + "<td>" + trans(rst.getString("phone")) + "</td>"
      + "<td>" + trans(rst.getString("mail")) + "</td></tr>");
  }
  rst.close(); stmt.close(); con.close();
%>
</table></body></html>

關鍵檢查清單

  • ✅ SP3 真正安裝(執行了 setup.bat)
  • ✅ 驅動 jar 版本與 SP3 一致
  • ✅ SQL Server 啟用「SQL Server 和 Windows」混合認證
  • ✅ 1433 端口開放(netstat -an | find "1433")
  • ✅ 防火牆允許 1433 入站
  • ✅ 連接串端口與實際一致(預設 1433,命名實例需指定實例名)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved