JAVA在postgres中存储字符串数组并从中检索JSON数据

时间:2015-06-19 06:17:21

标签: java json postgresql

我在数据库中存储图像路径存在问题。 如果我将路径作为字符串数组传递并将其存储在PostgreSQL的text []数组列中 - 我收到的文本值就像

一样
"item_id":44,"item_phone":"432432423423","item_price":67676,"item_descr":"iojgoewjgoiwejgiewjgojoij","item_images":"{8f8161d3a6bdf6ahrth8fd35725356.jpg,11136408_101535465482739704_1782611644_o.jpg,15032923164db54t54d7ee548.jpg.thumb.jpg}","item_title":"ojreogreoihIGJEI","item_email":"jfeiwojiejowegj@ijfe"

" item_images"数组值在" "在响应中,所以我收到它就像字符串值。但我希望将其作为JSON数组/列表

接收

那么,在DB中组织此图像路径存储以最终从JSON列表/数组中接收数据的更好方法是什么?

这就是现在的工作方式:

从帖子接收数据的模型:

public class Item {
    public String title;
    public String descr;
    public String phone;
    public String email;
    public String images[];
    public int price;
}

这就是我在DB中存储值的方式:

    PreparedStatement statement=conn.prepareStatement("INSERT INTO goods (item_title, item_descr, item_email, item_phone, item_images, item_price)\n" +
            "                    VALUES ( ? , ? , ? , ? , ? , ? )");
    int index=1;
    statement.setInt(index++, item.condo_id);
    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++, conn.createArrayOf("text", item.images));
    statement.setInt(index++,item.price); //Assuming it is a Double
    int rowsUpdated = statement.executeUpdate();

这就是我以JSONArray 的形式返回此值的方式:

Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("query to select all data from DB");

        JSONArray jsonArray;
        jsonArray = convertToJSON(rs);

public static JSONArray convertToJSON(ResultSet resultSet) throws Exception {
    JSONArray jsonArray = new JSONArray();
    while (resultSet.next()) {
        int total_rows = resultSet.getMetaData().getColumnCount();
        JSONObject obj = new JSONObject();
        for (int i = 0; i < total_rows; i++) {
            obj.put(resultSet.getMetaData().getColumnLabel(i + 1)
                    .toLowerCase(), resultSet.getObject(i + 1));
        }
        jsonArray.put(obj);
    }
    return jsonArray;
}

2 个答案:

答案 0 :(得分:1)

您可以尝试像这样修改convertToJSON()方法

            String name = resultSet.getMetaData().getColumnLabel(i + 1)
                    .toLowerCase();
            int type = resultSet.getMetaData().getColumnType(i);
            if (java.sql.Types.ARRAY == type) {
                obj.put(name, resultSet.getArray(i + 1));
            } else {
                obj.put(name, resultSet.getObject(i + 1));
            }

答案 1 :(得分:0)

你的问题是你先把图像作为字符串吗?

公共类项目{

public String title;
public String descr;
public String phone;
public String email;
public String images[]; 
***************** public Array images[];
public int price;

}