JDBC連接SQLServer時(shí)出現(xiàn)錯(cuò)誤Error establishing socket.的解決。
Posted on 2006-12-22 13:26 李鵬 閱讀(31742) 評(píng)論(19) 編輯 收藏 所屬分類(lèi): jdbc一次在重裝系統(tǒng)并重新搭建 JAVA 運(yùn)行環(huán)境后,為了測(cè)試運(yùn)行環(huán)境是否搭建好,寫(xiě)了一個(gè)非常簡(jiǎn)單的 JDBC 程序測(cè)試數(shù)據(jù)庫(kù)連接。
IDE : Eclipse3.2
DB : SQLServer2000
Driver : MS 的官方驅(qū)動(dòng): msbase.jar 、 mssqlserver.jar 、 msutil.jar
源程序如下:
文件名: SqlServerTest.java
package test;
import java.sql.*;
/**
* @author lpeter SQLServer 連接測(cè)試
*/
public class SqlServerTest {
// 驅(qū)動(dòng)類(lèi)
static String driverClass =
"com.microsoft.jdbc.sqlserver.SQLServerDriver" ;
// 連接字符串
static String url =
"jdbc:microsoft:sqlserver://127.0.0.1:1433;dataBaseName=Test" ;
// 密碼
static String password = "peter" ;
// 用戶(hù)名
static String username = "peter" ;
// 待執(zhí)行的 SQL 語(yǔ)句
static String sql = "SELECT * FROM Test" ;
public static void main(String[] args) {
Connection conn = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
try {
Class.forName( driverClass );
conn = DriverManager.getConnection( url , username , password );
pstmt = conn.prepareStatement( sql );
rs = pstmt.executeQuery();
while (rs.next()) {
System. out .println( "OK." );
}
System. out .println( "OK too." );
rs.close();
pstmt.close();
conn.close();
} catch (ClassNotFoundException e) {
System. out .println( " 驅(qū)動(dòng)類(lèi)沒(méi)有找到 ." );
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null ) // 結(jié)果集沒(méi)有關(guān)閉時(shí)關(guān)閉結(jié)果集
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (pstmt != null ) // 發(fā)送對(duì)象沒(méi)有關(guān)閉時(shí)關(guān)閉發(fā)送對(duì)象
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (conn != null ) // 連接沒(méi)有關(guān)閉時(shí)關(guān)閉連接
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
執(zhí)行這段程序時(shí),出現(xiàn)錯(cuò)誤:
java.sql.SQLException : [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection( DriverManager.java:523 )
at java.sql.DriverManager.getConnection( DriverManager.java:171 )
at test.SqlServerTest.main( SqlServerTest.java:29 )
出現(xiàn)了這個(gè)錯(cuò)誤,我馬上想到連接字符串有問(wèn)題。可在網(wǎng)上找了好幾個(gè)版本都是這樣。
后來(lái)由于某種偶然原因,我知道了 SQLServer 可以設(shè)置查看端口號(hào)。步驟如下:
1. 打開(kāi)企業(yè)管理器,依次在控制臺(tái)根目錄 ->Microsoft SQL Servers->SQL Server 組,列出一部分?jǐn)?shù)據(jù)庫(kù)服務(wù)器。
2. 右擊我們要連接的數(shù)據(jù)庫(kù)服務(wù)器,選擇屬性,在常規(guī)選項(xiàng)卡點(diǎn)擊網(wǎng)絡(luò)配置彈出新窗口。
3. 在啟用的協(xié)議區(qū)域我們選擇 TCP/IP ,點(diǎn)擊屬性按鈕,彈出新窗口。在這個(gè)窗口有網(wǎng)絡(luò)協(xié)議默認(rèn)值設(shè)置,我在這里看到我的默認(rèn)端口是: 4067 。因面在使用 1433 連接數(shù)據(jù)庫(kù)時(shí)出錯(cuò)。
把端口號(hào)修改為 4067 即修改:
static String url =
"jdbc:microsoft:sqlserver://127.0.0.1:1433;dataBaseName=Test" ;
為:
static String url =
"jdbc:microsoft:sqlserver://127.0.0.1:4067;dataBaseName=Test" ;
后,執(zhí)行程序,輸出: OK too.
測(cè)試連接成功。