Java PreparedStatement在SQL查询中不希望将小写的字符串名称传递给区分大小写的PostgreSQL数据库

问题描述 投票:0回答:1

我正在使用Java PreparedStatement对象将行插入到Postgres数据库表中。 (我的代码如下:)

...
// define values to insert
LocalDateTime localDateTime = LocalDateTime.now();
int num = 3;            
double frac = 0.8;

//create PreparedStatement
PreparedStatement st = conn.prepareStatement("INSERT INTO TABLE_Final_Records(Datetime, Number_n, Fraction_f)" 
+ "VALUES (?,?,?)" );

// set placeholder ("?") values as Postgres types
st.setObject(1, localDateTime);
st.setInt(2, num);
st.setDouble(3, frac);

// execute statement
st.executeUpdate();
st.close(); 
...

但是,当我执行以上代码时,我得到了错误(通过捕获的SQLException的toString()):

org.postgresql.util.PSQLException:错误:关系“ __ f inal __ r折线”不存在。

上面代码中指定的每个大写字符在抛出的异常的文本中均以小写形式出现。

如果我手动将数据库表重命名为全部小写,则会消除该错误,而无需更改代码。但是,它替换为:

org.postgresql.util.PSQLException:错误:列的“日期时间”关系“ table_final_records”不存在

一个明显的解决方法是将Postgres数据库中所有表和列名称中的所有大写字符手动转换为小写,但是我想知道如何对此类语句强制区分大小写,以便PostgreSQL数据库表可以正确识别和更新带有大写字符的&列名称。

谢谢

java sql postgresql jdbc
1个回答
0
投票

您可以通过在查询中引用标识符来解决此问题:

PreparedStatement st = conn.prepareStatement(
    "INSERT INTO \"TABLE_Final_Records\"(\"Datetime\", \"Number_n\", \"Fraction_f\")" 
    + " VALUES (?,?,?)" 
);

但是最重要的是:您遇到的问题表示您的数据库表和列是用标识符周围的双引号创建的。

© www.soinside.com 2019 - 2024. All rights reserved.