java.sql.SQLSyntaxErrorException: синтаксическая ошибка: обнаружен «80» в строке 1, столбец 1100 - PullRequest
0 голосов
/ 29 октября 2011

Я получаю следующее исключение,

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "80" at line 1, column 1100.

когда я пытаюсь вставить, как показано ниже! Любая идея, что это могло бы означать ??!

String insertString = "insert into queries (data_id, query, "
                + "query_name, query_file_name, status) values(" + currentDataID + ", '"
                + params[1] + "', '" + params[2] + "', '" 
                + params[3] + "', '" + params[4] + "')";
try {
     Statement stmt = dbconn.createStatement();
     stmt.execute(insertString, Statement.RETURN_GENERATED_KEYS);
     ResultSet rs = stmt.getGeneratedKeys(); 

     if (rs != null && rs.next()){     
           currentDataID = (int) rs.getLong(1); 
     } 
} catch (SQLException ex) {
}

Определение таблицы,

CREATE TABLE queries (query_id INT not null primary key GENERATED "
                + "ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), data_id "
                + "INTEGER not null, foreign key (data_id) references data "
                + "(data_id), query LONG VARCHAR, query_name VARCHAR(150), "
                + "query_file_name VARCHAR(150),status VARCHAR(20))

Ответы [ 2 ]

5 голосов
/ 29 октября 2011

Попробуйте этот подход с подготовленным оператором :

String insert = "INSERT INTO queries (data_id, query, query_name," +
        " query_file_name, status) VALUES (?,?,?,?,?)";

PreparedStatement stmt = dbconn.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);
// Why do you set this if you want the DB to generate it?
stmt.setInt(1, currentDataID); // or setLong() depending on data type
stmt.setString(2, params[1]); // I assume params is a String[]
stmt.setString(3, params[2]);
stmt.setString(4, params[3]);
stmt.setString(5, params[4]);
stmt.execute();

ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
    // if it's an int, avoid the cast and use rs.getInt(1) instead
    currentDataID = (int) rs.getLong(1);
}

Я не понимаю, почему вы установили data_id, в то время как более поздний код ожидает, что база данных сгенерирует его ... Ваше определение таблицы поможет.

4 голосов
/ 29 октября 2011

Это, вероятно, происходит потому, что один из ваших params[] содержит символ кавычки.

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

...