上面的TYP#ARR_FBA2704是在Oracle里面自定义的数组类型: CREATE OR REPLACE TYPE TYP#ARR_FBA2704 IS TABLE OF NUMBER(14, 0);但是当我尝试返回记录集的时候遇到了困难
这段代码也是只提到一维的数组:import java.sql.*; import oracle.jdbc.driver.*; import oracle.sql.*;class Array {public static void main(String args[]) throws Exception { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@aria:1521:ora8i", "scott", "tiger"); OracleCallableStatement stmt = (OracleCallableStatement)conn.prepareCall ( "begin ? := getSimpleArray; end;" ); // The name we use below, SIMPLEARRAY, matches the name of our // type we defined in SQL above stmt.registerOutParameter( 1, OracleTypes.ARRAY, "SIMPLEARRAY" ); stmt.executeUpdate(); // Now we can get the array object back and print out some meta data about it ARRAY simpleArray = stmt.getARRAY(1); System.out.println ("Array is of type " + simpleArray.getSQLTypeName()); System.out.println ("Array element is of type code " + simpleArray.getBaseType()); System.out.println ("Array is of length " + simpleArray.length()); // Lastly, we'll print out the entire contents of our array String[] values = (String[])simpleArray.getArray(); for( int i = 0; i < values.length; i++ ) System.out.println( "row " + i + " = '" + values[i] + "'" ); stmt.close(); conn.close(); } }
改为ps.executeUpdate(sql);试试看
cs = con.prepareCall("{? = call PKG#URTN2_FBA2704.FN#GetPartBoat3(?, ?)}"); oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor.createDescriptor(
"PKG#FBA2704.TBL_BOAT_PART", con);
java.sql.Date[] arrFmAndTo = {java.sql.Date.valueOf("2005-04-04"),
java.sql.Date.valueOf("2005-04-10"),};
oracle.sql.ARRAY oraArr = new oracle.sql.ARRAY(desc, con, arrFmAndTo);
((oracle.jdbc.driver.OracleCallableStatement)cs).setARRAY(2, oraArr); cs.registerOutParameter(1, oracle.jdbc.OracleTypes.ARRAY,
"TYP#ARR_FBA2704");
cs.setInt(2, 5);
cs.setInt(3, 10);
cs.execute();
//rs = (ResultSet)cs.getObject(1);
oracle.sql.ARRAY array = ((oracle.jdbc.driver.
OracleCallableStatement) cs).getARRAY(1);
BigDecimal[] arrRs = (BigDecimal[]) array.getArray();
CREATE OR REPLACE TYPE TYP#ARR_FBA2704 IS TABLE OF NUMBER(14, 0);但是当我尝试返回记录集的时候遇到了困难
import oracle.jdbc.driver.*;
import oracle.sql.*;class Array
{public static void main(String args[]) throws Exception
{ DriverManager.registerDriver(new
oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@aria:1521:ora8i", "scott", "tiger"); OracleCallableStatement stmt =
(OracleCallableStatement)conn.prepareCall
( "begin ? := getSimpleArray; end;" ); // The name we use below, SIMPLEARRAY, matches the name of
our
// type we defined in SQL above
stmt.registerOutParameter( 1, OracleTypes.ARRAY,
"SIMPLEARRAY" );
stmt.executeUpdate(); // Now we can get the array object back and print out some
meta data about it
ARRAY simpleArray = stmt.getARRAY(1); System.out.println ("Array is of type " +
simpleArray.getSQLTypeName()); System.out.println ("Array element is of type code " +
simpleArray.getBaseType()); System.out.println ("Array is of length " +
simpleArray.length()); // Lastly, we'll print out the entire contents of our array
String[] values = (String[])simpleArray.getArray(); for( int i = 0; i < values.length; i++ )
System.out.println( "row " + i + " = '" + values[i] +
"'" ); stmt.close();
conn.close();
}
}
javax.servlet.ServletException: 无效的名称模式:
是怎么回事?