我在数据库中存储图像路径存在问题。 如果我将路径作为字符串数组传递并将其存储在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;
}
答案 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;
}