• JDBC学习笔记


    一、JDBC介绍

    1、什么是JDBC

      JDBC(JavaDataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

    2、连接常用的接口

    提供的接口包括:JAVA API:提供对JDBC的管理链接;JAVA Driver API:支持JDBC管理到驱动器连接。
      

    • DriverManager :这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器被用来建立数据库连接。
        
    • Driver :此接口处理与数据库服务器通信。很少直接与驱动程序对象。相反,使用DriverManager中的对象,它管理此类型的对象。它也抽象的与驱动程序对象工作相关的详细信息。
        
    • Connection :此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。
        
    • Statement :可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。
        
    • ResultSet :这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,让你可以通过移动它的数据。

    3、JDBC驱动

      点击下载→mysql-connector-java-5.1.7.rar

      解压后把jar文件添加到项中即可

    二、使用JDBC的基本步骤

    1. 注册驱动
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    
    2. 建立连接
    //DriverManager.getConnection("jdbc:mysql://localhost/test?
    user=monty&password=greatsqldb");
    //2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。
    conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");
    
    3. 创建statement
    //3. 创建statement , 跟数据库打交道,一定需要这个对象
    st = conn.createStatement();
    
    4. 执行sql ,得到ResultSet
    //4. 执行查询 , 得到结果集
    String sql = "select * from t_stu";
    rs = st.executeQuery(sql);
    
    5. 遍历结果集
    //5. 遍历查询每一条记录
    while(rs.next()){
      int id = rs.getInt("id");
      String name = rs.getString("name");
      int age = rs.getInt("age");
      System.out.println("id="+id + "===name="+name+"==age="+age);
    }
    
    6. 释放资源
    if (rs != null) {
      try {
        rs.close();
      } catch (SQLException sqlEx) { } // ignore
      rs = null;
    }
    
    

    三、JDBC 工具类构建

    1、资源释放工作的整合

    package com.qidishixun.JDBCTest;
    
    import java.io.IOException;
    import java.sql.*;
    import java.util.Properties;
    
    public class JDBCUtils {
    
        public static void release(Connection conn,Statement st,ResultSet rs){
            closeRs(rs);
            closeSt(st);
            closeConn(conn);
        }
    
    
        private static void closeConn(Connection conn){
            if (conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }finally {
                    conn = null;
                }
            }
        }
    
        private static void closeSt(Statement st){
            if (st != null){
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }finally {
                    st = null;
                }
            }
        }
    
        private static void closeRs(ResultSet rs){
            if (rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }finally {
                    rs = null;
                }
            }
        }
    }
    
    
    package com.qidishixun.JDBCTest;
    
    import com.mysql.jdbc.Driver;
    
    import java.sql.*;
    
    public class JDBCDemo {
    
        public static void main(String[] args) {
    
            Connection conn = null;
            Statement st = null;
            ResultSet rs = null;
    
            try {
                Driver driver = new Driver();
    
                //1、注册驱动
                DriverManager.registerDriver(driver);
    
                //2、获取数据库连接
    
                conn = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase","root","123456");
    
                //3、通过连接对象创建 statement对象
                st = conn.createStatement();
    
                //4、执行 SQL 语句, 返回结果集对象
                String sql = "select * from student";
                rs = st.executeQuery(sql);
    
                //5、处理结果集
                while(rs.next()){
                    int sid = rs.getInt("sid");
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
    
                    System.out.println("sid = " + sid + ", name = " + name + ", age = " + age);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCUtils.release(conn,st,rs);
            }
        }
    }
    
    

    2、驱动防二次注册

    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    

      Driver 这个类里面有静态代码块,一上来就执行了,所以等同于我们注册了两次驱动。 其实没这个必要的。 //静态
    代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());最后形成以下代码即可。

    Class.forName("com.mysql.jdbc.Driver");
    

    3、使用properties配置文件

    • 1)在src底下声明一个文件 xxx.properties ,里面的内容如下:
    driverClass=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost/mydatabase?useUnicode=true&characterEncoding=utf8
    database=mydatabase
    user=root
    password=123456
    
    • 2)在工具类里面,使用静态代码块,读取属性
    package com.qidishixun.JDBCTest;
    
    import java.io.IOException;
    import java.sql.*;
    import java.util.Properties;
    
    public class JDBCUtils {
    
    
        public static String driverClass = null;
        public static String url = null;
        public static String user = null;
        public static String password = null;
        public static String database = null;
    
    
        static {
    
            try {
                Properties pro = new Properties();
                pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
    
                driverClass = pro.getProperty("driverClass");
                url = pro.getProperty("url");
                user = pro.getProperty("user");
                password = pro.getProperty("password");
                database = pro.getProperty("database");
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static Connection getConn(){
            Connection conn = null;
            try {
                Class.forName(JDBCUtils.driverClass);
                conn = DriverManager.getConnection(JDBCUtils.url,JDBCUtils.user,JDBCUtils.password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
    }
    
    
    • 3)测试:
    package com.qidishixun.JDBCTest;
    
    import com.mysql.jdbc.Driver;
    
    import java.sql.*;
    
    public class JDBCDemo2 {
        public static void main(String[] args) {
    
            Connection conn = null;
            Statement st = null;
            ResultSet rs = null;
    
            try {
                //注册驱动并获取连接诶
                conn = JDBCUtils.getConn();
    
                //3、通过连接对象创建 statement对象
                st = conn.createStatement();
    
                //4、执行 SQL 语句, 返回结果集对象
                String sql = "select * from student";
                rs = st.executeQuery(sql);
    
                //5、处理结果集
                while(rs.next()){
                    int sid = rs.getInt("sid");
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
    
                    System.out.println("sid = " + sid + ", name = " + name + ", age = " + age);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCUtils.release(conn,st,rs);
            }
        }
    }
    
    

    四、数据库的CRUD sql

      CRUD即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写

    • insert
    INSERT INTO student(NAME , age, gender , birth) VALUES ('wangqiang',28 , '女', '1988-5-4')
    INSERT INTO student VALUES (NULL,'wangqiang2',28)
    
    // 1. 获取连接对象
    conn = JDBCUtil.getConn();
    
    // 2. 根据连接对象,得到statement
    st = conn.createStatement();
    
    //3. 执行添加
    String sql = "insert into t_stu values(null , 'aobama' , 59)";
    
    //影响的行数, ,如果大于0 表明操作成功。 否则失败
    int result = st.executeUpdate(sql);
    if(result >0 ){
      System.out.println("添加成功");
    }else{
      System.out.println("添加失败");
    }
    
    • delete
    DELETE FROM student WHERE sid = 6
    
    // 1. 获取连接对象
    conn = JDBCUtil.getConn();
    
    // 2. 根据连接对象,得到statement
    st = conn.createStatement();
    
    //3. 执行添加
    String sql = "delete from t_stu where name='aobama'";
    
    //影响的行数, ,如果大于0 表明操作成功。 否则失败
    int result = st.executeUpdate(sql);
    if(result >0 ){
      System.out.println("删除成功");
    }else{
      System.out.println("删除失败");
    }
    
    • query
    SELECT * FROM student
    
    // 1. 获取连接对象
    conn = JDBCUtil.getConn();
    
    // 2. 根据连接对象,得到statement
    st = conn.createStatement();
    
    // 3. 执行sql语句,返回ResultSet
    String sql = "select * from t_stu";
    rs = st.executeQuery(sql);
    
    // 4. 遍历结果集
    while (rs.next()) {
      String name = rs.getString("name");
      int age = rs.getInt("age");
      System.out.println(name + " " + age);
    }
    
    • update
    UPDATE t_stu SET age = 38 WHERE id = 1;
    
    // 1. 获取连接对象
    conn = JDBCUtil.getConn();
    
    // 2. 根据连接对象,得到statement
    st = conn.createStatement();
    
    //3. 执行添加
    String sql = "update t_stu set age = 26 where name ='qyq'";
    
    //影响的行数, ,如果大于0 表明操作成功。 否则失败
    int result = st.executeUpdate(sql);
    if(result >0 ){
      System.out.println("更新成功");
    }else{
      System.out.println("更新失败");
    }
    

    五、使用单元测试,测试代码

    • 1、定义一个类, TestXXX , 里面定义方法 testXXX.
    • 2、添加junit的支持。
      右键工程 --- add Library --- Junit --- Junit4
    • 3、在方法的上面加上注解 , 其实就是一个标记。
    @Test
    public void testQuery() {
      ...
    }
    
      1. 光标选中方法名字,然后右键执行单元测试。 或者是打开outline视图, 然后选择方法右键执行。

    六、Dao模式

      Dao:Data Access Object 数据访问对象

    • 1、新建一个dao的接口, 里面声明数据库访问规则
    package com.qidishixun.JDBCTest;
    
    import java.util.List;
    
    /**
     * @author Gui
     * @description 定义数据库操作的规则
     * @date 2021/6/27
     */
    
    public interface UserDao {
    
        public void findAll();
    
        public List<User> findALL();
    
        public User findByID(int id);
    
        public void add(User user);
    
        public void addPreparedStatement(User user);
    
        public void update(User user);
    
        public void delete(int id);
    
    }
    
    

    2、新建一个dao的实现类,具体实现早前定义的规则

    package com.qidishixun.JDBCTest;
    
    import java.sql.*;
    import java.util.List;
    
    public class UserDaoImpl implements UserDao {
    
        @Override
        public void findAll() {
            Connection conn = null;
            Statement st = null;
            ResultSet rs = null;
    
    
            try {
                conn = JDBCUtils.getConn();
                st = conn.createStatement();
                rs = st.executeQuery("select * from student ");
    
                while(rs.next()){
                    int sid = rs.getInt("sid");
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
                    String gender = rs.getString("gender");
                    String birth = rs.getString("birth");
    
                    User user = new User();
                    user.setSid(sid);
                    user.setName(name);
                    user.setAge(age);
                    user.setGender(gender);
                    user.setBirth(birth);
                    System.out.println(user.toString());
                }
    
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
        }
    
        @Override
        public List<User> findALL() {
            return null;
        }
    
        @Override
        public User findByID(int id) {
            User user = null;
            Connection conn = null;
    //        Statement st = null;
            PreparedStatement pst = null;
    
            ResultSet rs = null;
    
            try {
                conn = JDBCUtils.getConn();
    
    //            st = conn.createStatement();
    //            String sql = "select * from student where sid=" + id;
    //            rs = st.executeQuery(sql);
    
                //使用占位符写法
                String sql = "select * from student where sid=?";
                pst = conn.prepareStatement(sql);
                pst.setInt(1,id);
                rs = pst.executeQuery();
    
    
    
                if (rs.next()){
                    int sid = rs.getInt("sid");
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
                    String gender = rs.getString("gender");
                    String birth = rs.getString("birth");
    
                    user = new User(sid,name,age,gender,birth);
                }
    
    
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.release(conn,pst,rs);
            }
    
    
            return user;
        }
    
        @Override
        public void add(User user) {
            Connection conn = null;
            Statement st = null;
    
            try {
                conn = JDBCUtil.getConn();
                st = conn.createStatement();
                String sql = "insert into student(name,age,gender,birth) " +
                        "values('" + user.getName() +"','" + user.getAge() +
                        "','" + user.getGender() + "','" + user.getBirth() + "')";
    
                System.out.println(sql);
                int result = st.executeUpdate(sql);
    
                if (result>0){
                    System.out.println("添加成功");
                }else {
                    System.out.println("添加失败");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCUtils.release(conn,st);
            }
    
        }
    
        @Override
        public void addPreparedStatement(User user) {
    
            Connection conn = null;
            PreparedStatement pst = null;
    
            try {
    
                String sql = "insert into student(name,age,gender,birth) values(?,?,?,?)";
                pst = conn.prepareStatement(sql);
                pst.setString(1,user.getName());
                pst.setInt(2,user.getAge());
                pst.setString(3,user.getGender());
                pst.setString(4,user.getBirth());
    
                int result = pst.executeUpdate();
    
                if (result>0){
                    System.out.println("添加成功");
                }else {
                    System.out.println("添加失败");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                JDBCUtils.release(conn,pst);
            }
    
        }
    
        @Override
        public void update(User user) {
            Connection conn = null;
            Statement st = null;
            try {
                conn = JDBCUtil.getConn();
                st = conn.createStatement();
                String sql = "update student set name='" +
                        user.getName() +"',age='" + user.getAge() +
                        "',gender='" + user.getGender() + "',birth='" + user.getBirth() + "' where sid='" + user.getSid() + "'";
    
                System.out.println(sql);
                int result = st.executeUpdate(sql);
                if (result>0){
                    System.out.println("更新成功");
                }else {
                    System.out.println("更新失败");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCUtils.release(conn,st);
            }
    
    
        }
    
        @Override
        public void delete(int id) {
            Connection conn = null;
            Statement st = null;
            try {
                conn = JDBCUtil.getConn();
                st = conn.createStatement();
                String sql = "delete from student where sid=" + id;
                System.out.println(sql);
                int result = st.executeUpdate(sql);
                if (result>0){
                    System.out.println("删除成功");
                }else {
                    System.out.println("删除失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.release(conn,st);
            }
    
        }
    }
    
    
    • 3、直接使用实现
    package com.qidishixun.JDBCTest;
    
    import org.junit.Test;
    
    import java.util.Iterator;
    import java.util.List;
    
    /**
     * UserDaoImpl Tester.
     *
     * @author <Authors Gui>
     * @since <pre>6月 27, 2021</pre>
     * @version 1.0
     */
    
    public class UserDaoImplTest {
    
        @Test
        public void testFindAll(){
            UserDao dao = new UserDaoImpl();
            dao.findAll();
        }
    
    
        @Test
        public void testFindByID(){
            UserDao dao = new UserDaoImpl();
            User user = dao.findByID(2);
            if (user == null){
                System.out.println("查询失败!");
            }else{
                System.out.println(user);
            }
        }
    
        @Test
        public void tsetAdd(){
            User user = new User("晓晓", 12, "女", "2008-12-21");
            UserDao dao = new UserDaoImpl();
            dao.add(user);
        }
    
    
        @Test
        public void testUpdate(){
            User user = new User(5, "大大", 15, "男", "2015-1-2");
            UserDao dao = new UserDaoImpl();
            dao.update(user);
        }
    
        @Test
        public void testDelete(){
            UserDao dao = new UserDaoImpl();
            dao.delete(9);
            dao.findAll();
        }
    }
    
    

    七、Statement安全问题

    • 1、Statement执行 ,其实是拼接sql语句的。 先拼接sql语句,然后在一起执行。
    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    
    conn = JDBCUtil.getConn();
    st = conn.createStatement();PrepareStatement
    
    String sql = "select * from user where username='" + username + "' and password='" + password + "' or 1=1";
    rs = st.executeQuery(sql);
    
    SELECT * FROM user WHERE username='admin' AND PASSWORD='12345644' or '1=1'
    

      前面先拼接sql语句, 如果变量里面带有了 数据库的关键字,那么一并认为是关键字。 不认为是普通的字符
    串。rs = st.executeQuery(sql);

    1、PrepareStatement

      该对象就是替换前面的statement对象。
      相比较以前的statement, 预先处理给定的sql语句,对其执行语法检查。 在sql语句里面使用 ? 占位符来替代
    后续要传递进来的变量。 后面进来的变量值,将会被看成是字符串,不会产生任何的关键字。

    String sql = "insert into t_user values(null , ? , ?)";
    ps = conn.prepareStatement(sql);
    //给占位符赋值 从左到右数过来,1 代表第一个问号, 永远你是1开始。
    ps.setString(1, userName);
    ps.setString(2, password);
    
    • UserDao
    package com.qidishixun.JDBCTest;
    
    import java.util.List;
    
    /**
     * @author Gui
     * @description 定义数据库操作的规则
     * @date 2021/6/27
     */
    
    public interface UserDao {
    
        public void findAll();
    
        public List<User> findALL();
    
        public User findByID(int id);
    
        public void add(User user);
    
        public void addPreparedStatement(User user);
    
        public void update(User user);
    
        public void delete(int id);
    
    }
    
    • UserDaoImpl1
    package com.qidishixun.JDBCTest;
    
    import java.sql.*;
    import java.util.List;
    
    public class UserDaoImpl implements UserDao {
    
        @Override
        public void findAll() {
      
        }
    
        @Override
        public List<User> findALL() {
            return null;
        }
    
        @Override
        public User findByID(int id) {
            User user = null;
            Connection conn = null;
    //        Statement st = null;
            PreparedStatement pst = null;
            ResultSet rs = null;
    
            try {
                conn = JDBCUtils.getConn();
    
    //            st = conn.createStatement();
    //            String sql = "select * from student where sid=" + id;
    //            rs = st.executeQuery(sql);
    
                //使用占位符写法
                String sql = "select * from student where sid=?";
                pst = conn.prepareStatement(sql);
                pst.setInt(1,id);
                rs = pst.executeQuery();
    
    
    
                if (rs.next()){
                    int sid = rs.getInt("sid");
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
                    String gender = rs.getString("gender");
                    String birth = rs.getString("birth");
    
                    user = new User(sid,name,age,gender,birth);
                }
    
    
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.release(conn,pst,rs);
            }
    
    
            return user;
        }
    
        @Override
        public void add(User user) {
        }
    
        /**
         * 使用占位符方法
         */
        @Override
        public void addPreparedStatement(User user) {
    
            Connection conn = null;
            PreparedStatement pst = null;
    
            try {
    
                String sql = "insert into student(name,age,gender,birth) values(?,?,?,?)";
                pst = conn.prepareStatement(sql);
                pst.setString(1,user.getName());
                pst.setInt(2,user.getAge());
                pst.setString(3,user.getGender());
                pst.setString(4,user.getBirth());
    
                int result = pst.executeUpdate();
    
                if (result>0){
                    System.out.println("添加成功");
                }else {
                    System.out.println("添加失败");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                JDBCUtils.release(conn,pst);
            }
    
        }
    
        @Override
        public void update(User user) {
           
        }
    
        @Override
        public void delete(int id) {
    
        }
    }
    
    
    • 单元测试:
    package com.qidishixun.JDBCTest;
    
    import org.junit.Test;
    
    import java.util.Iterator;
    import java.util.List;
    
    /**
     * UserDaoImpl Tester.
     *
     * @author <Authors Gui>
     * @since <pre>6月 27, 2021</pre>
     * @version 1.0
     */
    
    public class UserDaoImplTest {
    
        @Test
        public void testFindByID(){
            UserDao dao = new UserDaoImpl();
            User user = dao.findByID(2);
            if (user == null){
                System.out.println("查询失败!");
            }else{
                System.out.println(user);
            }
        }
    
        @Test
        public void tsetAddPreparedStatement(){
            User user = new User("默默", 15, "女", "2006-12-21");
            UserDao dao = new UserDaoImpl();
            dao.add(user);
        }
    
    }
    
    

    2、JDBC工具类的封装

    • JDBCTemplete
    package com.qidishixun.JDBCTest;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * @ClassName: JDBCTemplete
     * @Author Gui
     * @Date 2021/6/27
     * @Version 1.0
     */
    public class JDBCTemplete {
    
    
        public int update(String sql,Object...args){
    
            Connection conn = null;
            PreparedStatement pst = null;
            try {
                conn = JDBCUtils.getConn();
                pst = conn.prepareStatement(sql);
    
                //循环设置占位符
                for (int i=0;i<args.length;i++){
                    pst.setObject(i+1,args[i]);
                }
                return pst.executeUpdate();
    
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCUtils.release(conn,pst);
            }
    
            return -1;
        }
    
        public Object query(String sql,ResultSetHandler resultSetHandler,Object...args){
    
            Connection conn = null;
            PreparedStatement pst = null;
            ResultSet rs = null;
    
            try {
                conn = JDBCUtils.getConn();
                pst = conn.prepareStatement(sql);
    
                for (int i=0;i<args.length;i++){
                    pst.setObject(i+1,args[i]);
                }
    
                rs = pst.executeQuery();
                return resultSetHandler.doHandler(rs);
    
            } catch (SQLException e) {
                e.printStackTrace();
                return -1;
            }finally {
                JDBCUtils.release(conn,pst);
            }
        }
    
    }
    
    
    • ResultSetHandler
    package com.qidishixun.JDBCTest;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * @author Gui
     * @description 抽象结果集的处理
     * @date 2021/6/27
     */
    public interface ResultSetHandler {
    
        public Object doHandler(ResultSet rs)throws SQLException;
    }
    
    
    • 使用 JDBCTemplete
    package com.qidishixun.JDBCTest;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class UserDaoImpl2 implements UserDao {
    
        private JDBCTemplete jdbcTemplete;
    
        public UserDaoImpl2(){
            jdbcTemplete = new JDBCTemplete();
        }
    
        @Override
        public void findAll() {
    
        }
    
        @Override
        public List<User> findALL() {
            String sql = "select * from student";
    
            return (List<User>)jdbcTemplete.query(sql, new ResultSetHandler() {
                @Override
                public Object doHandler(ResultSet rs) throws SQLException {
    
                    List<User> users = new ArrayList<>();
                    while(rs.next()){
                        User user = new User();
                        user.setSid(rs.getInt("sid"));
                        user.setName(rs.getString("name"));
                        user.setAge(rs.getInt("age"));
                        user.setGender(rs.getString("gender"));
                        user.setBirth(rs.getString("birth"));
                        users.add(user);
                    }
                    return users;
                }
            });
        }
    
        @Override
        public User findByID(int id) {
            return null;
        }
    
        @Override
        public void add(User user) {
    
        }
    
        @Override
        public void addPreparedStatement(User user) {
    
        }
    
        @Override
        public void update(User user) {
            String sql = "update student set name=?,age=?,gender=? where sid=?";
            jdbcTemplete.update(sql,user.getName(),user.getAge(),user.getGender(),user.getSid());
        }
    
        @Override
        public void delete(int id) {
    
        }
    }
    
    
    • UserDaoImplTest
    package com.qidishixun.JDBCTest;
    
    import org.junit.Test;
    
    import java.util.Iterator;
    import java.util.List;
    
    /**
     * UserDaoImpl Tester.
     *
     * @author <Authors Gui>
     * @since <pre>6月 27, 2021</pre>
     * @version 1.0
     */
    
    public class UserDaoImplTest {
    
        @Test
        public void testFindAll(){
            UserDao dao = new UserDaoImpl();
            dao.findAll();
        }
    
        @Test
        public void testFindAllHandler(){
            UserDao dao = new UserDaoImpl2();
            List<User> users = dao.findALL();
    //        Iterator<User> iterator = users.iterator();
    //        while(iterator.hasNext()){
    //            System.out.println(iterator.next());
    //        }
    
            for (User user : users){
                System.out.println(user);
            }
        }
    
    
        @Test
        public void testFindByID(){
            UserDao dao = new UserDaoImpl();
            User user = dao.findByID(2);
            if (user == null){
                System.out.println("查询失败!");
            }else{
                System.out.println(user);
            }
        }
    
        @Test
        public void tsetAdd(){
            User user = new User("晓晓", 12, "女", "2008-12-21");
            UserDao dao = new UserDaoImpl();
            dao.add(user);
        }
    
        @Test
        public void tsetAddPreparedStatement(){
            User user = new User("默默", 15, "女", "2006-12-21");
            UserDao dao = new UserDaoImpl();
            dao.add(user);
        }
    
        @Test
        public void testUpdate(){
            User user = new User(5, "大大", 15, "男", "2015-1-2");
            UserDao dao = new UserDaoImpl();
            dao.update(user);
        }
    
        /**
         * 循环设置占位符更新数据
         */
        @Test
        public void testUpdateForPreSatatement(){
            User user = new User(8, "考卡", 15, "男", "2015-1-2");
            UserDao dao = new UserDaoImpl2();
            dao.update(user);
        }
    
    
        @Test
        public void testDelete(){
            UserDao dao = new UserDaoImpl();
            dao.delete(9);
            dao.findAll();
        }
    }
    
    
    作者:落花桂
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Android:简单联网获取网页代码
    nginx搭建前端项目web服务器以及利用反向代理调试远程后台接口
    ElementUI使用问题记录:设置路由+iconfont图标+自定义表单验证
    vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标
    Axios使用文档总结
    使用node中的express解决vue-cli加载不到dev-server.js的问题
    Vue脚手架(vue-cli)搭建和目录结构详解
    JS夯实基础:Javascript 变态题解析 (下)
    理解JS里的稀疏数组与密集数组
    JS夯实基础:Javascript 变态题解析 (上)
  • 原文地址:https://www.cnblogs.com/nthforsth/p/14941004.html
Copyright © 2020-2023  润新知