Неправильный синтаксис 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 ответа

При передаче объекта String происходит сбой, и исключение составляет "неправильный синтаксис рядом с". " ".

Что дает?

Основываясь на представленных вами доказательствах, проблема заключается в строке запроса. По сути, SQLServer сообщает вам, что в вашем запросе SQL есть синтаксическая ошибка.

Но это работает:

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

... потому что синтаксис этого запроса SQL в порядке.

Распечатайте фактическое значение query что вы используете в:

 rs = stmt.executeQuery(query);

Если решение не очевидно, добавьте значение query на ваш вопрос, чтобы мы могли посмотреть на него.


Перечитывая вопрос, похоже, что query Строка должна быть идентична той, с которой работал. Но свидетельство об исключении / сообщении говорит, что это не так, и я более склонен верить Этому доказательству, чем исходному коду.

Я понял. Я обвиняю Microsoft. По какой-то глупой причине, когда я скопировал SQL-оператор из Visual Studio и вставил его в InteliJ, MS добавил символ BOM, который был скрыт. Похоже, что именно Microsoft отправила нас в спецификацию. Спасибо тебе Microsoft ты дебильный улей заурядности.

Другие вопросы по тегам