如何使用 PreparedStatement 在 Oracle 中的嵌套 table 中插入一行
How to insert a row in a nested table in Oracle with PreparedStatement
我在我的 Oracle 数据库中创建了 2 个类型作为 OBJECT 和一个类型 table 以及一个嵌套的 table。我知道如何在 cmd 中的 table 中插入一行,但我不知道如何在 table 中插入一行,在 Java 中插入 PreparedStatement
。
这是我的 table 并输入:
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 会自动获取它的值。对于其余部分,您可以根据 table 中定义的列类型使用 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 个变量。您可以定义自己选择的变量,也可以直接提及值来代替这些变量。
我在我的 Oracle 数据库中创建了 2 个类型作为 OBJECT 和一个类型 table 以及一个嵌套的 table。我知道如何在 cmd 中的 table 中插入一行,但我不知道如何在 table 中插入一行,在 Java 中插入 PreparedStatement
。
这是我的 table 并输入:
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 会自动获取它的值。对于其余部分,您可以根据 table 中定义的列类型使用 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 个变量。您可以定义自己选择的变量,也可以直接提及值来代替这些变量。