import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.OracleTypes;
import oracle.jdbc.rowset.OracleCachedRowSet;
/**
* @author hucl
*
*
*/
public abstract class OracleHelper {
/**
* @param String cmdtext,SQL语句
* @param OracleParameter[] parms,参数集合
* @return int,SQL语句影响的行数
*/
public static int executeSql(String cmdtext, OracleParameter[] parms)
throws Exception {
PreparedStatement pstmt = null;
Connection conn = null;
try {
conn = ConnectMgr.getConnect();
pstmt = conn.prepareStatement(cmdtext);
prepareCommand(pstmt, parms);
return pstmt.executeUpdate();
}
catch (Exception e) {
throw new Exception("executeNonQuery方法出错:" + e.getMessage());
}
finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
catch (Exception e) {
throw new Exception("执行executeNonQuery方法出错:" + e.getMessage());
}
}
}
/**
*
* @param cmdtext
* @param parms
* @return int[] 多条SQL的影响行数
* @throws Exception
*/
public static int[] executeSqlBatch(String cmdtext, Object[] parms)
throws Exception {
PreparedStatement pstmt = null;
Connection conn = null;
try {
conn = ConnectMgr.getConnect();
conn.setAutoCommit(false);
pstmt = conn.prepareStatement(cmdtext);
prepareCommand(pstmt, parms);
int[] ret = pstmt.executeBatch();
conn.commit();
return ret;
}
catch (Exception e) {
conn.rollback();
throw new Exception("执行executeSqlBatch方法出错:" + e.getMessage());
}
finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
catch (Exception e) {
throw new Exception("执行executeSqlBatch方法出错:" + e.getMessage());
}
}
}
/**
*
* @param cmdtext
* @param parms
* @return ResultSet
* @throws Exception
*/
public static ResultSet executeSqlResultSet(String cmdtext,
OracleParameter[] parms) throws Exception {
PreparedStatement pstmt = null;
Connection conn = null;
try {
conn = ConnectMgr.getConnect();
pstmt = conn.prepareStatement(cmdtext);
prepareCommand(pstmt, parms);
return pstmt.executeQuery();
}
catch (Exception e) {
throw new Exception("executeSqlResultSet方法出错:" + e.getMessage());
}
finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
catch (Exception e) {
throw new Exception("executeSqlResultSet方法出错:" + e.getMessage());
}
}
}
/**
*
* @param sptext 存储过程语句
* @param parms OracleParameter[]
* @return boolean 成功为true,失败为false
* @throws Exception
*/
public static boolean executeProcedure(String sptext, OracleParameter[] parms)
throws Exception {
Connection conn = null;
CallableStatement cstmt = null;
try {
conn = ConnectMgr.getConnect();
conn.setAutoCommit(true);
cstmt = conn.prepareCall(sptext);
prepareCommand(cstmt, parms);
return cstmt.execute();
}
catch (Exception e) {
throw new Exception("executeProcedure方法出错:" + e.getMessage());
}
finally {
try {
if (cstmt != null)
cstmt.close();
if (conn != null)
conn.close();
}
catch (Exception e) {
throw new Exception("执行executeProcedure方法出错:" + e.getMessage());
}
}
}
/**
*
* @param sptext 存储过程语句
* @param parms OracleParameter[]
* @return Object[] 出参的结果
* @throws Exception
*/
public static Object[] executeProcedureObject(String sptext,
OracleParameter[] parms) throws Exception {
Connection conn = null;
CallableStatement cstmt = null;
try {
conn = ConnectMgr.getConnect();
cstmt = conn.prepareCall(sptext);
//应用参数
prepareCommand(cstmt, parms);
cstmt.execute();
int count = parms.length;
Object[] result = new Object[count];
for (int i = 0; i < count; i++) {
//判断是否有出参
if (parms[i].getInorout().compareToIgnoreCase("OUT") >= 0) {
/*判断是否是结果集,如果不是结果集,直接加到数组中;
*如果是结果集执行else下的语句,把结果集写到OracleCachedRowSet中,ResultSet的关闭不会受到影响
*原因:如果直接传ResultSet,
*在执行finally语句时会连同ResultSet一同关闭,
*在其他地方没法正确读出结果集
*/
if (parms[i].getType() != OracleTypes.CURSOR) {
result[i] = cstmt.getObject(parms[i].getIndex());
}
else {
OracleCachedRowSet ocrs = new OracleCachedRowSet();
ResultSet rs = null;
//取出ResutltSet对象
rs = (ResultSet)(cstmt.getObject(parms[i].getIndex()));
//写到OracleCachedRowSet对象
ocrs.populate(rs);
//关闭ResultSet
rs.close();
//把对象添加到数组
result[i] = (Object)ocrs;
}
//判断结束
}
else {
; //如果不是出参,执行下次循环
}
}
return result;
}
catch (Exception e) {
throw new Exception("executeProcedureObject方法出错:" + e.getMessage());
}
finally {
try {
if (cstmt != null)
cstmt.close();
if (conn != null)
conn.close();
}
catch (Exception e) {
throw new Exception("executeProcedureObject方法出错:" + e.getMessage());
}
}
}
/**
*
* @param cmdtext SQL语句
* @param name 列名
* @param parms OracleParameter[]
* @return Object
* @throws Exception
*/
public static Object executeSqlObject(String cmdtext, String name,
OracleParameter[] parms) throws Exception {
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
try {
conn = ConnectMgr.getConnect();
pstmt = conn.prepareStatement(cmdtext);
prepareCommand(pstmt, parms);
rs = pstmt.executeQuery();
if (rs.next()) {
return rs.getObject(name);
}
else {
return null;
}
}
catch (Exception e) {
throw new Exception("executeSqlObject方法出错:" + e.getMessage());
}
finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
catch (Exception e) {
throw new Exception("executeSqlObject方法出错:" + e.getMessage());
}
}
}
/**
*
* @param cmdtext SQL语句
* @param index 列名索引
* @param parms OracleParameter[]
* @return Object
* @throws Exception
*/
public static Object executeSqlObject(String cmdtext, int index,
OracleParameter[] parms) throws Exception {
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
try {
conn = ConnectMgr.getConnect();
pstmt = conn.prepareStatement(cmdtext);
prepareCommand(pstmt, parms);
rs = pstmt.executeQuery();
if (rs.next()) {
return rs.getObject(index);
}
else {
return null;
}
}
catch (Exception e) {
throw new Exception("executeSqlObject方法出错:" + e.getMessage());
}
finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
catch (Exception e) {
throw new Exception("executeSqlObject方法出错:" + e.getMessage());
}
}
}
/**
* @param pstmt
* @param cmdtext
* @param parms Object[]
* @throws Exception
*/
private static void prepareCommand(PreparedStatement pstmt, Object[] parms)
throws Exception {
int count = parms.length;
for (int i = 0; i < count; i++) {
OracleParameter[] op;
op = (OracleParameter[]) parms[i];
prepareCommand(pstmt, op);
pstmt.addBatch();
}
}
/**
*
* @param pstmt
* @param parms
* @throws Exception
*/
private static void prepareCommand(PreparedStatement pstmt,
OracleParameter[] parms) throws Exception {
if (parms == null) {
return;
}
int count;
count = parms.length;
for (int i = 0; i < count; i++) {
OracleParameter op = new OracleParameter();
op = parms[i];
pstmt.setObject(op.getIndex(), op.getValue());
}
}
/**
*
* @param cstmt
* @param parms
* @throws Exception
*/
private static void prepareCommand(CallableStatement cstmt,
OracleParameter[] parms) throws Exception {
if (parms == null) {
return;
}
int count;
count = parms.length;
try {
for (int i = 0; i < count; i++) {
OracleParameter op = new OracleParameter();
op = parms[i];
if (op.getInorout().compareToIgnoreCase("OUT") >= 0)
cstmt.registerOutParameter(op.getIndex(), op.getType());
else
cstmt.setObject(op.getIndex(), op.getValue());
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception {
/*
//测试1
OracleParameter[] parms;
parms = new OracleParameter[] {
new OracleParameter(1,"4")
};
OracleHelper.executeNonQuery(1,"insert into SYS_CONFIG(name) values(?)",parms);
//测试2
Object[] parms;
OracleParameter[] op1;
op1 = new OracleParameter[] {
new OracleParameter(1,"4")
};
OracleParameter[] op2;
op2 = new OracleParameter[] {
new OracleParameter(1,"5")
};
OracleParameter[] op3;
op3 = new OracleParameter[] {
new OracleParameter(1,"6")
};
parms = new Object[] {
op1,op2,op3
};
String sql = "insert into SYS_CONFIG(NAME) VALUES(?)";
OracleHelper.executeNonQuery(sql,parms);
//测试3
Object o = OracleHelper.executeSqlObject("select name from SYS_CONFIG ","name",null);
System.out.println(o);
//测试4
Object[] o;
OracleParameter[] parms;
parms = new OracleParameter[] {
new OracleParameter(1, "1"),
new OracleParameter(2, java.sql.Types.VARCHAR)
};
o = OracleHelper.executeProcedureObject(
"{call USP_SYS_CONFIG_GETVALUE(?,?)}", parms);
if (o != null) {
System.out.println(o[1].toString());
}
else {
System.out.println("null");
}
*/
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/utilities/archive/2005/12/21/557924.aspx