jdbc 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]
所以,很明显,它决定将表名大写,这是我不想要的。我怎样才能关掉它
# 1 楼答案
这是不可能的,默认情况下SQL方言不区分大小写,但表名以大写形式存储(有些方言将以小写形式存储)。这意味着如果使用
select * from vehicle
,实际上是从名为VEHICLE
的表中进行选择,错误消息将反映该名称,因为表vehicle
与表VEHICLE
是不同的实体如果希望在错误消息中反映原始大小写,则需要从名为
vehicle
的表中进行选择。要做到这一点,您需要在所有SQL语句中引用对象名,例如select * from "vehicle"
,或者在MariaDB和MySQL中select * from `vehicle`
。引用的对象名称保留其原始大小写