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小写我的表?
您最有可能使用双引号创建表,例如:
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中编写所有表名.
如果这是一个休眠问题,试试这个:
@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)
(当然,其他代码可能取决于上限名称......)
| 归档时间: |
|
| 查看次数: |
8387 次 |
| 最近记录: |