jdbc--------JdbcUtilDao 类

2018-12-14

目标:做成一个比较通用的 sql 操作

import com.ljs.util.JDBCUtil;

类名:JdbcUtilDao 

1: 更新操作, 针对任何表,增加,删除,更新操作都可以满足。

知识点: 可变数组, preparedstatement 对象。(?) 占位符。

public int update(String sql, Object ...objects){   // 
        
        // 1 获取conn 连接
        Connection connection =null;
        PreparedStatement pt = null;
        try {
            connection = JDBCUtil.getConn();
            
            pt = connection.prepareStatement(sql);
            
            for( int i =0; i < objects.length; ++i ){
                pt.setObject(i+1, objects[i]);
            }
            int len = pt.executeUpdate();
            return len;
        } catch ( Exception e) {
            
            e.printStackTrace();
            return -1;
        } finally {
            // 3 关闭 con
            JDBCUtil.close(null, pt, connection);
        }
    
    }

2: 通用的查询单条记录, 只返回一条的记录。  这条记录用 javabean 对象封装好。

知识点:泛型,ResultSetMetaData 对象保存结果集的属性结构。 和根据ResultSet 的值

反射,  生成对象,和获取对象的属性并且赋值。

ResultSet --> bean.

public<T> T queryOne(Class<T> clazz, String sql, Object ...Object){
        
        try {
            Connection connection = JDBCUtil.getConn();
            
            PreparedStatement pst = connection.prepareStatement(sql);
            for( int i=0; i<Object.length; ++i ){
                pst.setObject(i+1, Object[i]);
            }
            
            ResultSet resultSet = pst.executeQuery();
            
            // ResultSetMetaData  保存这个结果集的属性结构。
            ResultSetMetaData metaData = resultSet.getMetaData();
            int len = metaData.getColumnCount();
            
            while( resultSet.next() ){
                
                T bean = clazz.newInstance();
                for( int i = 1; i<=len; ++i ){
                    String column_name = metaData.getColumnLabel(i);
                    Object value = resultSet.getObject(column_name);
                    
                    /*
                     * 根据结果集的属性结构 构造 属性结构。
                     * 反射 。
                     */
                    Field field = clazz.getDeclaredField(column_name);
                    field.setAccessible(true);
                    field.set(bean, value);
                    
                }
                return bean;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return null;
        
    }

3 查询多条记录,返回list容器列表中。 

知识点: 和上一样。 ArrayList

public <T> List<T> queryMutil(Class<T> clazz, String sql, Object ...Object){
        
        
        try {
            Connection connection = JDBCUtil.getConn();
            PreparedStatement pst = connection.prepareStatement(sql);
            List<T> list = new ArrayList<T>();
            for( int i=0; i<Object.length; ++i ){
                pst.setObject(i+1, Object[i]);
            }
            
            ResultSet set = pst.executeQuery();
            
            ResultSetMetaData metadata = set.getMetaData();
            int len = metadata.getColumnCount();
            
            while(set.next()){
                T bean = clazz.newInstance();
                for (int i = 1; i <= len; i++) {
                    String name = metadata.getColumnLabel(i);
                    Object object2 = set.getObject(name);
                    
                    Field field = clazz.getDeclaredField(name);
                    field.setAccessible(true);
                    field.set(bean, object2);
                }
                list.add(bean);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

上面的测试代码

package com.ljs.daoTest;

import java.util.List;

import org.junit.Test;

import com.ljs.bean.UserBean;
import com.ljs.dao.JdbcUtilDao;


public class JdbcDaoTest {
    
    @Test
    public void update(){
        
        JdbcUtilDao dao = new JdbcUtilDao();
        //String sql = "insert into user(name,password) values(?,?)";
        String sql = "update user set name = ? where id = 11";
        int len = dao.update(sql, "lijinsheng");
        System.out.println(len>0?"yes":"no");
    }
    
    @Test
    public void queryOne(){
        JdbcUtilDao dao = new JdbcUtilDao();
        String sql = "select * from user where name= ?";
        UserBean tBean = dao.queryOne(UserBean.class, sql,"lijinsheng");
        System.out.println(tBean);
        
    }
    
    @Test
    public void queryMutil(){
        JdbcUtilDao dao = new JdbcUtilDao();
        List<UserBean> list;
        String sql = "select * from user where name= ?";
        list =  dao.queryMutil(UserBean.class, sql, "lijinsheng");
        for( int i=0; i<list.size(); ++i ){
            System.out.println(list.get(i));
        }
    }

}
public class DaoImp implements Dao{


    @Override
    public UserBean query(int id) throws SQLException {

        String sql = "select * from USER where id = ?";
       Connection connection = JDBCUtil.getConn();
       UserBean bean = new UserBean();
       PreparedStatement preparedStatement = (PreparedStatement)
               connection.prepareStatement(sql);

       preparedStatement.setInt(1,id);

       ResultSet rs = preparedStatement.executeQuery();

       while(rs.next()){

           bean.setId(rs.getInt(1));
           bean.setName(rs.getString(2));
           bean.setPassword(rs.getString(3));
           bean.setPhone(rs.getString(4));

       }

       JDBCUtil.close(connection,preparedStatement, rs);
       return bean;

    }

    @Override
    public void modify(UserBean userBean) throws SQLException {
        String sql = "update user set name=?, password=?, phone=? where id=?";
        Connection connection = JDBCUtil.getConn();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,userBean.getName());
        preparedStatement.setString(2, userBean.getPassword());
        preparedStatement.setString(3,userBean.getPhone());
        preparedStatement.setInt(4,userBean.getId());
        preparedStatement.executeUpdate();

    }


    @Override
    public void add(UserBean user) throws SQLException {
        String sql = "insert into user(id,name,password,phone) values(?,?,?,?)";
        Connection connection = JDBCUtil.getConn();

        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,user.getId());
        preparedStatement.setString(2,user.getName());
        preparedStatement.setString(3,user.getPhone());
        preparedStatement.setString(4,user.getPassword());
        preparedStatement.executeUpdate();
    }

    @Override
    public void delete(int id) throws SQLException {

        String sql = "delete from user where id=?";
        Connection connection = JDBCUtil.getConn();

        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,id);
        preparedStatement.executeUpdate();

    }
}

  

原文地址:https://www.cnblogs.com/lijins/p/10122141.html