JAVA postrgresql将String []插入text [] postrgresql单元格

时间:2015-06-18 09:35:05

标签: java postgresql

我正在尝试将项目的图像名称存储在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中呢?

2 个答案:

答案 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)

对于Postgres中的数组,

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);