⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbmanager.java

📁 java开发的桌面系统
💻 JAVA
字号:
import java.sql.*;

import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.awt.*;
import java.util.Iterator;

import javax.swing.JOptionPane;
public class DBManager {
	   Connection conn; 
       Statement stmt; 
       ResultSet rs;
      public DBManager(){
    	   
       }
       
       public ResultSet getResult(String sql){
    	   try{
    		   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    		   conn= DriverManager.getConnection("jdbc:odbc:mydb"); 
    		   stmt=conn.createStatement();
    		   rs=stmt.executeQuery(sql);
    	       return rs;
    	   }
    	   catch(Exception e){
    		   JOptionPane.showMessageDialog(null, "出错了");
    		   System.out.println("getResult-----"+e.toString());
    		   return null;
    	   }
       }
       public boolean excuteSql(String sql){
    	   try{
    		   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
    		   conn= DriverManager.getConnection("jdbc:odbc:mydb");
    		   stmt=conn.createStatement();
    		   stmt.executeUpdate(sql);
      		   conn.commit();
      		   return true;
    	   }
    	   catch(Exception e){
    		   
    		   System.out.println("getResult-----"+e.toString());
    		   return false; 
    	   }
       }
      public void shutdown(){
    	  try {
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	  
      }
      
      
      
      ////////////////////////////////////////////查询方法
       /*查询方法也许是CommonDao最常用的方法,查询方法需要将数据库的结果返回给画面。
       返回值我们一般不使用ResultSet,因为 ResultSet依赖于Connection,如果Connection关闭,
       ResultSet将不再有效,所以我们通常将ResultSet转变为 一个List之后返回。
       在说明查询方法之前,我们先说说如何将数据库中的内容放在List中,
       我们使用一个List表示一个查询结果集合,使用一个Map表示集合中的一行,
       Map的key表示数据库表的字段名字,Value表示数据库字段的内容。代码为:
       */
        public List convert(ResultSet rs){

        // record list
        List retList = new ArrayList();

        try {
            ResultSetMetaData meta = rs.getMetaData();

            // column count
            int colCount = meta.getColumnCount();

            // each record
            while (rs.next()) {

                Map recordMap = new HashMap();

                // each column
                for (int i = 1; i <= colCount; i++) {
                    // column name
                    String name = meta.getColumnName(i);
                    // column value
                    Object value = rs.getObject(i);
                    // add column to record
                    recordMap.put(name, value);
                }
                // ad record to list
                retList.add(recordMap);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return retList;
    }

    /*为了避免Sql注入的安全问题,我们通常使用PreparedStatement,
     *在使用PreparedStatement的时候涉及到如何将传入参数设置到PreparedStatement上面,参看以下的共通方法:*/
    
    private void apply(PreparedStatement pstmt, List params){
        try {
            // if params exist
            if (params != null && params.size() > 0) {
                // parameters iterator
                Iterator it = params.iterator();
                
                // parameter index
                int index = 1;
                while(it.hasNext()) {
                    
                    Object obj = it.next();
                    // if null set ""
                    if (obj == null) {
                        pstmt.setObject(index, "");
                    } else {
                        // else set object
                        pstmt.setObject(index, obj);
                    }
                    
                    //next index
                    index++;
                }
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    /*接着我们继续说我们的查询方法,有了上述两个方法,我们的查询方法就非常简单了:*/
    public List query(String sql, List params) {
        List result = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            pstmt = conn.prepareStatement(sql);
            this.apply(pstmt, params);
            rs = pstmt.executeQuery();
            result = this.convert(rs);
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    // nothing
                }
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    // nothing
                }
            }
        }

        return result;
    }
    
   //单值返回查询
    public Object queryOne(String sql, List params){
        List list = this.query(sql,params);
       
        
            Map record = (Map)list.get(0);
         
        	return record.values().toArray()[0];
        	
    }
    
    /*更新,删除,插入方法
    由于在JDBC中这三个方法都是用了一个execute完成,所以这里我们也使用一个方法来完成这些功能。代码为:*/
    public int execute(String sql, List params){
        int ret = 0;
        PreparedStatement pstmt = null;
        try {
            pstmt = conn.prepareStatement(sql);
            this.apply(pstmt, params);
            ret = pstmt.executeUpdate();
        }catch(SQLException ex) {
            ex.printStackTrace();
        } finally {
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    // nothing.
                }
            }
        }
        
        return ret;
    }
    
///////////////////////////////////////////////////////
      
      
   
}       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -