проблемы с оператором обновления в SQLite - PullRequest
2 голосов
/ 31 мая 2011

Я создал базу данных с использованием SQLite. Я хочу обновить значение столбца "features" (типа Blob) ... но я не знаю, как написать оператор "update". Вот что я попробовал:

    try {
        stat = conn.createStatement();
    } catch (SQLException e) {
    }
    try {
        byte[] b = getFunction();
        stat.executeUpdate("update table set features="+b);
    } catch (SQLException e) {
    }

я получаю следующую ошибку:

java.sql.SQLException: unrecognized token: "[B@13a317a"

так что я думаю, что проблема в "b"?

Ответы [ 3 ]

5 голосов
/ 31 мая 2011

[B @ 13a317a выглядит как результат массива в строку (в данном случае b.toString ()).Вы должны использовать подготовленный оператор для BLOB-объекта, например:

update table set features=?

Например, здесь .

Как правило, вы никогда не должны создавать SQL путем объединения строк.Это рецепт для проблем с внедрением SQL.

3 голосов
/ 31 мая 2011

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

Connection con = null;
PreparedStatement stmt = null;

try {
    byte[] b = getFunction();
    con = ...;
    stmt = con.prepareStatement("update table set features=?");
    stmt.setBytes(1, b);
    stmt.executeUpdate();

    con.commit();
}
catch (SQLException e) {
    //handle exception (consider con.rollback()) and con maybe null here)
}
finally {
    //close stmt and at least con here (all maybe null here)
}

Лично я всегда использую PreparedStatements.Когда вам нужно написать большую часть этого кода, подумайте о написании некоторых Utility-Classes для уменьшения Boilerplate-Code.

В частности, вы должны рассмотреть возможность написания Utilty-Classes для нулевых безопасных методов вызова в Connection, Statement и ResultSetметоды, когда вы имеете дело с простым JDBC.

РЕДАКТИРОВАТЬ То, что Томас Юнг написал о предотвращении SQL-инъекций, является еще одним большим профессионалом, всегда использующим PreparedStatements.+1 за него: -)

0 голосов
/ 31 мая 2011
 stat.executeUpdate("update table set features="+b[0].toString()); 

вы должны использовать +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...