zoukankan      html  css  js  c++  java
  • Java 数据库篇

    一、简易封装JDBC工具类

    package com.jackie.MyBatis.main;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JdbcHelper {
    
        private static Connection conn = null;
        
        static {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8";
                String user = "jackie";
                String pass = "123456";
                conn = DriverManager.getConnection(url, user, pass);
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
        
        private void close(ResultSet rs, Statement stmt, Connection conn) {
            try {
                if(rs != null && !rs.isClosed()) {
                    rs.close();
                }
                if(stmt != null && !stmt.isClosed()) {
                    stmt.close();
                }
                if(conn != null && !conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        public Role getRole(int id) {
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                String sql = "select * from role where id=?";
                ps = conn.prepareStatement(sql);
                ps.setInt(1, id);    // 注意从1开始计数
                rs = ps.executeQuery();
                
                Role role = null;
                while(rs.next()) {
                    int roleId = rs.getInt("id");
                    String name = rs.getString("name");
                    role = new Role(roleId, name);
                }
                return role;
            } catch (SQLException e) {
                e.printStackTrace();
                return null;
            } finally {
                this.close(rs, ps, conn);
            }
        }
    }

    实体类Role:

    package com.jackie.MyBatis.main;
    
    public class Role {
    
        private int id;
        
        private String name;
    
        public Role(int id, String name) {
            this.id = id;
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "[" + id + "," + name + "]";
        }
    
        // getter and setter omitted
        
    }

    使用:

    public class Test {
        public static void main(String[] args) {
            JdbcHelper helper = new JdbcHelper();
            System.out.println(helper.getRole(1));
        }
    }

    二、三层架构

    配置数据源 context.xml(也可以使用一些第三方的数据源库,如 c3p0):

    <?xml version="1.0" encoding="UTF-8"?>
    <context>
        <resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
            maxActive="100" maxIdle="30" maxWait="10000" username="jackie"
            password="123456" driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8" />
    </context>

    Dao层:

    BaseDao:

    package com.jackie.MyBatis.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    
    public class BaseDao {
        
        /**
         * 查找JNDI,获得数据源对象,再获得数据库连接对象
         */
        private Connection getConnection() {
            Connection conn = null;
            Context ctx = null;
            try {
                ctx = new InitialContext();
                DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
                conn = ds.getConnection();
            } catch (NamingException | SQLException e) {
                e.printStackTrace();
            }
            if(conn == null) {
                System.err.println("无法建立数据库连接");
            }
            return conn;
        }
        
        private void closeAll(Connection conn, Statement stmt, ResultSet rs) {
            try {
                if(rs != null & !rs.isClosed()) {
                    rs.close();
                }
                if(stmt != null & !stmt.isClosed()) {
                    stmt.close();
                }
                if(conn != null & !conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        private void closeAll(Connection conn, Statement stmt) {
            closeAll(conn, stmt, null);
        }
        
        public int executeUpdate(String sql, Object... params) {
            int result = 0;
            Connection conn = null;
            PreparedStatement pstmt = null;
            try {
                conn = getConnection();
                if(conn != null && !conn.isClosed()) {
                    pstmt = conn.prepareStatement(sql);
                    if(params != null) {
                        for (int i = 0; i < params.length; i++) {
                            pstmt.setObject(i + 1, params[i]);
                        }
                    }
                    result = pstmt.executeUpdate();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                closeAll(conn, pstmt);
            }
            return result;
        }
        
        public Object executeQuery(RSProcessor processor, String sql, Object... params ) {
            Object result = null;
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
                conn = getConnection();
                if(conn != null && !conn.isClosed()) {
                    pstmt = conn.prepareStatement(sql);
                    for (int i = 0; i < params.length; i++) {
                        pstmt.setObject(i + 1, params[i]);
                    }
                    rs = pstmt.executeQuery();
                    result = processor.process(rs);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                closeAll(conn, pstmt, rs);
            }
            return result;
        }
        
    }

    RSProcessor:

    package com.jackie.MyBatis.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * 用于将Result对象指向的数据,转换成想要的对象
     */
    public interface RSProcessor {
        Object process(ResultSet rs) throws SQLException;
    }

    数据Dao —— UserDao:

    package com.jackie.MyBatis.dao;
    
    import java.util.List;
    
    import com.jackie.MyBatis.domain.User;
    
    public interface UserDao {
        List<User> getAllUsers();
        User getUserByName(String userName);
        int addUser(User user);
    }
  • 相关阅读:
    redis4.0 安装
    MYSQL第一节:Mysql5.7 通用二进制安装方法
    mysql密码忘记,重新设置密码
    selenium使用
    数据结构
    Mysql数据库引擎的区别
    python中的mysql转义字符串(向mysql插入特殊字符)
    scrapyd使用
    liunx部署redis
    Django+uwsgi部署到liunx服务器上
  • 原文地址:https://www.cnblogs.com/quanxi/p/6126172.html
Copyright © 2011-2022 走看看