zoukankan      html  css  js  c++  java
  • 9.23JavaWeb之JDBC进行CRUD操作

    9.23JavaWeb之JDBC进行CRUD操作

    使用PreparedStatement实现

    数据库连接的本质:

    • 一个Socket连接,用于对数据库发出指令接收响应的

    java.sql包当中定义了3种对数据库的调用方式:

    • Statement:执行静态SQL语句,返回生成结果的对象

    • PrepatedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象多次高效地执行该语句(Connection是接口,PrepatedStatement是子接口)--->实际开发过程当中用的都是这个

    • CallableStatement:执行SQL存储

    具体地实现如图:

     

    整体地CRUD过程

    • 获取连接--->Connection

    • 创建Statement对象

    • 让Statement对象去执行SQL语句

    模拟登录判断是否存在用户的操作

    登录类:

        @Test
       public void testLogin(){
           //获取控制台内容
    //       Scanner scanner = new Scanner(System.in);
    //       System.out.println("username:");
           //获取用户名
    //       String user = scanner.next();
           String user = "Jun";

    //       System.out.println("password:");
    //       String password = scanner.next();
           String password = "JunkingBoy";

           //把用户名和密码写到sql语句里面--->调用get方法
           /*
           1、String的sql语句
           2、验证登录成功或者失败,返回一个对象进行比较
            */

           //提供一个sql语句
           String sql = "select `name`, `password` from users where Name = '" + user + "' and Password = '" + password +"'";
           /*
           上诉的写法称为拼串,需要拼写sql语句。--->不是一个完整的sql语句,存在sql注入的风险
            */

           User returnUser = get(sql, User.class);

           if (returnUser!=null){
               System.out.println("Successfully!");
          }else {
               System.out.println("UserName or PassWord Error!!!");
          }
      }

    创建驱动类:

        //这个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 {
               //关闭资源
               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();
                  }
              }
          }
           return null;
      }

     

    It's a lonely road!!!
  • 相关阅读:
    char , varchar和Nvarchar区别
    练习2-11 计算分段函数[2] (10 分)
    练习2-10 计算分段函数[1] (10 分)
    练习2-9 整数四则运算 (10 分)
    练习2-8 计算摄氏温度 (10 分)
    练习2-6 计算物体自由下落的距离 (5 分)
    练习2-4 温度转换 (5 分)
    练习2-3 输出倒三角图案 (5 分)
    MySQL之Xtrabackup备份与恢复
    MySQL中show语法
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15325587.html
Copyright © 2011-2022 走看看