j2ee访问oracle数据库封装类以及调用方法

来源:互联网 发布:ai软件怎么下载 编辑:程序博客网 时间:2024/06/04 20:13

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

 

原创粉丝点击