4
我使用的是官方的SQL Server JDBC驅動程序通過JDBC CREATE SCHEMA不能調用在SQL Server
try (Connection c = new com.microsoft.sqlserver.jdbc.SQLServerDriver().connect(u, p)) {
try (PreparedStatement s1 = c.prepareStatement("create schema x");
PreparedStatement s2 = c.prepareStatement("drop schema x")) {
System.out.println(s1.execute());
System.out.println(s2.execute());
}
}
但我發現了這個錯誤:
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'schema'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1547)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:528)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:461)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7151)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2689)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:224)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:204)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(SQLServerPreparedStatement.java:445)
Obviuosly,該聲明是正確的,他們的工作與靜態語句:
try (Statement s1 = c.createStatement();
Statement s2 = c.createStatement()) {
System.out.println(s1.execute("create schema x"));
System.out.println(s2.execute("drop schema x"));
}
這是故意的還是JDBC驅動程序中的錯誤?
不是我的DV,好像是一個合理的QA。我很好奇爲什麼它失敗了,你能分析SQL並準確地查看發送到SQL Server的內容嗎? – DavidG
@DavidG:不太熟悉SQL Server工具。我在日誌目錄的跟蹤文件中沒有看到任何消息。通過JDBC驅動程序進行調試並不會在語句字符串本身顯示任何異常。當然,我不太瞭解發送到服務器的協議字節...... –
在SQL Server Management Studio的「工具」菜單中,SQL Server Profiler。它讓你看到哪些SQL命令正在發送。在這種情況下,如果驅動程序阻礙,可能不會顯示任何內容,但異常消息似乎表明它來自SQL引擎。當然,我認爲沒有太多的好處,以創建模式和意見準備聲明:) – DavidG