我有一个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' –