JDBC 在 executeQuery 中接近"."的语法不正确



好吧,我没有头发了。 将常量字符串传递给 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你这个平庸的白痴蜂巢。

最新更新