我正在尝试使用SQLJDBC4 jar文件和JDK 1.6建立与SQL Server 2008 R2的jdbc连接。我正在使用Netbeans IDE并添加了SQLJDBC4 jar并在服务的'databases'部分添加了数据库的路径。代码如下:
package connect2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Connect2 {
public static void main(String[] args) throws SQLException {
Connection conn;
conn = null;
System.out.println("Done....");
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection ("jdbc:sqlserver://172.17.39.13\\CRM:1433;databaseName=crm_xchanging","crm_xchanging","Welcome001");
System.out.println ("Database connection established");
}
catch (ClassNotFoundException e)
{
System.out.println (e);
}
catch (SQLException ex)
{
System.out.println(" error");
}
finally
{
if (conn != null)
{
try{
Statement st = conn.createStatement();
ResultSet res = st.executeQuery("SELECT * FROM usertable");
System.out.println("User Name: " );
while (res.next()) {
String employeeName = res.getString("user_name");
System.out.println(employeeName);
}
conn.close();
}
catch(SQLException ex){
System.err.println("SQLException information");
while(ex!=null) {
System.err.println ("Error msg: " + ex.getMessage());
System.err.println ("SQLSTATE: " + ex.getSQLState());
System.err.println ("Error code: " + ex.getErrorCode());
ex = ex.getNextException();
// For drivers that support chained exceptions
}}
}
}
}
}
这是我得到的输出:
run:
Done....
Database connection established
SQLException information
Error msg: Connection reset
SQLSTATE: 08S01
Error code: 0
BUILD SUCCESSFUL (total time: 1 second)
我认为代码或JDK中没有任何错误。我也尝试设置最大值。 SQL Server的活动连接为0(无限)。我该如何解决这个问题?
答案 0 :(得分:1)
Java 6u29中引入了一个已知的错误,该错误导致SSL失败,特别是SQL Server 2008 R2。 An Atlassian Fisheye troubleshooting page表示修复不完整。
Oracle在6u30发布了一个修复程序,但至少有一个受影响 客户端甚至没有Java 1.7工作。
在我的开发团队中,我们发现此错误也会影响Java 8。 Fisheye文章中的一个建议是使用JVM标志禁用CBC保护,这对我来说也适用于带有SQL Server 2008 R2连接的SSL Java 8 SSL。
-Djsse.enableCBCProtection=false
另一个建议是恢复到Java 1.6.0_24。