1

好吧,我没有头发了。将常量字符串传递给 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);
   }
}
4

2 回答 2

3

当传递一个字符串对象时,它会失败,并且异常是“。”附近的语法不正确。'。

是什么赋予了?

根据您提供的证据,问题出在您的查询字符串中。基本上,SQLServer 会告诉您 SQL 查询中存在语法错误。

但这有效:

 ResultSet rs = stmt.executeQuery("SELECT * FROM USER_JOB_TYPE");

...因为该 SQL 查询的语法很好。

打印出query您正在使用的实际值:

 rs = stmt.executeQuery(query);

如果解决方案不明显,请将 的值添加query到您的问题中,以便我们查看。


在重新阅读问题时,看起来query字符串应该与工作的字符串相同。但是异常/消息的证据表明它不是,我更倾向于相信这个证据而不是源代码。

于 2012-11-27T00:19:32.900 回答
1

我想到了。我责怪微软。出于某种愚蠢的原因,当我从 Visual Studio 复制 sql 语句并将其粘贴到 InteliJ 中时,MS 添加了一个隐藏的 BOM 字符。因此,似乎是微软向我们发送了 BOM。谢谢微软,你这个平庸的白痴蜂巢。

于 2012-12-03T21:08:40.970 回答