1.建立Oracle包,在该包内建立DB函数
package Oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
/**
*
* @author ZMR
*/
public class DB {
private String URL="jdbc:oracle:thin:@IP+端口:FD";
private String name="system";
private String password="Dreamtech508";
private Connection conn = null;
private ResultSet rs=null;
private PreparedStatement ps=null;
private CallableStatement proc = null;
/*
* 数据库连接
*/
private void ConOracle() throws ClassNotFoundException, SQLException
{
if(conn==null)
{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn= DriverManager.getConnection(URL,name,password);
}
}
/*
* 关闭数据库
*/
public void CloseOracle() throws SQLException
{
if(rs!=null)
{
rs.close();
}
if(proc!=null)
{
proc.close();
}
if(conn!=null)
{
conn.close();
}
}
/*
* 执行存储过程
* @param storeName存储过程名称
* @param params哈希表,key 1:int 2:String 3:out型参数
* @param out说明返回值是否是OutParameter参数 true是 false否
*/
public ResultSet ExectStoreSet(String storeName, Map<String,String> params, Boolean out) throws ClassNotFoundException, SQLException
{
ConOracle();
int count=0;
if(params!=null)
{
int i=1;
count=params.size();
String args="(";
for(int j=1; j<=count; j++)
{
args+="?";
if(j<count)
{
args+=",";
}
}
args+=")";
proc=conn.prepareCall("{ call "+storeName+args+"}");
Iterator it = params.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
String key = entry.getKey().toString();
if(key.charAt(0)=='1') //说明参数是int类型
{
proc.setInt(i,Integer.parseInt(entry.getValue().toString()));
}
else if(key.charAt(0)=='2') //说明参数是string类型
{
proc.setString(i, entry.getValue().toString());
}
else //说明参数是返回游标
{
proc.registerOutParameter(i,oracle.jdbc.OracleTypes.CURSOR);
}
i++;
}
}
else{
proc=conn.prepareCall("{ call "+storeName+"}");
}
// proc.execute();
if(out)
{
proc.execute();
rs=(ResultSet)proc.getObject(count);
}
else{
rs=(ResultSet)proc.executeQuery();
}
return rs;
}
}
2.调用方法:
String id=request.getParameter("id").toString();
String startTime=request.getParameter("startTime").toString();
String endTime=request.getParameter("endTime").toString();
DB db=new DB();
Map<String,String> ar = new LinkedHashMap<String,String>();
ar.put("21",id);
ar.put("22",startTime); //注意键值必须是不同的,以2开头就可以了,具体注释请看数据库类DB
ar.put("23",endTime);
ar.put("3","");
String sb="[";
ResultSet rs=db.ExectStoreSet("PRO_GETAreaDeviation",ar,true);
while(rs.next())
{
sb+="{rmse:"+rs.getString(1)+",mae:"+rs.getString(2)+"}]";
}
db.CloseOracle();
OK