使用JDBC对mysql数据库实现增删改查

1.JDBC

1.1 JDBC定义

        JDBC(java database connectivity)是Java数据库连接技术的简称,提供使用JAVA连接各种常用数据库的能力。

1.2 为什么需要JDBC

        JDBC提供了一套使用JAVA连接数据库的能力,换句话说,只有使用JDBC才能使得JAVA程序与数据库进行数据交互。在实际应用场景中,还需要加入JSP/Servlet应用服务器,作为客户端与数据库服务器的中介,实现客户端对数据库的访问。

1.3 JDBC的工作原理

1 使用JAVA连接数据库的步骤
步骤1:java应用程序编写代码
步骤2:调用JDBC API接口或是类
步骤3:加载JDBC的驱动(jar包)
步骤4:调用数据库并测试

2 常用JDBC API接口或类的种类(java.sql与javax.sql包中)
(1)DriverManager类
(2)Connection接口
(3)Statement接口
(4)ResultSet接口

3 JDBC的驱动由不同的数据库厂商提供

1.4 JDBC API

DriverManager:依据数据库的不同,管理JDBC驱动
Connection:
负责连接数据库并担任传送数据的任务  
Statement:由 Connection 产生、负责执行SQL语句
ResultSet:
负责保存Statement执行后所产生的查询结果

执行顺序:通过DriverManager管理驱动,创建连接Connection对象,调用Statement对象执行SQL语句,调用ResultSet对象保存查询结果

1.5 JDBC的编程模板

2. 使用JDBC实现增删改查

2.1 增加(插入)

public class Test {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册mysql驱动
        //mysql5驱动 com.mysql.jdbc.Driver
        //mysql8驱动 com.mysql.cj.jdbc.Driver
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.管理连接
        //3个字符串参数:url="jdbc:mysql://主机ip:端口号/数据库名",user="用户名",password="密码"
        Connection conn =
                DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");

        //3.设置SQL语句字符串,value中使用?作为占位符
        String sql = "insert into t_user(name,pwd,height) values(?,?,?)";

        //4.创建PreparedStatement对象,调用连接对象的prepareStatement()方法,sql语句字符串作为方法参数
        PreparedStatement ps = conn.prepareStatement(sql);

        //5.给ps对象中每个占位符赋值,使用setObject()方法,序号表示第几个占位符,从1开始
        ps.setObject(1,"张三");
        ps.setObject(2,"123456");
        ps.setObject(3,165);

        //执行语句
        ps.executeUpdate();

        //关闭资源
        ps.close();
        conn.close();
    }
}

t_user原本是一张空表

2.2 删除

public class Test {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn =
                DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
        String sql = "delete from t_user where id = ?";

        PreparedStatement ps = conn.prepareStatement(sql);

        ps.setObject(1,1);
        ps.executeUpdate();

        ps.close();
        conn.close();
    }
}

2.3 修改

public class Test {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn =
                DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
        String sql = "update t_user set name=?,pwd=?,height=? where id = ?";

        PreparedStatement ps = conn.prepareStatement(sql);

        ps.setObject(1,"李四");
        ps.setObject(2,"1234");
        ps.setObject(3,167);
        ps.setObject(4,2);

        ps.executeUpdate();

        ps.close();
        conn.close();
    }
}

修改前: 

修改后:

2.4 查询

        查询之前需要先创建一个拥有对应属性的类

public class User {
    private Integer id;
    private String name;
    private String pwd;
    private Double height;
    //封装的构造器和getter,setter方法省略
}

2.4.1 全部查询

public class Test {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
        String sql = "select * from t_user";
        PreparedStatement ps = conn.prepareStatement(sql);
        //得到查询返回的集合
        ResultSet rs = ps.executeQuery();
        //取出查询集合的值
        User user = null;
        List<User> list = new ArrayList<>();
        while(rs.next()){
            user = new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setPwd(rs.getString("pwd"));
            user.setHeight(rs.getDouble("height"));
            list.add(user);
        }
        rs.close();
        ps.close();
        conn.close();
        //遍历User集合
        for (User u:list) {
            System.out.println("id="+u.getId());
            System.out.println("name="+u.getName());
            System.out.println("pwd="+u.getPwd());
            System.out.println("height="+u.getHeight());
        }
    }
}

查询的表内容:

查询结果:

2.4.2 模糊查询(添加try/catch)

public class Test {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps =null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
            ps = conn.prepareStatement(
                    "select id,name,height " +
                    "from t_user " +
                    "where name like concat('%',?,'%')" +
                    "order by id desc"
            );
            ps.setObject(1,"张");
            rs = ps.executeQuery();
            User user = null;
            List<User> list = new ArrayList<>();
            while(rs.next()){
                user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setHeight(rs.getDouble("height"));
                list.add(user);
            }
            for (int i = 0; i < list.size(); i++) {
                System.out.println("id:"+list.get(i).getId());
                System.out.println("姓名:"+list.get(i).getName());
                System.out.println("身高:"+list.get(i).getHeight());
                System.out.println();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                rs.close();
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

查询结果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值