好吧,我没有头发了。 将常量字符串传递给 executeQuery 时,没有问题。传递 String 对象时,它会失败,异常' incorrect syntax near "."'
。
一切都基本上完全相同,但由于某种原因,一种情况有效,另一种情况无效。为了提供一些背景知识,我正在连接到SQLServer2008 DB。什么给?
这是从我身上夺走我的头发的代码:
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);
}
}
传递 String 对象时,它会失败,并且例外是"." '附近的语法不正确。
什么给?
根据您提供的证据,问题出在查询字符串中。 基本上,SQLServer 告诉您 SQL 查询中存在语法错误。
但这有效:
ResultSet rs = stmt.executeQuery("SELECT * FROM USER_JOB_TYPE");
。因为该 SQL 查询的语法很好。
打印出您正在使用的query
的实际值:
rs = stmt.executeQuery(query);
如果解决方案不明显,请将query
的值添加到您的问题中,以便我们查看它。
在重新阅读问题时,看起来query
字符串应该与工作字符串相同。 但是异常/消息的证据说它不是,我更倾向于相信这个证据而不是源代码。
我想通了。我怪Microsoft。 出于某种愚蠢的原因,当我从Visual Studio复制sql语句并将其粘贴到InteliJ中时,MS添加了一个隐藏的BOM字符。因此,似乎Microsoft将我们送上了BOM。谢谢你Microsoft你这个平庸的白痴蜂巢。