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