JDBC在我的postgres查询中大写表格

Lan*_*ter 1 java sql postgresql jdbc

我正在运行以下代码

/**
 * @param args
 */
public static void main(String[] args) throws SQLException {
    System.out.println("starting");

    org.postgresql.Driver driver = new org.postgresql.Driver();
    DriverManager.registerDriver(driver);

    Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/epcfe/", "postgres", "aap123!");

    Statement st = con.createStatement();
    st.executeQuery("select * from epcfeschema.PRODUCT");

    System.out.println("done");
}
Run Code Online (Sandbox Code Playgroud)

我一直在 Exception in thread "main" org.postgresql.util.PSQLException: ERROR: relation "epcfeschema.product" does not exist

如果我创建一个包含小写名称产品的表,这可以正常工作,但我需要它来处理具有全部大写字母的表.如何防止JDBC小写我的表?

a_h*_*ame 6

您最有可能使用双引号创建表,例如:

create table "PRODUCTS" (
  ...
)
Run Code Online (Sandbox Code Playgroud)

这使得表名称区分大小写(根据SQL标准),因此每次访问表时都需要使用双引号.

select * from epcfeschema."PRODUCT"
Run Code Online (Sandbox Code Playgroud)

因此你必须使用:

executeQuery("select * from epcfeschema.\"PRODUCT\"");
Run Code Online (Sandbox Code Playgroud)

在您的Java代码中(如ChssPly76所示).

我强烈建议重新创建没有双引号的表,以使它们不区分大小写.然后你永远不需要它们,你永远不必担心写它们UPPER,lower或MixedCase:

使用时

create table PRODUCTS (
  ...
)
Run Code Online (Sandbox Code Playgroud)

所有以下陈述都有效:

select * from Products;
select * from PRODUCTS;
select * from products;
Run Code Online (Sandbox Code Playgroud)

因此,如果需要,您可以在upppercase中编写所有表名.


Boh*_*ian 6

如果这是一个休眠问题,试试这个:

@Entity
@Table(name = "\"PRODUCT\"")
public class Product { // ...
Run Code Online (Sandbox Code Playgroud)

或者更好的是,让你的生活更轻松:登录postgres并重命名表!

ALTER TABLE "PRODUCT" rename to product;
Run Code Online (Sandbox Code Playgroud)

(当然,其他代码可能取决于上限名称......)