Возникла проблема с "org.postgresql.util.PSQLException: ОШИБКА: столбец" b00e5nh0la "не существует" - PullRequest
0 голосов
/ 18 октября 2019

У меня есть таблица, как показано ниже

 Column   |          Type          | Collation | Nullable | Default 
------------+------------------------+-----------+----------+---------
 asin       | character varying(255) |           | not null | 
 appdetails | json                   |           |          | 

Ниже приведен Java-код для вставки значений в таблицу "appcredential_info"

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 ]

1 голос
/ 18 октября 2019

Используйте правильный параметр и для первого столбца. И вам действительно не нужен 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))";
0 голосов
/ 18 октября 2019

Я думаю, вам следует изменить строку sql:

String sql = "INSERT INTO 'appcredential_info' ('asin', 'appdetails')
VALUES ('" + values.get(0) + "', ?);";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...