Java SQL "ERROR: Relation "Table_Name" does not exist" Java SQL“错误:关系”Table_Name“不存在”

4
我正在尝试将Netbeans连接到我的PostgreSQL数据库。连接似乎已经成功,因为当我仅连接时没有出现任何错误或异常,getCatalog()等方法也返回正确的答案。
但是,当我尝试运行一个简单的SQL语句时,我会得到错误消息“ERROR: relation "TABLE_NAME" does not exist”,其中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");

1
你能不能这样重写 SQL 呢?SELECT * FROM <schem_name>.clients - CoolBeans
1
你没有展示如何连接到数据库服务器。我怀疑@CoolBeans在上面的回答是正确的或者非常接近正确。你的表可能在不同的模式中(上述方法可以解决),或者在连接时指定的另一个数据库中。 - Brian Roach
我喜欢这个...你能给我们展示一下你真正的错误吗?我不认为当你执行“select * from clients”时,数据库会说“relation TABLE_NAME...”。 - Szymon Lipiński
我尝试过了,但我得到了同样的错误信息,“ERROR:relation“public.clients”不存在”(对于我的任何其他表也是如此)。 public 是我唯一的架构,因此它也是默认架构。感谢迄今为止提供的帮助。 - Matt
在postgresql.conf中将log_min_duration_statement设置为0,重新启动数据库,运行应用程序并检查postgresql日志中实际发送到数据库的查询。还有一件事...您确定该表确实存在吗?您能否使用psql/pgadmin连接到此数据库并在其中执行查询? - Szymon Lipiński
4个回答

11
我怀疑你创建表时使用了双引号,例如"Clients"或其他大小写字母的组合,因此表名现在区分大小写。

这个语句是什么意思?

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

返回什么?

如果返回的表名不是小写字母,那么在引用它时必须使用双引号,例如:

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

我正在尝试使用sequelize ORM,在其create查询中,它在table_name上使用引号。感谢您的回答。 - Kiddo

2
您可以检查以下可能性:
String query = "SELECT * FROM clients";
String query = "SELECT * FROM CLIENTS";
String query = "SELECT * FROM \"clients\"";
String query = "SELECT * FROM \"CLIENTS\"";
String query = "SELECT * FROM Clients";

也许其中一个会起作用。

第一、第二和最后一条语句都指的是完全相同的表名。 - user330315

0
除了CoolBeans的建议之外,您可能还以不同的用户身份连接到数据库,该用户没有相关数据库或模式的权限。您能展示一下连接字符串吗?

我是唯一的数据库用户(postgres/root用户),因为这只是一个我用来学习postgresql的小型数据库。我在原问题中编辑了连接字符串。感谢迄今为止的帮助。 - Matt

0
有趣的是,我也遇到了同样的问题,因为我刚开始使用NetBeans和PostgreSQL数据库,注意到问题是我的PostgreSQL表在命名约定中有大写字母,导致我的JDBC插入查询语句无法找到该表。但是,在将我的表重命名并修复列名称后,一切都好了。希望这可以帮助到你。

应该修改其响应以适应更好的语法。 - Nicolás Alarcón Rapela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接