面对“ org.postgresql.util.PSQLException:错误:列“ b00e5nh0la”不存在”

时间:2019-10-18 07:31:18

标签: java json postgresql jdbc

我有一张下表

 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)方法的值。

任何人都可以帮助我为什么我遇到此问题,并提出解决问题的最佳方法吗?

2 个答案:

答案 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) + "', ?);";