Mysql-JDBC

发布于:2025-04-17 ⋅ 阅读:(78) ⋅ 点赞:(0)

JDBCUtils

public class JDBCUtils {
    /**
     * 工具类的构造方法一般写成私有
     */
    private JDBCUtils(){}

    //静态代码块再类加载的时候执行,且执行一次
    static{
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @return 连接对象
     * @throws SQLException
     * 注意这里异常要抛出去,使用工具类的地方捕获异常
     */
    public static Connection getConnection() throws SQLException {
        String url = "jdbc:mysql://localhost:3306/mmm?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false";
        String username = "root";
        String password = "123456";
        return DriverManager.getConnection(url,username,password);
    }

    /**
     *
     * @param conn
     * @param st
     * @param rs
     * 注意这里Statement是prepareStatement的父接口使用可以直接这样写
     */
    public static void close(Connection conn, Statement st, ResultSet rs){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

防止sql注入攻击的方式

public class jdbc {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "select username,password from wy where username like ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,"22%");
            rs = ps.executeQuery();
            while(rs.next()){
                System.out.println(rs.getString("username"));
                System.out.println(rs.getString("password"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(conn,ps,rs);
        }
    }
}

不防止sql注入攻击的方式

public class jdbc {
    public static void main(String[] args) {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "select * from dept";
           	st = conn.createStatement();
            rs = st.executeQuery(sql);
            while(rs.next()){
                int deptno = rs.getInt("deptno");
                String dename = rs.getString("dname");
                String loc = rs.getString("loc");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(conn,st,rs);
        }
    }
}

JDBC实现的6步

第一步:注册驱动(告诉java程序要连接哪个品牌的数据库)

第二步:获取连接(表示JVM进程和数据库进程之间的通道打开了,进程之间的重量级通信,使用之后要关闭通道)

第三步:获取数据库操作对象(专门执行sql语句的对象)

第四步:执行sql语句(DDL、DQL…)

第五步:处理查询结果集(只有当第四步执行的是select的语句的时候才有第五步)

第六步:释放资源(使用完资源之后要关闭资源,Java和数据库之间属于进程之间的通信,使用之后要关闭)


网站公告

今日签到

点亮在社区的每一天
去签到