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