9.23JavaWeb之JDBC进行CRUD操作
使用PreparedStatement实现
数据库连接的本质:
- 
一个Socket连接,用于对数据库发出指令接收响应的 
java.sql包当中定义了3种对数据库的调用方式:
- 
Statement:执行静态SQL语句,返回生成结果的对象
- 
PrepatedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象多次高效地执行该语句(Connection是接口,PrepatedStatement是子接口)--->实际开发过程当中用的都是这个
- 
CallableStatement:执行SQL存储
具体地实现如图:

整体地CRUD过程
- 
获取连接--->Connection 
- 
创建Statement对象 
- 
让Statement对象去执行SQL语句 
模拟登录判断是否存在用户的操作
登录类:
    
创建驱动类:
    //这个get是Statement当中的方法
    public <T> T get(String sql, Class<T> clazz) {
        T t = null;
        //创建连接
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        //进行数据库连接事务
        try {
            //加载配置文件--->使用类加载机制获取到配置文件
            InputStream is = Statement.class.getClassLoader().getResourceAsStream("Localhost.properties");
            //创建Properties对象引用
            Properties prop = new Properties();
            //加载流文件
            prop.load(is);
            //读取配置文件
            String driverClass = prop.getProperty("DRIVER");
            String url = prop.getProperty("URL");
            String userName = prop.getProperty("USERNAME");
            String password = prop.getProperty("PASSWORD");
            //加载数据库驱动
            Class.forName(driverClass);
            //获取连接
            /*mysql驱动连接*/
            conn = DriverManager.getConnection(url, userName, password);
            /*创建statement对象*/
            st = conn.createStatement();
            /*创建结果集对象*/
            rs = st.executeQuery(sql);
            //获取结果元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            //获取结果集列数
            int columnCount = rsmd.getColumnCount();
            //判断--->如果有下一列,再次创建事务去读取
            if (rs.next()){
                t = clazz.newInstance();
                //循环获取列名
                for (int i = 0; i < columnCount; i++){
                    //获取列名
                    String columnName = rsmd.getColumnLabel(i+1);
                    //根据列名获取对应的数据
                    Object columnValue = rs.getObject(columnName);
                    //将数据表中得到的数据封装进入对象当中
                    Field field = clazz.getDeclaredField(columnName);
                    field.setAccessible(true);
                    field.set(t, columnValue);
                }
                return t;
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
             
                     
                    
                 
                    
                