2013-07-07 3 views
0

Я новичок в Java и JDBC. В настоящее время я работаю над школьным проектом для курса Java. Я пытаюсь передать некоторые Java переменные в запросе SQL Insert с помощью JDBC, но я получаю исключение последующих:Ошибка ввода в JDBC

SQLException: ORA-00917: missing comma 

Это инструкция:

stmt.executeUpdate("INSERT INTO question (idnum, question, option1, option2, option3, option4, answer) VALUES("+4+", "+question+", "+option1+", "+option2+", "+option3+", "+option4+", "+answer+")"); 

Любые идеи, как исправить запрос?

+2

A) Используйте подготовленные заявления. B) У вашего SQL есть синтаксическая ошибка. Распечатайте строку, которую вы создаете, и посмотрите, почему. –

+0

Вам нужно избегать ввода. –

ответ

1

Изменение двойной котировки " к в одинарные кавычки ' как этот

String query = "INSERT INTO question (idnum,question) values 
(4 , "'"+question+"'")"; 

Обратите внимание, что только строка нужна ', вы можете передавать целые числа непосредственно без использования ', однако, я предпочитаю использовать PreparedStatement, так как это намного проще и очень сильно с SQL-инъекциями.

PreparedStatement pr = conection.prepareStatement("insert into question(...) values(?,?,?,?...)"); 
    pr.setInt(1,4); 
    pr.setString(2,"Some string"); 
//..... 
pr.executeUpdate(); 
+0

Downvoter, не могли бы вы оставить комментарий? – Azad

+0

Теперь я удалил свой нижний план, когда вы добавили подготовленный статус. Тем не менее, я полностью удалю первый бит. Просто нет причин вручную строить SQL и, как показывает OP, он подвержен ошибкам. –

+0

@BrianRoach: Я согласен с вами, я обычно решаю проблему, тогда я добавляю дополнительную информацию, может быть, лучший способ (если бы я знал). – Azad

0

Попробуйте это:

stmt.executeUpdate("INSERT INTO question (idnum, question, option1, option2, option3, option4, answer) VALUES("+4+", '"+question+"', '"+option1+"', '"+option2+"', '"+option3+"', '"+option4+"', '"+answer+"')" 
2

Попробуйте

String sql = 
    "INSERT INTO question (idnum, question, option1, option2, option3, option4, answer)  VALUES(?, ?, ?, ?, ?, ?, ?)"; 
PreparedStatement preparedStatement = connection.prepareStatement(sql); 

preparedStatement.setInt(1, 4); 
preparedStatement.setString(2, question); 
preparedStatement.setString(3, option1); 
preparedStatement.setString(4, option2); 
preparedStatement.setString(5, option3); 
preparedStatement.setString(6, option4); 
preparedStatement.setString(7, answer); 

int rowsAffected = preparedStatement.executeUpdate(); 
+0

Спасибо Reimeus ... Это сработало отлично !!! Думаю, мне нужно начать использовать PreparedStatements – JLA

+1

Отлично, я рад, что добрался до (б) с помощью 'PrepareStatements'. Не забудьте [принять ответ] (http://meta.stackexchange.com/a/65088/155831) :) – Reimeus

2

Во-первых, причина, вы получаете ошибку в том, что у вас есть ошибка синтаксиса в вашем SQL. Просто печать создаваемого вами String покажет вам проблему.

Сказали, что вы должны использовать prepared statements. Просто нет причина для создания SQL вручную. Это не только предотвращает возникшую у вас проблему, но и устраняет вероятность того, что ваш код восприимчив к SQL-инъекции.

String query = "INSERT INTO question (idnum, question, option1, option2, option3, option4, answer) VALUES (?,?,?,?,?,?,?)"; 
PreparedStatement pstmt = conn.prepareStatement(query); 
pstmt.setInt(1,4); 
pstmt.setString(2,question); 
// ... set all your params 
pstmt.execute(); 
Смежные вопросы