2011-04-23 54 views
1

我試圖將netbeans連接到我的postgresql數據庫。連接似乎已經工作了,因爲在連接時我沒有任何錯誤或異常,getCatalog()等方法也會返回正確的答案。Java SQL「錯誤:關係」Table_Name「不存在」

但是,當我嘗試運行一個簡單的SQL語句時,出現錯誤「ERROR:relation」TABLE_NAME「不存在」,其中TABLE_NAME是我在數據庫中存在的表中的任何一個。這裏是我的代碼:

Statement stmt = con.createStatement(); 

    ResultSet rs; 

    String query = "SELECT * FROM clients"; 

    rs = stmt.executeQuery(query); 

我在想,NetBeans的可能不被發現的表,因爲它不是在默認模式(公共)看,有沒有設置在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 .clients' – CoolBeans 2011-04-23 18:37:58

+0

您沒有顯示如何連接到數據庫服務器。我懷疑@CoolBeans是正確的還是非常接近的。您的表格位於不同的架構中(上述內容將修復),或者在您連接時指定的另一個數據庫中。 – 2011-04-23 20:14:55

+0

我喜歡這個......你能告訴我們你有什麼真正的錯誤嗎?當您執行「select * from clients」時,我認爲數據庫不會說「關係TABLE_NAME ...」。 – 2011-04-23 20:20:09

回答

7

我懷疑你使用雙引號創建了表,例如: "Clients"或其他大小寫字母的組合,因此表格名稱現在區分大小寫。

這句話是什麼

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

回報?

如果返回的表名是不是小寫你提到它,這樣的事情時要使用雙引號:

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

這樣做,非常感謝:) – Matt 2011-04-24 12:23:28

+0

我試圖使用sequelize ORM,並在其創建查詢中,它使用table_name上的引號。感謝你的回答。 – Kiddo 2013-07-29 07:59:50

0

除了CoolBeans'的建議,你也可以連接到數據庫的誰沒有在相關數據庫或架構允許不同的用戶。你能顯示連接字符串嗎?

+0

我是唯一的數據庫用戶(postgres/root用戶),因爲這只是我用來學習postgresql的一個小數據庫。我在原始問題中將連接字符串包含在編輯中。感謝你目前的幫助。 – Matt 2011-04-24 11:14:56

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"; 

也許其中一個會起作用。

+0

第一條,第二條和最後一條語句引用完全相同的表名。 – 2013-08-14 09:39:15

相關問題