我正在运行以下代码
/**
* @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降低我的表格?
答案 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)。你的问题出在其他地方 - 权限,也许?