Java SQL "ERROR: Relation "表名“不存在”

标签 java sql postgresql quoted-identifier

我正在尝试将 netbeans 连接到我的 postgresql 数据库。连接似乎有效,因为我在连接时没有收到任何错误或异常,getCatalog() 等方法也返回正确答案。

但是当我尝试运行一个简单的 SQL 语句时,我得到错误“错误:关系“TABLE_NAME”不存在”,其中 TABLE_NAME 是我的任何一个表,它确实存在于数据库中。这是我的代码:

    Statement stmt = con.createStatement();

    ResultSet rs;

    String query = "SELECT * FROM clients";

    rs = stmt.executeQuery(query);

我在想 netbeans 可能找不到表,因为它没有在默认架构(公共(public))中查找,有没有办法在 java 中设置架构?

编辑:我的连接代码。数据库名称是 Cinemax,当我省略语句代码时,我没有得到任何错误。

    String url = "jdbc:postgresql://localhost:5432/Cinemax";
    try{

    try {
        Class.forName("org.postgresql.Driver");
    } catch (ClassNotFoundException cnfe) {
        System.err.println("Couldn't find driver class:");
        cnfe.printStackTrace();
    }

    Connection con = DriverManager.getConnection( url,"postgres","desertrose147");

最佳答案

我怀疑您使用双引号创建了表格,例如“Clients” 或其他一些大写/小写字符的组合,因此表名现在区分大小写。

声明是什么

 SELECT table_schema, table_name
 FROM information_schema.tables 
 WHERE lower(table_name) = 'clients'

返回?

如果返回的表名不是小写的,则在引用它时必须使用双引号,如下所示:

String query = "SELECT * FROM \"Clients\"";

关于Java SQL "ERROR: Relation "表名“不存在”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5766107/

相关文章:

sql - 从带有审计跟踪的表中获取原始内容和修改后的内容

postgresql - 安装 PostgreSQL 9.4 : "gpg: no valid OpenPGP data found"

当使用自定义 session 处理程序并建立第二个 postgres 连接时,PHP7 中断了我的 session

java - 添加到 ArrayList 后出现 NotSerializedException

java - 热交换代理和 DCEVM 的 Jboss JVM 参数配置

Java邮件: force "Content-Transfer-Encoding" to be "quoted-printable"

java - 如何中止 JDBC Postgresql CopyManager 复制?

java - 使用 Roomba 在玩家舞台中进行迷宫导航

mysql - 在逻辑 ER 设计中,什么时候外键也应该是主键?

php - 尝试在 mysql 查询中使用多个 WHERE 命令 [不工作]