Java PreparedStatement保留表名大小写
我有一个Java代码段,运行在由MariaDB支持的WildFly服务器中:Java PreparedStatement保留表名大小写,java,jdbc,prepared-statement,wildfly,h2,Java,Jdbc,Prepared Statement,Wildfly,H2,我有一个Java代码段,运行在由MariaDB支持的WildFly服务器中: var stmt=conn.prepareStatement(“从车辆中选择*”; ResultSet rs=stmt.executeQuery(); 这给了我以下的例外: org.h2.jdbc.JdbcSQLException: Table "VEHICLES" not found; SQL statement: SELECT * FROM vehicles; [42102-193] 所以,很明显,它决定将表名
var stmt=conn.prepareStatement(“从车辆中选择*”;
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
是不同的实体
如果要在错误消息中反映原始情况,需要从真正称为
车辆的表中进行选择。为此,您需要在所有SQL语句中引用对象名,例如select*from“vehicle”
,或者-MariaDB和MySQL中的select*from`vehicle`
。引用的对象名称保留其原来的大小写。您确定这不仅仅是将其记录为大写吗?您是否尝试过将表名放入?因此,在Java中,这将是“从\“车辆\”中选择*;”
。另外,您标记了mariadb,但错误是h2-是否相关?SQL不区分大小写。这里没有需要解决的问题。@user207421-这不是特定于实现的吗?关键词,我同意-没关系。但是对于-这不取决于RDBMS吗?也许还取决于它是如何配置的?@andrewjames True。我真正想知道的是,为什么OP对象指向只有开发人员才应该看到的错误消息。虽然对于某些DBMS(如Oracle)可能是这样,但我在Linux上运行了一个MariaDB实例,其中关键字不区分大小写,但对象名称(表、数据库、视图等)不区分大小写。我将它们定义为小写,因此它们必须以小写形式访问。不过我还是要试着引用一下MariaDB[dbname]>从车辆中选择*;空集(0.00秒)MariaDB[dbname]>从车辆中选择*;错误1146(42S02):表'dbname.Vehicles'不存在``@BenceCsókás您的问题中的错误来自H2,而不是MySQL或MariaDB。