Java PreparedStatement保留表名大小写



我有这个Java代码片段,运行在由MariaDB:支持的WildFly服务器中

var stmt = conn.prepareStatement("SELECT * FROM vehicles;");
ResultSet rs = stmt.executeQuery();

这给了我以下例外:

org.h2.jdbc.JdbcSQLException: Table "VEHICLES" not found; SQL statement:
SELECT * FROM vehicles; [42102-193]

所以,很明显,它决定将表名大写,这是我不想要的。我怎样才能把它关掉?

这是不可能的,默认情况下,SQL方言通常不区分大小写,但以大写形式存储表名(有些方言将以小写形式存储(。这意味着,如果使用select * from vehicle,实际上是从名为VEHICLE的表中进行选择,错误消息将反映该名称,因为表vehicle与表VEHICLE是不同的实体。

如果您想在错误消息中反映原始案例,您需要从一个真正称为vehicle的表中进行选择。要做到这一点,您需要在所有SQL语句中引用对象名称,例如select * from "vehicle",或者在MariaDB和MySQL中引用select * from `vehicle`。引用的对象名称保留其原始大小写。

相关内容

最新更新