2015-06-22 3 views
1

Я хочу обновить таблицу:Postgresql Обновление JDBC

id integer NOT NULL, 
"first" character varying(255), 
"last" character varying(255), 
age integer, 
CONSTRAINT registration_pkey PRIMARY KEY (id) 

с использованием метода:

void updateTable(String tableName, String columnName, String value, 
     String columnName2, String value2) { 
    try { 

     String sql = "UPDATE " + tableName + " SET " + columnName + " = " 
       + value + " WHERE " + columnName2 + " = " + value2; 

     stmt.executeUpdate(sql); 

    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

Если я запускаю

.updateTable("employees", "last", "11", "id", "100"); 

все нормально, но если я попробовать

.updateTable("employees", "last", "xx", "id", "100"); 

я Получать

org.postgresql.util.PSQLException: ERROR: column "xx" does not exist 
    Position: 29 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)..... 

вы можете сказать мне, где проблема?

+1

Возможно, попробуйте вывести свою строку sql, прежде чем передавать ее в исполняемое обновление, чтобы убедиться, что все происходит так, как вы ожидаете. То, что вы дали, кажется прекрасным, но при попытке выполнить его, когда значение2 помещается в позицию имени столбца. –

ответ

1

Вы не должны создавать SQL, поместив свои переменные напрямую через конкатенацию строк. То, что происходит здесь в том, что с 11, ваш SQL становится:

set last=11 

Который действует SQL (с использованием 11 в виде целого литерала), а хх становится:

set last=xx 

Там нет цитат, поэтому SQL означает, что вы читаете значение другого столбца, следовательно, ваше сообщение об ошибке. Поскольку ваше значение является строкой (входит в поле varchar), вам нужно обернуть ее в кавычки.

+0

thx, полностью забыл, что это не строка – sala

Смежные вопросы