以下代码,批量操作人员信息,程序调用存储过程时一直不成功,而在Oracle数据库里测试时没有问题。
public boolean ceshi(ArrayList list,String loginid) {
//ARRAY aArray = getArray(list);//该函数调用的第二三个参数必须大写
System.out.println(this.getArray(list));
CallableStatement stmt = null;
boolean backVal = false;
int v_out=0;
DBConnection db= new DBConnection();
if(db.openConnect()) conn=db.getConnection();
try {
if (conn != null) {
stmt = conn.prepareCall("{call CESHI(?,?,?)}"); //调用某个存储过程
if(this.getArray(list)!=null){
stmt.setArray(1, this.getArray(list));
}
stmt.setString(2, loginid.trim());
stmt.registerOutParameter(3, OracleTypes.INTEGER);
stmt.execute();
v_out = stmt.getInt(3);
System.out.println("return:"+stmt.getInt(3));
if(v_out!=-1){
backVal=true;
}
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
try {
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}//释放数据库连接
}
System.out.println(backVal);
return backVal;
}
/**
*
* @param conn
* @param OracleObj Oracle对象
* @param Oraclelist Oracle数组
* @param objlist
* @return
* @throws Exception
*/
private ARRAY getArray(ArrayList objlist) {
//ARRAY list = null;
DBConnection db= new DBConnection();
if(db.openConnect()) {conn=db.getConnection();}
try {
if (objlist != null && objlist.size() > 0) {
StructDescriptor structdesc = new StructDescriptor("MAKECARDTYPE", conn);
STRUCT[] structs = new STRUCT[objlist.size()];
Object[] result = null;
for (int i = 0; i < objlist.size(); i++) {
result = new Object[1];
result[0] = new String(objlist.get(0).toString());
structs[i] = new STRUCT(structdesc, conn, result);
}
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("CARDIDLIST",conn);
ARRAY list = new ARRAY(desc, conn, structs);
return list;
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}finally {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}//释放数据库连接
}
return null;
}
public boolean ceshi(ArrayList list,String loginid) {
//ARRAY aArray = getArray(list);//该函数调用的第二三个参数必须大写
System.out.println(this.getArray(list));
CallableStatement stmt = null;
boolean backVal = false;
int v_out=0;
DBConnection db= new DBConnection();
if(db.openConnect()) conn=db.getConnection();
try {
if (conn != null) {
stmt = conn.prepareCall("{call CESHI(?,?,?)}"); //调用某个存储过程
if(this.getArray(list)!=null){
stmt.setArray(1, this.getArray(list));
}
stmt.setString(2, loginid.trim());
stmt.registerOutParameter(3, OracleTypes.INTEGER);
stmt.execute();
v_out = stmt.getInt(3);
System.out.println("return:"+stmt.getInt(3));
if(v_out!=-1){
backVal=true;
}
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
try {
if (cs != null) {
cs.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}//释放数据库连接
}
System.out.println(backVal);
return backVal;
}
/**
*
* @param conn
* @param OracleObj Oracle对象
* @param Oraclelist Oracle数组
* @param objlist
* @return
* @throws Exception
*/
private ARRAY getArray(ArrayList objlist) {
//ARRAY list = null;
DBConnection db= new DBConnection();
if(db.openConnect()) {conn=db.getConnection();}
try {
if (objlist != null && objlist.size() > 0) {
StructDescriptor structdesc = new StructDescriptor("MAKECARDTYPE", conn);
STRUCT[] structs = new STRUCT[objlist.size()];
Object[] result = null;
for (int i = 0; i < objlist.size(); i++) {
result = new Object[1];
result[0] = new String(objlist.get(0).toString());
structs[i] = new STRUCT(structdesc, conn, result);
}
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("CARDIDLIST",conn);
ARRAY list = new ARRAY(desc, conn, structs);
return list;
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}finally {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}//释放数据库连接
}
return null;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货