j2ee訪問oracle數據庫封裝類以及調用方法

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章