java sql 错误列是整数类型,但表达式是字符类型变化
java sql error column is of type integer but expression is of type character varying
我准备了sql声明:
PreparedStatement insert_query = db.prepareStatement(String.format(INSERT_QUERY, table,
columns.toString(), placeholder));
System.out.println(insert_query);
结果:
INSERT INTO "article" (article_text, article_id, article_title) VALUES (?, ?, ?) RETURNING article_id
接下来我创建值列表、设置参数并执行插入查询:
ArrayList<String> values = new ArrayList<String>(); -- > is [New CONTENT, 4, New TITLE]
for (int i = 1; i <= values.size(); i++) {
insert_query.setString(i, values.get(i-1));
}
System.out.println(insert_query);
insert_query.executeUpdate();
我收到一个错误:
INSERT INTO "article" (article_text, article_id, article_title) VALUES ('New CONTENT', '4', 'New TITLE') RETURNING article_id
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "article_id" is of type integer but expression is of type character varying
article_id 出了点问题。我把它作为字符串放在这里。但是,当我在 PostgreSQL 中手动尝试此查询时,一切正常(((
对于 article_id,您必须执行 insert_query.setInteger
而不是 insert_query.setString
。当我检查您的异常时,article_id 作为字符串发送到数据库。这就是为什么你有这个例外。
我发现更好的解决方案是初始值列表为:
ArrayList<Object> values = new ArrayList<Object>();
并插入语句对象:
insert_query.setObject(i, values.get(i-1));
我准备了sql声明:
PreparedStatement insert_query = db.prepareStatement(String.format(INSERT_QUERY, table,
columns.toString(), placeholder));
System.out.println(insert_query);
结果:
INSERT INTO "article" (article_text, article_id, article_title) VALUES (?, ?, ?) RETURNING article_id
接下来我创建值列表、设置参数并执行插入查询:
ArrayList<String> values = new ArrayList<String>(); -- > is [New CONTENT, 4, New TITLE]
for (int i = 1; i <= values.size(); i++) {
insert_query.setString(i, values.get(i-1));
}
System.out.println(insert_query);
insert_query.executeUpdate();
我收到一个错误:
INSERT INTO "article" (article_text, article_id, article_title) VALUES ('New CONTENT', '4', 'New TITLE') RETURNING article_id
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "article_id" is of type integer but expression is of type character varying
article_id 出了点问题。我把它作为字符串放在这里。但是,当我在 PostgreSQL 中手动尝试此查询时,一切正常(((
对于 article_id,您必须执行 insert_query.setInteger
而不是 insert_query.setString
。当我检查您的异常时,article_id 作为字符串发送到数据库。这就是为什么你有这个例外。
我发现更好的解决方案是初始值列表为:
ArrayList<Object> values = new ArrayList<Object>();
并插入语句对象:
insert_query.setObject(i, values.get(i-1));