我有一张下表
Column | Type | Collation | Nullable | Default
------------+------------------------+-----------+----------+---------
asin | character varying(255) | | not null |
appdetails | json | | |
下面是将代码插入表“ appcredential_info”中的Java代码
String json = "{ \"asin\": "+values.get(0)+", \"appdetails\": { \"app_name\": "+values.get(1)+", \"app_username\":"+values.get(2)+",\"app_password\": "+values.get(3)+",\"service_provider_uname\":"+values.get(4)+",\"service_provider_password\":"+values.get(5)+",\"marketplace\":"+values.get(6)+" } }";
System.out.println(json);
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(json);
String sql = "INSERT INTO appcredential_info VALUES ("+values.get(0)+", ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1, jsonObject);
System.out.println(ps);
ps.executeUpdate();
System.out.println("Values Inserted Successfully");
}
但是我正面临问题,因为不存在对话。错误提及列是values.get(0)方法的值。
任何人都可以帮助我为什么我遇到此问题,并提出解决问题的最佳方法吗?
答案 0 :(得分:1)
也为第一列使用适当的参数。而且您实际上也不需要PGObject:
String json = ...;
String sql = "INSERT INTO appcredential_info VALUES (?, cast(? as json))";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, values.get(0));
ps.setString(2, json);
ps.executeUpdate();
在INSERT语句中显式定义目标列也是一种很好的编码风格:
String sql = "INSERT INTO appcredential_info (asin, appdetails) VALUES (?, cast(? as json))";
答案 1 :(得分:-1)
我认为您应该修改您的sql字符串:
String sql = "INSERT INTO 'appcredential_info' ('asin', 'appdetails')
VALUES ('" + values.get(0) + "', ?);";