jdbc基础功能类详解与简单操作

JDBC基础

JDBC的基本步骤

1.导入jar包
2.注册驱动
3.获取数据库连接
4.获取数据库执行对象
5.执行sql语句
6.处理结果
7.释放资源

JDBC功能类详解

DriverManager 驱动管理对象

在com.mysql.jdbc.Driver有静态代码块,直接加载类就可亿创建一个driver对象

 static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }

Connection 数据库连接对象

  1. 执行者对象
    获取普通执行者对象:Statment createStatement();
    获取预编译执行者对象:PreparedStatement prepareStatement(string sql);
  2. 管理事务
    开启事务:setAutoCommit(boolean autoCommit);参数为false,则开启事务
    提交事务:commit();
    回滚事务:rollback();
  3. 释放资源
    立即将数据库连接对象释放:void close

Statment 执行sql语句的对象

  1. 执行DML语句
    int executeUpdate(Strig sql);
    返回值int:返回影响的行数。
    参数sql:可以执行insert、update、delete语句
  2. 执行DQL语句
    返回值ResultSet:封装查询的结果。
    参数sql:可以执行select语句
  3. 释放资源
    立即将执行者对象释放:void close();

ResultSet 结果集对象

  1. 判断结果集中是否还有数据:boolean next();
    有数据返回true,并将索引向下移动一行。
    没有数据返回false。

  2. 获取结果集中的数据:XXX getXXX(“列名”);
    XXX代表数据类型(要获取某列数据,这一列的数据类型)。
    例如:String getString(“name”); int getInt(“age”);

使用JDBC完成对student表的CRUD操作

详细图解
先连接数据库,创建执行数据库对象,执行sql语句,获取返回结果对象集,解析
1.导入jar包
在这里插入图片描述
2.数据准备和创建不同的层级
在这里插入图片描述
3.dao层

public interface StudentDao {

    public abstract ArrayList<Student> findAll();

    public abstract Student findByid(Integer id);

    public abstract int insert(Student stu);

    public abstract int update(Student stu);

    public abstract int delete(Integer id);
}
public class StudentDaoImpl implements StudentDao {
    /*
        查询所有学生信息
     */
    @Override
    public ArrayList<Student> findAll() {
        ArrayList<Student> stu = new ArrayList<>();

        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;

        try {
            /*//1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取链接
            con = DriverManager.getConnection("jdbc:mysql://192.168.93.128:3306/db14", "root", "root");*/
            con = JDBCUtils.getConnection();
            //3.获取执行者对象
            stat = con.createStatement();
            //4.执行sql语句,并接受返回结果
            rs = stat.executeQuery("SELECT * FROM student");
            //5.处理结果集
            while (rs.next()){
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
                Student student = new Student(sid, name, age, birthday);
                //将student添加到集合中
                stu.add(student);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(con,stat,rs);
        }
        return stu;
    }

    /*
        条件查询,根据id查询学生信息
     */
    @Override
    public Student findByid(Integer id) {
        Student stu = new Student();
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try{

            /*//1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取链接
            con = DriverManager.getConnection("jdbc:mysql://192.168.93.128:3306/db14", "root", "root");*/
            con = JDBCUtils.getConnection();
            //3.获取执行者对象
            stat = con.createStatement();
            //4.执行sql语句,并且接收返回的结果集
            String sql = "SELECT * FROM student WHERE sid='"+id+"'";//字符串才需要单引号
            rs = stat.executeQuery(sql);

            //5.处理结果集
            while(rs.next()) {
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");

                //封装Student对象
                stu.setSid(sid);
                stu.setName(name);
                stu.setAge(age);
                stu.setBirthday(birthday);
            }

        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            JDBCUtils.close(con,stat,rs);
        }
        //将对象返回
        return stu;
    }

    /*
        添加学生信息
     */
    @Override
    public int insert(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try{
            con = JDBCUtils.getConnection();

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并且接收返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(d);
            String sql = "INSERT INTO student VALUES ('"+stu.getSid()+"','"+stu.getName()+"','"+stu.getAge()+"','"+birthday+"')";
            System.out.println(sql);
            result = stat.executeUpdate(sql);

        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            JDBCUtils.close(con,stat);
        }
        //将结果返回
        return result;
    }

    /*
        修改学生信息
     */
    @Override
    public int update(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try{
            con = JDBCUtils.getConnection();

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并且接收返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(d);
            String sql = "UPDATE student SET sid='"+stu.getSid()+"',name='"+stu.getName()+"',age='"+stu.getAge()+"',birthday='"+birthday+"' WHERE sid='"+stu.getSid()+"'";
            result = stat.executeUpdate(sql);

        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            JDBCUtils.close(con,stat);
        }
        //将结果返回
        return result;
    }

    /*
        删除学生信息
     */
    @Override
    public int delete(Integer id) {
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try{
            con = JDBCUtils.getConnection();

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并且接收返回的结果集
            String sql = "DELETE FROM student WHERE sid="+id;
            result = stat.executeUpdate(sql);

        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            JDBCUtils.close(con,stat);
        }
        //将结果返回
        return result;
    }
}

4.service层

public interface StudentService {
    public abstract ArrayList<Student> findAll();
    
    public abstract Student findByid(Integer sid);

    public abstract int insert(Student stu);

    public abstract int update(Student stu);

    public abstract int delete(Integer id);
}
public class StudentServiceImpl implements StudentService{
    private StudentDao dao=new StudentDaoImpl();
    //查询所有学生信息
    public ArrayList<Student> findAll(){

        return dao.findAll();
    }

    @Override
    public Student findByid(Integer sid) {
        return dao.findByid(sid);
    }

    @Override
    public int insert(Student stu) {
        return dao.insert(stu);
    }

    @Override
    public int update(Student stu) {
        return dao.update(stu);
    }

    @Override
    public int delete(Integer id) {
        return dao.delete(id);
    }
}

5.web层

public class StudentController {
    private StudentServiceImpl service=new StudentServiceImpl();
    @Test
    public void findAll(){
        ArrayList<Student> students = service.findAll();
        for(Student stu:students){
            System.out.println(stu);
        }
    }

    @Test
    public void findByid(){
        Student student=service.findByid(2);
        System.out.println(student);
    }

    @Test
    public void insert(){
        Student student = new Student(5, "xiaosan", 27, new Date());
        int i = service.insert(student);
        if(i!=0){
            System.out.println("添加成功");
        }else {
            System.out.println("添加失败");
        }
    }

    @Test
    public void updata(){
        Student student = new Student(5, "小三", 24, new Date());
        int i = service.update(student);
        if(i!=0){
            System.out.println("修改成功");
        }else {
            System.out.println("修改失败");
        }
    }

    @Test
    public void delete(){
        int i = service.delete(5);
        if(i!=0){
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }
    }
}

程序的不足

有sql注入攻击的风险
解决方法:PreparedStatement预编译执行者对象。

猜你喜欢

转载自blog.csdn.net/weixin_42478562/article/details/106756595