我有一個J2EE Web應用程序,它將參數化SQL查詢發佈到MySQL後端。我需要用MS Azure SQL數據庫替換後端。我已將數據庫和數據遷移到MS Azure SQL數據庫。但是,我的所有來自應用程序的查詢都失敗了。例如,下面的查詢(含包裝代碼所示)運行在Management Studio中完全正常,但在Java代碼失敗:從MySQL遷移到MS Azure SQL數據庫
PreparedStatement statement = dbConnection.prepareStatement("SELECT * FROM [mydb].[apps] WHERE [key] = ?;");
statement.setString(1, appKey);
ResultSet resultSet = statement.executeQuery();
我得到的錯誤是:
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'key'.
我嘗試過各種東西例如刪除[],用列表名限定列名等,但沒有任何作用。
另外還有一個問題:我使用的JDBC連接字符串包括數據庫名稱(mydb),所以我不想將它包含在每個SQL語句中。我從來沒有爲MySQL做過,所以我寧願避免現在這樣做,因爲它會要求我手動將DB名稱添加到代碼中的每個語句。但是,如果我從上述查詢中刪除數據庫名稱,它將再次失敗,並顯示錯誤Invalid object name 'apps'
。爲什麼連接字符串中指定的數據庫沒有被用作默認數據庫?我正在使用的連接字符串是jdbc:sqlserver://{servername}.database.windows.net:1433;database=mydb;user={username}@{servername};password={password};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
順便說一句我正在使用Azure SQL數據庫V12並通過Microsoft JDBC驅動程序4.2連接SQL Server。
where key =?..應該是什麼?表明? 也嘗試刪除';' –
@NaguibIhab,?是下一個語句設置值的佔位符。已刪除「;」後已嘗試過但沒有幫助。 – Santosh
這是一個不知道它是否會工作的通配符,試試這個查詢:'SELECT * FROM apps WHERE key = 1' –