Java SQL“错误:关系”Table_Name“不存在”

时间:2011-04-23 18:35:46

标签: java sql postgresql quoted-identifier

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

但是当我尝试运行一个简单的SQL语句时,我得到错误“ERROR:relation”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");

4 个答案:

答案 0 :(得分:10)

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

声明是什么

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

返回?

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

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

答案 1 :(得分: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";

也许其中一个会起作用。

答案 2 :(得分:0)

除了CoolBeans的建议外,您还可能以不具有相关数据库或模式权限的其他用户身份连接到数据库。你能显示连接字符串吗?

答案 3 :(得分:0)

有趣的是我正在经历与刚开始在netbeans和postgressql db上相同的事情,并且在注意到问题是我的postgressql中的表在我和我的命名约定中使用大写字母后,该错误已修复。 INSERT的jdbc查询语句未能找到表。但是在数据库中重命名我的表并修复列名之后,还是很不错的选择。希望对您有所帮助。