Java 如何使用JDBC模板更新字符可变数组
我正在尝试使用JDBC模板更新postgresql中的字符可变列。我现在使用的方法如下:Java 如何使用JDBC模板更新字符可变数组,java,spring,spring-boot,jdbc,Java,Spring,Spring Boot,Jdbc,我正在尝试使用JDBC模板更新postgresql中的字符可变列。我现在使用的方法如下: String id=getId(); String duser=getUser(); //if count is 0 if(count!=0){ final String SQlString="update public.user set id=array_append(id,?) where username= ?; jdbcTemplate.updat
String id=getId();
String duser=getUser();
//if count is 0
if(count!=0){
final String SQlString="update public.user set id=array_append(id,?) where username= ?;
jdbcTemplate.update(SQlString,new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setString(1, id);
preparedStatement.setString(1, duser);
}
});
}
//count not equal to zero
else
{
final String SQlString="update public.user set id = ? where username=?;
jdbcTemplate.update(SQlString,new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setString(1,"'{"+id+"}'");
preparedStatement.setString(1, duser);
}
});
所以基本上,如果count是0,那么我必须添加id,如果不是,那么我必须用现有元素附加数组。但这会使
BADSQL表达式列id为字符变化[],但表达式为
字符变化
但是我知道它是一个字符串,但是如何将它设置为postgresql数组类型(不是字符串数组)。非常感谢您的帮助。您不能将
PreparedStatement.setString()
用于varchar[]
(即数组)列。您需要将setArray()
与包含字符串的大小为1的java.sql.Array
一起使用
Connection con = preparedStatement.getConnection();
Array a = con.createArrayOf("varchar", new Object[] {id});
preparedStatement.setArray(1, a);
更新的问题\现在可以了吗?代码试图做什么?在某些情况下,业务需求是否需要向用户id附加一些文本?听起来真的很奇怪;而且,如果用户id在其他表中用作外键,您还应该期望引用完整性受到破坏。@MickMemonic他当然会这样做。因为id
是varchar[]
,而不是varchar
。这是一个数组。当然,他真的不应该使用数组,但这可能不是他设计中最糟糕的部分。@MickMnemonic列id是字符变化[]
@MickMnemonic我真的不知道该怎么说。我也不会设计这样的数据库,但也许他会学到一个宝贵的教训,那就是数组列从长远来看不是很方便。我没有使用连接。我使用的是连接池Hikaricpy你没有使用连接?你知道“连接池”中的“连接”是什么意思吗?如果我们使用JDBC模板,我不会处理连接,因为它会正确地打开和关闭连接。你需要做更多的研究。从PreparedStatement
获取连接。我认为这不是一个好主意,因为一个查询需要两个连接。如果我可以将字符串转换为SQL数组,然后如果我可以更新PreparedStatement,我想这很好