2014-09-12 2 views
0

У меня есть очень простой дБMySQL, неизвестный столбец в списке полей

create table if not exists customerdata(id VARCHAR(40) primary key, obj blob) 

одну процедуру обновления этой таблицы

create procedure saveCustomer(IN customerid VARCHAR(40), IN customerobj blob) 
BEGIN 
INSERT INTO customerdata (id, obj) VALUES(customerid, customerobj) 
ON DUPLICATE KEY UPDATE obj = VALUES(customerobj); 
END 

с помощью JDBC для вызова этой процедуры

byte[] byteArray = bos.toByteArray(); 
String sql = "call saveCustomer(?,?)"; 
ps = connection.prepareStatement(sql); 
ps.setString(1,customerid); 
ps.setBytes(2,byteArray); 
ps.execute(); 

но в результате чего возникает следующее исключение:

com.mysql.jdbc.exceptions.jdbcd4.MySQLSyntaxErrorException: Unknown column 'customerobj' in 'field list' 

такая же ошибка возникает, когда я пытаюсь вызвать эту процедуру из workbench mysql.

ответ

2

Проблема on duplicate key. Оно должно быть:

INSERT INTO customerdata (id, obj) VALUES(customerid, customerobj) 
ON DUPLICATE KEY UPDATE obj = customerobj; 

или:

INSERT INTO customerdata (id, obj) VALUES(customerid, customerobj) 
ON DUPLICATE KEY UPDATE obj = VALUES(obj); 

values() оператор использует имя столбца в таблице, а не само значение.

Я бы также рекомендовал, чтобы вы префиксные аргументы с чем-то вроде v_, поэтому их с меньшей вероятностью путают с именами столбцов.

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