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

时间:2012-02-08 23:02:53

标签: 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");
}

我不断获得Exception in thread "main" org.postgresql.util.PSQLException: ERROR: relation "epcfeschema.product" does not exist

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

4 个答案:

答案 0 :(得分:6)

您很可能使用双引号创建表格,例如:

create table "PRODUCTS" (
  ...
)

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

select * from epcfeschema."PRODUCT"

因此你必须使用:

executeQuery("select * from epcfeschema.\"PRODUCT\"");

在Java代码中(如ChssPly76所示)。

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

使用时

create table PRODUCTS (
  ...
)

所有以下陈述都有效:

select * from Products;
select * from PRODUCTS;
select * from products;

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

答案 1 :(得分:6)

如果这是一个休眠问题,请尝试以下方法:

@Entity
@Table(name = "\"PRODUCT\"")
public class Product { // ...

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

ALTER TABLE "PRODUCT" rename to product;

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

答案 2 :(得分:2)

引用您的表名:

st.executeQuery("select * from epcfeschema.\"PRODUCT\"");

答案 3 :(得分:1)

Postgres(以及任何其他合理的数据库)表名称不区分大小写(请参阅here)。你的问题出在其他地方 - 权限,也许?