1.JDBC快速入门

1.JDBC快速入门,第1张

执行jdbc_data.sql文件(链接:https://pan.baidu.com/s/1kPsGzA8osTeGlKKHFzES6A 提取码:4izs)

1.JDBC概述

1.JDBC的概念:
JDBC是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Java语言编写的类和接口组成

2.JDBC的本质
其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接

2.JDNC快速入门程序

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

jar包下载官网:https://dev.mysql.com/downloads/file/?id=510648

1.导入jar包:
点击“File”然后点“Project Structure”

点击“Modules”,选择需要添加jar包的项目,点加号后选择第一个导入jar包

载入本地jar包后打钩确认

import java.sql.*;

public class JDBCDemo {
    public static void main(String[] args) throws Exception{
        //1.导入jar包
        //2.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //3.获取连接
        Connection con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/test", "root", "123456");

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

        //5.执行sql语句,并接受结果
        String sql = "select id,name from user";
        ResultSet rs = stat.executeQuery(sql);

        //6.处理结果
        while(rs.next()){
            System.out.println(rs.getInt("id") + '\t' + rs.getString("name"));
        }

        //7.释放资源
        con.close();
        stat.close();
        rs.close();
    }
}
3.JDBC功能详解 3.1 DriverManager

DriverManager驱动管理对象
① 注册驱动

  • 注册给定的驱动程序 static void registerDriver(Driver driver);
  • 写代码使用:Class.forName(“com.mysql.cj.jdbc.Driver”)
  • 在com.mysql.cj.jdbc.Driver类存在静态代码块
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }

注意:
1.我们不需要通过DriverManager调用静态方法registerDriver(),因为只要Driver类被使用,则汇之星其静态代码块完成注册驱动
2.mysql5之后可以省略注册驱动的步骤。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.cj.jdbc.Driver

② 获取数据库连接
获取数据库连接对象:static Connection getConnection(String url,String user,String password);
返回值:Connection数据库连接对象
参数:

  • url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
  • user:用户名
  • password:密码
3.2 Connection

Connection数据库连接对象
① 执行者对象
获取普通执行者对象:Statement createStatement();
获取预编译执行者对象:PreparedStatement prepareStatement(String sql);

② 管理事务
开启事务:setAutoCommit(boolean autoCommit); 参数为false,则开启事务
提交事务:commit();
回滚事务:rollback();

③ 释放资源
立即将数据库连接对象释放:void close();

3.3 Statement

Statement执行sql语句的对象
① 执行DML语句:int executeUpdate(String sql);
返回值int:返回影响的行数。
参数sql:可以执行insert、update、delete语句

② 执行DQL语句:ResultSet executeQuery(String sql);
返回值ResultSet:封装查询的结果
参数sql:可以执行select语句

③ 资源释放
立即将执行者对象释放:void close();

3.4 ResultSet

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

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

③ 资源释放
立即将执行者对象释放:void close();

案例需求

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

1.数据准备

#创建db14数据库
CREATE DATABASE db14;

#使用db14数据库
USE db14;

#创建student表
CREATE TABLE student(
	sid INT PRIMARY KEY AUTO_INCREMENT,	#学生id
	NAME VARCHAR(20),	#学生姓名
	age INT,	#学生年龄
	birthday DATE 	#学生生日
);

#添加数据
INSERT INTO student(NAME,age,birthday) 
VALUES('张三',23,'1999-09-23'),
('李四',24,'1998-08-10'),
('王五',25,'1997-06-06'),
('赵六',26,'1996-10-20');

2.创建Student类

public class Student{
    private Integer sid;
    private String name;
    private Integer age;
    private Date birthday;
}

注意:自定义类的功能是为了封装类汇总每列数据,成员变量和列保持一致
所有基本数据类型需要使用对应的包装类,一面表中null值无法赋值

3.需求实现
需求1:查询所有学生信息
需求2:根据id查询学生信息
需求3:新增学生信息
需求4:修改学生信息
需求5:删除学生信息

添加测试用的jar包(和添加jdbc的jar包一样)
下载jar包(junit.jar、hamcrest-core.jar)
https://github.com/junit-team/junit4/wiki/Download-and-Install

domain文件夹下(Student.java)

package jdbc01.domain;

import java.util.Date;

public class Student {
    private Integer sid;
    private String name;
    private Integer age;
    private Date birthday;

    public Student() {
    }

    public Student(Integer sid, String name, Integer age, Date birthday) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }
}

controller文件夹下(StudentController.java)

package jdbc01.controller;

import jdbc01.domain.Student;
import jdbc01.service.StudentService;
import jdbc01.service.StudentServiceImpl;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Date;

public class StudentController {
    private StudentService service = new StudentServiceImpl();

    //查询所有学生信息
    @Test
    public void findAll(){
        ArrayList<Student> list = service.findAll();
        for (Student stu : list) {
            System.out.println(stu);
        }
    }

    //条件查询,根据id查询学生信息
    @Test
    public void findById(){
        Student stu = service.findById(3);
        System.out.println(stu);
    }

    //添加学生信息
    @Test
    public void insert(){
        Student stu = new Student(5,"周七",27,new Date());
        int result = service.insert(stu);
        if(result!=0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
    }

    //修改学生信息
    @Test
    public void update(){
        Student stu = service.findById(5);
        stu.setName("周七七");

        int result = service.update(stu);

        if(result!=0){
            System.out.println("修改成功");
        }else{
            System.out.println("修改失败");
        }
    }

    //删除学生信息
    @Test
    public void delete(){
        int result = service.delete(5);

        if(result!=0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
    }
}

dao文件夹下(StudentDao.java,StudentDaoImpl.java)

package jdbc01.dao;

import jdbc01.domain.Student;

import java.util.ArrayList;

public interface StudentDao {
    //查询所有学生信息
    public abstract ArrayList<Student> findAll();

    //条件查询,根据id获取学生信息
    public abstract Student findById(Integer id);

    //新增学生信息
    public abstract int insert(Student stu);

    //修改学生信息
    public abstract int update(Student stu);

    //删除学生信息
    public abstract int delete(Integer id);
}


package jdbc01.dao;

import jdbc01.domain.Student;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class StudentDaoImpl implements StudentDao{
    //查询所有学生信息
    @Override
    public ArrayList<Student> findAll() {
        ArrayList<Student> list = new ArrayList<>();
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

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

            //4.执行sql语句,并接受返回的结果集
            String sql = "select * from student";
            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对象
                Student stu = new Student(sid, name, age, birthday);

                //将student对象保存到集合中
                list.add(stu);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //6.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return list;
    }

    //条件查询,根据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.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

            //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.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return stu;
    }

    //添加学生信息
    @Override
    public int insert(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result =0;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

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

            //4.执行sql语句,并接受返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
            String birthday = sdf.format(d);
            String sql = "insert into student values('"+stu.getSid()+"','"+stu.getName()+ "','"+stu.getAge()+"','"+birthday+"')";
            result = stat.executeUpdate(sql);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //5.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return result;
    }

    //修改学生信息
    @Override
    public int update(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result =0;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

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

            //4.执行sql语句,并接受返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyy-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 {
            //5.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return result;
    }

    //删除学生信息
    @Override
    public int delete(Integer id) {
        Connection con = null;
        Statement stat = null;
        int result =0;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

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

            //4.执行sql语句,并接受返回的结果集
            String sql = "delete from student where sid='"+id+"'";
            result = stat.executeUpdate(sql);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //5.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return result;
    }
}

service文件夹下(StudentService.java,StudentServiceImpl.java)

package jdbc01.service;

import jdbc01.domain.Student;

import java.util.ArrayList;

public interface StudentService {
    //查询所有学生信息
    public abstract ArrayList<Student> findAll();

    //条件查询,根据id获取学生信息
    public abstract Student findById(Integer id);

    //新增学生信息
    public abstract int insert(Student stu);

    //修改学生信息
    public abstract int update(Student stu);

    //删除学生信息
    public abstract int delete(Integer id);
}


package jdbc01.service;

import jdbc01.dao.StudentDao;
import jdbc01.dao.StudentDaoImpl;
import jdbc01.domain.Student;

import java.util.ArrayList;

public class StudentServiceImpl implements StudentService{
    private StudentDao dao = new StudentDaoImpl();

    //查询所有学生信息
    @Override
    public ArrayList<Student> findAll() {
        return dao.findAll();
    }

    //条件查询,根据id查询学生信息
    @Override
    public Student findById(Integer id) {
        return dao.findById(id);
    }

    //添加学生信息
    @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);
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/917294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存