2011-12-21 108 views
0

我試圖在Oracle 11g中使用Java插入記錄。我仍然在學習Java。使用Java通過存儲過程插入Oracle JDBC

我必須調用存儲過程來插入記錄。我在用戶表中的主鍵是user_id。我也有一個在user_id上加2的序列

現在,當在Java中設置輸入參數時,我需要在user_id中傳遞什麼?此外,這將是在Date參數的情況下,類型:我下面的Java代碼

Users:user_id number (primary key), email varchar, created_date Date 

 Class.forName("oracle.jdbc.OracleDriver");   
     Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@101.12.11.11:1521:demo", "demo_app", "demo"); 

     CallableStatement cs = conn.prepareCall("{exec demo.my_pkg.insert_users(?,?,?)}"); 
     cs.registerOutParameter(1, Types.INTEGER); 
     cs.setInt(1, ?????); 

     cs.execute(); 

我是否需要設置USER_ID這裏?如果是的話,我應該怎麼做,因爲它的序列? 怎麼樣日期字段&電子郵件字段?

我需要registerOutParameter嗎?如果是這樣,爲什麼?

最後,我將如何得到插入成功的確認?

謝謝!

回答

0
  1. 我需要在這裏設置user_id嗎? RE:

    從雙

  2. 選擇sequence_name.nextval我需要的registerOutParameter這裏:你設置前,您可以得到一個序列值?如果是這樣,爲什麼? RE:如果你想得到一個返回值,你可以registerOutParameter,如果沒有,忘記它。

  3. 我將如何獲得插入成功的確認? RE:你可以從out參數或過程的返回值得到結果

+0

我可以直接傳遞序列作爲CallableStatement cs = conn.prepareCall(「{exec demo.my_pkg.insert_users(seq_users.nextval,?,?)}」); – Mike 2011-12-21 08:04:21

+0

@Mike答案是否定的。我幾分鐘前嘗試過。 :( – xuanyuanzhiyuan 2011-12-21 09:21:37

0

如果您在存儲過程中沒有觸發器/計算user_id,那麼您需要從Java代碼傳遞user_id(在Java中獲取下一個序列值,並將其傳遞給您的存儲函數)。 如果函數返回值,則需要註銷參數。 確認取決於實施。例如,如果您的函數返回是用戶插入或不是,請檢查返回值。

+0

如果我有序列觸發器會怎樣?我需要傳遞什麼參數? – Mike 2011-12-21 07:31:11

+1

在這種情況下,user_id是在你的數據庫中生成的,你不應該從java傳遞它。如果你有觸發器,爲什麼你在存儲過程中有user_id參數? – dbf 2011-12-21 07:32:45

0

我需要registerOutParameter嗎?如果是這樣,爲什麼?

是你需要的registerOutParameter如果你的存儲過程返回任何值(即它是一個函數)

有關設置日期字段使用java.sql.Date類的類型。