jdbc数据库操作封装

来源:互联网 发布:淘宝手机详情图片少 编辑:程序博客网 时间:2024/05/22 14:17
package com.conn;


import com.conn.po.User;
import org.junit.Test;


import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.*;


public class DataConnection {
    private Connection connection;
    // 连接驱动*
    private String driver;
    // 数据库连接url
    private String url;
    // 数据库用户名
    private String username;
    // 数据库密码
    private String password;


    /**
     * 执行多条update,delete,insert into数据
     *
     * @param list<UpdateMulti>UpdateMultil
     * @return 返回受影响的数量
     */
    public int executeMulti(List<UpdateMulti> list) {
        int num = 0;
        PreparedStatement psmt = null;//用PreparedStatement 防止sql注入
        //判断连接是否为空,为空重新建立连接
        if (this.connection == null) {
            this.connection = this.getConnection();
        }
        //并判断连接是否建立成功,失败则返回0
        if (this.connection == null) {
            return num;
        }
        try {
            //封装成事务处理,保证数据的安全性
            this.connection.setAutoCommit(false);//设置事务
            if (list != null && !list.isEmpty()) {
                for (int i = 0; i < list.size(); i++) {
                    UpdateMulti um = list.get(i);
                    String sql = um.getSql();
                    List params = um.getParams();
                    psmt = this.connection.prepareStatement(sql);
                    if (params != null && !params.isEmpty()) {
                        int index = 1;
                        for (int ii = 0; ii < params.size(); ii++) {
                            psmt.setObject(index++, params.get(ii));
                        }
                    }
                    num += psmt.executeUpdate();
                }
                this.connection.commit();
            }
        } catch (SQLException e) {
            try {
                this.connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        try {
            if (psmt != null) {
                psmt.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return num;
    }


    /**
     * 执行单条update,delete,insert into
     *
     * @param sql    带参数的sql
     * @param params 需要的条件,用PreparedStatement 防止sql注入
     * @return 返回受影响的数量
     */
    public int execute(String sql, List<Object> params) {
        int num = 0;//返回的受影响的条数
        PreparedStatement psmt = null;//用PreparedStatement 防止sql注入
        //判断连接是否为空,为空重新建立连接,并判断连接是否建立成功,失败则返回0
        if (this.connection == null) {
            this.connection = this.getConnection();
        }
        if (this.connection == null) {
            return num;
        }
        try {
            //封装成事务处理,保证数据的安全性
            this.connection.setAutoCommit(false);
            psmt = this.connection.prepareStatement(sql);
            //给PrepareStatement注入参数,PrepareStatement参数的下标是从1开始的,集合类是从0开始的
            if (params != null && !params.isEmpty()) {
                int index = 1;
                for (int i = 0; i < params.size(); i++) {
                    psmt.setObject(index++, params.get(i));
                }
            }
            num = psmt.executeUpdate();
            this.connection.commit();//提交
        } catch (SQLException e) {
            try {
                this.connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        try {
            if (psmt != null) {
                psmt.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return num;
    }


    /*反射查询*/
    public <T> List<T> getObjectList(String sql, List<Object> params, Class<T> cls) {
        PreparedStatement psmt = null;
        ResultSet rs = null;
        List<T> list = new ArrayList<T>();
        if (this.connection == null) {
            this.connection = this.getConnection();
        }
        if (this.connection == null) {
            return null;
        }
        try {
            psmt = this.connection.prepareStatement(sql);
            if (params != null && !params.isEmpty()) {
                int index = 1;
                for (int i = 0; i < params.size(); i++) {
                    psmt.setObject(index++, params.get(i));
                }
            }
            rs = psmt.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            int columns = rsmd.getColumnCount();
            while (rs.next()) {
                T rsObject = cls.newInstance();
                for (int i = 0; i < columns; i++) {
                    String columnName = rsmd.getColumnName(i + 1);
                    Object columnValue = rs.getObject(columnName);
                    if (columnValue == null) {
                        columnValue = "";
                    }
                    Field field = cls.getDeclaredField(columnName);
                    field.setAccessible(true);
                    field.set(rsObject, columnValue);
                }
                list.add(rsObject);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (psmt != null) {
                    psmt.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return list;
    }


    /*直接查询*/
    public List<Map<String, Object>> getDataList(String sql, List<Object> params) {
        PreparedStatement psmt = null;
        ResultSet rs = null;
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        if (this.connection == null) {
            this.connection = this.getConnection();
        }
        if (this.connection == null) {
            return null;
        }
        try {
            psmt = this.connection.prepareStatement(sql);
            if (params != null && !params.isEmpty()) {
                int index = 1;
                for (int i = 0; i < params.size(); i++) {
                    psmt.setObject(index++, params.get(i));
                }
            }
            rs = psmt.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            int columns = rsmd.getColumnCount();
            while (rs.next()) {
                Map<String, Object> map = new HashMap<String, Object>();
                for (int i = 0; i < columns; i++) {
                    String columnName = rsmd.getColumnName(i + 1);
                    Object columnValue = rs.getObject(columnName);
                    map.put(columnName, columnValue);
                }
                list.add(map);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (psmt != null) {
                    psmt.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


        return list;
    }


    public void releaseConnection() {
        try {
            if (this.connection != null) {
                connection.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }


    private boolean setProperties() {
        String properties = "config/db.properties";
        InputStream is = ClassLoader.getSystemResourceAsStream(properties);
        Properties prop = new Properties();
        try {
            prop.load(is);
            this.driver = prop.getProperty("driver");
            this.url = prop.getProperty("url");
            this.username = prop.getProperty("username");
            this.password = prop.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }


    private Connection getConnection() {
        connection = null;
        if (!setProperties()) {
            return null;
        }
        try {
            Class.forName(this.driver);
            connection = DriverManager.getConnection(this.url, this.username, this.password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }


    @Test
    public void test() {
        UpdateMulti um = new UpdateMulti();
        List<UpdateMulti> list_insert = new ArrayList<UpdateMulti>();
        um.setSql("insert into user(username,address,dept,account)values(?,?,?,?)");
        List<Object> list_params = new ArrayList<Object>();
        list_params.add("Rose");
        list_params.add("New york");
        list_params.add("sale");
        list_params.add(19000.00);
        um.setParams(list_params);
        list_insert.add(um);


        DataConnection dataConnection = new DataConnection();
       int num= dataConnection.executeMulti(list_insert);
        System.out.println("success in insert into "+num+ " data");
        String sql = "select * from user";
        List<Object> l1 = new ArrayList<Object>();
        List<User> list = (List<User>) dataConnection.getObjectList(sql, null, User.class);
        for (User u : list) {
            System.out.println(u.toString());
        }
    }

}

package com.conn;


import java.util.List;


/**
 * Created by Administrator on 17-12-4.
 */
public class UpdateMulti {
    private String sql;
    private List<Object> params;


    public List<Object> getParams() {
        return params;
    }


    public void setParams(List<Object> params) {
        this.params = params;
    }


    public String getSql() {
        return sql;
    }


    public void setSql(String sql) {
        this.sql = sql;
    }
}


package com.conn.po;


import java.io.Serializable;


/**
 * Created by Administrator on 17-12-4.
 */
public class User implements Serializable {
    private static final long serializableUID = 0;
    private Integer id;
    private String username;
    private String address;
    private String dept;
    private Double account;


    public Integer getId() {
        return id;
    }


    public void setId(Integer id) {
        this.id = id;
    }


    public String getAddress() {
        return address;
    }


    public void setAddress(String address) {
        this.address = address;
    }


    public String getDept() {
        return dept;
    }


    public void setDept(String dept) {
        this.dept = dept;
    }


    public Double getAccount() {
        return account;
    }


    public void setAccount(Double account) {
        this.account = account;
    }


    public String getUsername() {
        return username;
    }


    public void setUsername(String username) {
        this.username = username;
    }


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                ", dept='" + dept + '\'' +
                ", account=" + account +
                '}';
    }

}

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/dbtest?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
username=root
password=

原创粉丝点击