【发布时间】:2012-08-21 16:08:24
【问题描述】:
我正在使用 NetBeans IDE 7.0.1,并且正在使用 Microsoft 的 JDBC 测试 Microsoft SQL Server 连接。我有这个测试程序:
package testsql;
import java.sql.*;
public class TestSQL {
public static void main(String[] args) {
Statement stmt = null;
ResultSet rs = null;
Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionURL =
"jdbc:sqlserver://foo.bar.com:1433;" +
"databaseName=flintstone;integratedSecurity=true;";
con = DriverManager.getConnection(connectionURL);
} catch (SQLException e) {
System.out.println("SQL Exception: " + e.toString());
} catch (ClassNotFoundException e) {
System.out.println("Class Not Found Exception: " + e.toString());
}
try {
String SQL = con.nativeSQL("SELECT COUNT(*) AS Count FROM fred");
stmt = con.createStatement();
rs = stmt.executeQuery(SQL);
while (rs.next()) {
System.out.println("Count = " + rs.getString("Count"));
}
} catch (SQLException e) {
System.out.println("SQL Exception: " + e.toString());
}
}
}
我将 NetBeans VM 选项属性设置为 -Djava.library.path=C:\lib。
当我在 IDE 中运行代码时,程序在 executeQuery 处冻结并“永远”运行。不返回错误,也不引发超时。
但是,如果我构建包然后使用 java -Djava.library.path=C:\lib -jar TestSQL.jar 运行它,我会得到预期的返回数据:Count = 7349。
【问题讨论】:
-
你检查日志了吗?您也可以在调用前后保留一个 System.out.println() 方法,以确保它确实挂在那里。
-
是的,在我发布这个问题之前,我检查了日志并在这里、那里和任何地方都使用了 println(),这就是我如何确认它是冻结的 executeQuery() 调用。
标签: java sql-server netbeans jdbc ide