一次在重装系统并重新搭建 JAVA 运行环境后,为了测试运行环境是否搭建好,写了一个非常简单的 JDBC 程序测试数据库连接。
IDE : Eclipse3.2
DB : SQLServer2000
Driver : MS 的官方驱动: msbase.jar 、 mssqlserver.jar 、 msutil.jar
源程序如下:
文件名: SqlServerTest.java
package test;
import java.sql.*;
/**
* @author lpeter SQLServer 连接测试
*/
public class SqlServerTest {
// 驱动类
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" ;
// 用户名
static String username = "peter" ;
// 待执行的 SQL 语句
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( " 驱动类没有找到 ." );
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null ) // 结果集没有关闭时关闭结果集
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (pstmt != null ) // 发送对象没有关闭时关闭发送对象
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (conn != null ) // 连接没有关闭时关闭连接
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
执行这段程序时,出现错误:
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 )
出现了这个错误,我马上想到连接字符串有问题。可在网上找了好几个版本都是这样。
后来由于某种偶然原因,我知道了 SQLServer 可以设置查看端口号。步骤如下:
1. 打开企业管理器,依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组,列出一部分数据库服务器。
2. 右击我们要连接的数据库服务器,选择属性,在常规选项卡点击网络配置弹出新窗口。
3. 在启用的协议区域我们选择 TCP/IP ,点击属性按钮,弹出新窗口。在这个窗口有网络协议默认值设置,我在这里看到我的默认端口是: 4067 。因面在使用 1433 连接数据库时出错。
把端口号修改为 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" ;
后,执行程序,输出: OK too.
测试连接成功。