JDBC"附近的语法不正确。"来自executeQuery

时间:2012-11-27 00:02:11

标签: java jdbc executequery

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

2 个答案:

答案 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。谢谢微软你这个愚蠢的平庸蜂巢。