好的,我没有留下头发。将常量字符串传递给executeQuery时没有问题。传递String对象时失败,异常为' incorrect syntax near "."'
。
一切基本上都是一样的,但由于某种原因,一个案例有效,另一个案例没有。为了给出一点背景知识,我将连接到SQLServer2008数据库。是什么给了什么?
以下是从我这里拿走头发的代码:
public List<IdValuePair> Get_Job_Types() {
ArrayList<IdValuePair> jt = Get_Id_Value_Pairs(
"SELECT * FROM USER_JOB_TYPE", "JOB_TYPE_ID", "JOB_TYPE");
return (jt);
}
private List<IdValuePair> Get_Id_Value_Pairs(String query, String idRowName,
String valueRowName) {
try {
List<IdValuePair> pairs = new ArrayList<IdValuePair>();
Class.forName("net.sourceforge.jtds.jdbc.Driver");
m_Connection = DriverManager.getConnection(db_connect_string,
db_userid, db_password);
Statement stmt = m_Connection.createStatement();
// THIS WORKS ?!
ResultSet rs = stmt.executeQuery("SELECT * FROM USER_JOB_TYPE");
// THIS DOESN'T !!!!???
rs = stmt.executeQuery(query);
// ...
rs.close();
stmt.close();
return (pairs);
}
catch (Exception e) {
e.printStackTrace();
return (null);
}
}
答案 0 :(得分:3)
当传递一个String对象时,它失败并且exeception是“语法不正确”。“ ”。
是什么给出了?
根据您提供的证据,问题出在您的查询字符串中。基本上,SQLServer告诉您SQL查询中存在语法错误。
但这有效:
ResultSet rs = stmt.executeQuery("SELECT * FROM USER_JOB_TYPE");
...因为该SQL查询的语法很好。
打印出您正在使用的query
的实际值:
rs = stmt.executeQuery(query);
如果解决方案不明显,请将query
的值添加到您的问题中,以便我们查看。
在重新阅读问题时,看起来像 query
字符串应该与工作的字符串相同。但是异常/消息的证据表明它不是,而且我更倾向于相信这些证据而不是源代码。
答案 1 :(得分:0)
我明白了。我责备微软。由于某些愚蠢的原因,当我从Visual Studio复制sql语句并将其粘贴到InteliJ时,MS添加了一个隐藏的BOM字符。所以似乎是微软向我们发送了BOM。谢谢微软你这个愚蠢的平庸蜂巢。