我正在尝试将项目的图像名称存储在postgresql DB中。
这是我的疑问:
Statement st = conn.createStatement();
String queryString = "INSERT INTO goods (item_title, item_descr, item_email, item_phone, item_images, item_price) " +
"VALUES ("+item.title.trim()+
"\',\'"+item.descr.trim()+
"\',\'"+item.email.trim()+
"\',\'"+item.phone+
"\',"+item.images+
","+item.price+");";
int rowsUpdated = st.executeUpdate(queryString);
'item.images'在模型public String images[];
中定义为字符串数组
它从JSON post接收一个值,如下所示:
"images":["6307839405_3wefb6ef051_o.jpg","8715662693_1c41ewf6f7d_o.jpg","15wef131f4574e383fb46b68.jpg"],"
item_images 定义为'text []'数组列。
所以,我将String数组放入text []列。看起来应该工作吗?
但是我收到了这个错误:
ERROR: syntax error at or near "["
Position: 189
所以,如果问题与我的方式有关 - 我该如何正确地将这个数组存储在DB中呢?
答案 0 :(得分:1)
我的建议不是像你一样通过串联字符串来构建SQL语句。我会使用PreparedStatement类,它带来了处理这么多不同类型的方法,如数组,它带来了额外的好处,可以防止来自恶意用户的值注入。
例如,您的代码将如下:
PreparedStatement statement=DataBaseConnector.getConnection().prepareStatement(
"INSERT INTO goods (item_title, item_descr, item_email, item_phone, item_images, item_price)
VALUES ( ? , ? , ? , ? , ? , ? )");
int index=1;
statement.setString(index++,item.title.trim());
statement.setString(index++,item.descr.trim());
statement.setString(index++,+item.email.trim());
statement.setString(index++,item.phone); //Assuming it is a String
statement.setArray(index++,item.images);
statement.setDouble(index++,item.price); //Assuming it is a Double
int rowsUpdated = statement.executeUpdate()
我希望它有所帮助, 克里斯。
答案 1 :(得分:1)
INSERT
具有不同的语法。请see the documentation。
您的结果查询如下所示:
INSERT INTO goods ... ["6307839405_3wefb6ef051_o.jpg","8715662693_1c41ewf6f7d_o.jpg","15wef131f4574e383fb46b68.jpg"]
但应该是:
INSERT INTO goods ... '{"6307839405_3wefb6ef051_o.jpg","8715662693_1c41ewf6f7d_o.jpg","15wef131f4574e383fb46b68.jpg"}'
或者:
INSERT INTO goods ... ARRAY['6307839405_3wefb6ef051_o.jpg','8715662693_1c41ewf6f7d_o.jpg','15wef131f4574e383fb46b68.jpg']
所以你可以改变你的代码:
Statement st = conn.createStatement();
String queryString = "INSERT INTO goods (item_title, item_descr, item_email, item_phone, item_images, item_price) " +
"VALUES ("+item.title.trim()+
"\',\'"+item.descr.trim()+
"\',\'"+item.email.trim()+
"\',\'"+item.phone+
"\',ARRAY"+item.images.replaceAll("\"", "'")+
","+item.price+");";
int rowsUpdated = st.executeUpdate(queryString);