我的JSF表单包含 15个复选框和一个提交按钮。我可以单击全部或仅选择几个复选框,然后提交表单。
使用javascript函数,我得到我点击的复选框值并将它们连接成一个字符串;例如checkbox1=IC&checkbox2=S
此值发送到我的java类。我想在Oracle中的存储过程中传递复选框值。
请注意,对于所有15个复选框,该字符串可以包含1个复选框的值。存储过程应该能够处理我得到的值的数量。
示例:
checkbox1=IC&checkbox2=S
或checkbox1=IC&checkbox2=S&checkbox3=I&checkbox4=Sa&checkbox5=f&checkbox6=g&checkbox7=h&checkbox8=i&checkbox9=q&checkbox10=e&checkbox11=t&checkbox12=p&checkbox13=89&checkbox14=100&checkbox15=2012
有关如何编写存储过程的任何想法吗?
感谢您的耐心和回答。
答案 0 :(得分:0)
您可以声明Oracle存储过程以接受数组。我没有立即清楚地知道您希望如何将该信息传递给存储过程(即,您是否需要传递复选框名称和相关值,或者您只需要指示已选中复选框N)。概述最简单的选项(尽管它可能涉及存储过程中的更多解析工作)将传递一个字符串数组,其中数组中的每个元素都类似于checkbox1=IC
到存储过程。
CREATE OR REPLACE TYPE str_table
IS TABLE OF varchar2(100);
CREATE OR REPLACE PROCEDURE process_checkboxes( p_checkboxes IN str_table )
AS
BEGIN
FOR i IN 1 .. p_checkboxes.count
LOOP
<<do something with p_checkboxes(i)>>
END LOOP;
END;
然后你可以用Java调用它(改编自this askTom thread)
import java.io.*;
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
public class ArrayDemo
{
public static void passArray() throws SQLException
{
Connection conn = <<get your JDBC connection>>
String checkboxStr = "checkbox1=IC&checkbox2=S";
String strArray[] = checkboxStr.split("&");
ArrayDescriptor descriptor =
ArrayDescriptor.createDescriptor( "STR_TABLE", conn );
ARRAY array_to_pass =
new ARRAY( descriptor, conn, strArray);
OraclePreparedStatement ps =
(OraclePreparedStatement)conn.prepareStatement
( "begin process_checkboxes(:x); end;" );
ps.setARRAY( 1, array_to_pass );
ps.execute();
}
}