2012-10-12 68 views
3

我試圖用Java插入到我的postgres數據庫中。我有我的本地數據庫的默認配置。Postgres with Java我無法插入數據

我想把一些數據放在一個表中,我有一些問題。

下面是代碼:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public static void main(String[] args) { 

    Connection con = null; 
    PreparedStatement pst = null; 

    String url = "jdbc:postgresql://localhost/postgres"; 
    String user = "postgres"; 
    String password = "thanassis"; 

    try { 


     con = DriverManager.getConnection(url, user, password); 

     String stm = "INSERT INTO TEST2(ID) VALUES(?)"; 
     pst = con.prepareStatement(stm); 
     pst.setInt(1, 1); 

     pst.executeUpdate(); 

    } catch (SQLException ex) { 
     Logger lgr = Logger.getLogger(PreparedStatement.class.getName()); 
     lgr.log(Level.SEVERE, ex.getMessage(), ex); 

    } finally { 

     try { 
      if (pst != null) { 
       pst.close(); 
      } 
      if (con != null) { 
       con.close(); 
      } 

     } catch (SQLException ex) { 
      Logger lgr = Logger.getLogger(PreparedStatement.class.getName()); 
      lgr.log(Level.SEVERE, ex.getMessage(), ex); 
     } 
    } 
} 

這裏例外

 
SEVERE: ERROR: relation "test2" does not exist 
    Position: 13 
org.postgresql.util.PSQLException: ERROR: relation "test2" does not exist 
    Position: 13 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:332) 
    at test.Test.main(Test.java:30) 
+0

您必須在插入數據之前創建表test2。 –

+0

我已經做到了 – thanassis

回答

4

你的表稱爲TEST2test2。顯然你使用雙引號創建它,這使得Postgres(和其他符合標準的DBMS)區分大小寫。

因此,您現在必須在每次引用它時在名稱中用雙引號括起表格。

String stm = "INSERT INTO \"TEST2\"(ID) VALUES(?)"; 

最有可能這不是您的本意,所以才重新重新創建表使用周圍的標識符雙引號:

CREATE TABLE test2 
(
    ... 
) 

創建一個不同的表比:

CREATE TABLE "test2" 
(
    ... 
) 

如果您不想重新創建表格,可以重命名它們:

alter table "TEST2" rename to test2; 
+0

非常感謝!你知道如何解決這個問題,而不需要重新制作所有的表格嗎? – thanassis

+0

另外我用pgadmin做了所有的表格。我沒有放置任何引號 – thanassis

+0

@thanassis:你確實在某處使用了引號,否則表格不會以這種方式創建。看看我的編輯如何重命名它們。 –

1

表test2的不存在。嘗試登錄到PostgreSQL並檢查此表。

可以列出數據庫中的所有現有表與命令行工具

psql -d postgres 
\dt 
+0

我使用pgAdmin,表格肯定存在 http://pastebin.com/PmMe5FkZ – thanassis

0

檢查您在其中創建表test2的模式。 如果它的模式不是在搜索路徑中的一個,那麼你有兩個選擇: -

  • 架構添加到您的SEARCH_PATH(逗號分隔的文件列表postgres.conf)
  • 參考該表通過將模式名稱和點預先加入到表名中。 例如,如果有關表test2在my_schema中,那麼您的查詢應該是
    insert into my_schema.test2(ID) values(?)