2014-09-12 102 views
0

我有一个非常简单的数据库MySQL的,在字段列表未知列

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

一个程序使用JDBC调用这个程序更新此表

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 

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' 

当我尝试从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_之类的东西加前缀参数,所以它们不太可能与列名混淆。

相关问题