簡體   English   中英

如何使用PreparedStatement在Oracle的嵌套表中插入行

[英]How to insert a row in a nested table in Oracle with PreparedStatement

我在Oracle數據庫中創建了2種對象,分別是OBJECT,表類型和嵌套表。 我知道如何在cmd中插入表中的行,但是我不知道如何使用Java中的PreparedStatement在此表中插入行。 這是我的表格和類型:

 CREATE Or REPLACE TYPE item AS OBJECT
( 
  id        number,
  counter   number
);/
CREATE Or REPLACE TYPE time AS OBJECT
( 
  year        number,
  month number,
  second number
);
CREATE Or REPLACE TYPE Shoping_list AS TABLE OF item;
create table invoice(
id number NOT NULL PRIMARY KEY ,
list shoping_list,
dateIn date,
timeIn time,
totalCost number )
nested table list store as list_of_product;

我可以在cmd中插入此代碼

insert into invoice(id,list,dateIn,timeIn,totalCost) values(seq_ID_invoice.nextval,
shoping_list(item(1,2),item(26,1)),TO_DATE('1396-04-11','YYYY-MM-DD'),time(11,25,40),7000);

這是我的Java代碼

preparedStatement = connection.prepareStatement("insert into invoice (id,list,dateIn,timeIn,totalCost) values ("+id+",?,?,?,?)");

seq_ID_invoice是Oracle序列。 因此,oracle自動獲得其價值。 其余的您可以根據表內定義的列的類型使用PreparedStatement可用的setInt, setString, setFloat, etc. methods
以下示例代碼可能會對您有所幫助。

PreparedStatement ps = connection.prepareStatement(
    "insert into invoice(id, list, dateIn, timeIn, totalCost)"+
    " values (seq_ID_invoice.nextval, shoping_list(item(?,?), item(?,?)), TO_DATE(?,'YYYY-MM-DD'), time(?, ?, ?), ?)");

ps.setInt(1, int_value_for_id_of_item_1);
ps.setInt(2, int_value_for_counter_of_item_1);
ps.setInt(3, int_value_for_id_of_item_2);
ps.setInt(4, int_value_for_counter_of_item_2);
ps.setString(5, string_value_for_date);
ps.setInt(6, int_value_for_year_of_time);
ps.setInt(7, int_value_for_month_of_time);
ps.setInt(8, int_value_for_second_of_time);
ps.setInt(9, int_bvalue_for_total_cost);

int rowCnt = ps.executeUpdate();  
System.out.println(rowCnt+" rows affected.");

int_value_for_id_of_item_1, int_value_for_counter_of_item_1, ...這些是Java變量。 您可以定義選擇的變量,也可以直接提及值來代替這些變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM