JDBC实现对数据库的增删查改

1、如何使用JDBC ✨

🌹主要由这八个步骤实现:

① 注册驱动
② 获取连接
③ 编写SQL语句
④ 创建preparedstatement并且传入SQL语句结构
⑤ 占位符赋值
⑥ 发送SQL语句,并且获取结果
⑦ 结果集解析
⑧ 关闭资源

//1.注册驱动
方案1: 调用静态方法,但是会注册两次
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
方案2: 反射触发
Class.forName("com.mysql.cj.jdbc.Driver");

//2.获取连接
Connection connection = DriverManager.getConnection();

三种getConnection连接方式
3个参数 (String url,String user,String password)
2个参数 (String url,Properties info(user password))
1个参数 (String url?user=账号&password=密码 )

//3.编写sql语句
String sql = "sql语句结构";

//4.创建statement
//静态(可以被注入攻击)
Statement statement = connection.createStatement();
//预编译(建议)
PreparedStatement preparedstatement = connection.preparedStatement(sql);

//5.占位符赋值
preparedstatement.setObject(?的位置 从左到右 从1开始,)

//6.发送sql语句获取结果
int rows = executeUpdate(); //非DQL
Resultset = executeQuery(); //DQL

//7.查询结果集解析

//移动光标指向行数据 next();  if(next())  while(next())
//获取列的数据即可   get类型(int 列的下角标 从1开始 | int 列的label (别名或者列名))
//获取列的信息   getMetadata(); ResultsetMetaData对象 包含的就是列的信息
                getColumnCount(); | getCloumnLebal(index)

//8.关闭资源
close(); 

2、对数据库进行增删查改

🎈【1】添加数据

@Test
public void testInsert() throws ClassNotFoundException, SQLException {
    //插入一条 (xiebo, 777777, 软件设计师)
    
    //1.注册驱动
    Class.forName("com.mysql.cj.jdbc.Driver");
    //2.连接
    Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
    //3.sql
    String sql = "insert into t_user(account, password, nickname) values(?,?,?);";
    //4.预处理
    PreparedStatement ps = conn.prepareStatement(sql);
    //5.占位符填充
    ps.setObject(1, "xiebo");
    ps.setObject(2, "777777");
    ps.setObject(3, "软件设计师");
    //6.发送sql, 返回改变行数
    int row = ps.executeUpdate();
    //7.解析
    if (row > 0) System.out.println("插入成功");
    else System.out.println("插入失败");
    //8.释放资源
    ps.close();
    conn.close();
}

🎈【2】修改数据

@Test
public void testUpdate() throws Exception {
    //修改id=3的password为111
    
    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
    
    String sql = "update t_user set password=? where id=?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setObject(1, "111");
    ps.setObject(2, 3);
    
    int row = ps.executeUpdate();
    if (row > 0) System.out.println("修改成功");
    else System.out.println("修改失败");
    
    ps.close();
    conn.close();
}

🎈【3】删除数据

@Test
public void testDelete() throws Exception {
    //删除id=3的数据
    
    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
    
    String sql = "delete from t_user where id=?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setObject(1, 3);
    
    int row = ps.executeUpdate();
    if (row > 0) System.out.println("删除成功");
    else System.out.println("删除失败");
    
    ps.close();
	conn.close();
}

🎈【4】查询数据

@Test
public void testSelect() throws Exception {
    // 将每行的列:值映射装到Map的key:value中,再把所有行装入List,使用List<Map>存放查询数据
    
    //注册驱动,建立连接
    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
    
    //预处理SQL
    String sql = "select id, account as ac from t_user";
    PreparedStatement ps = conn.prepareStatement(sql);
    //发送SQL并返回结果集
    ResultSet resultSet = ps.executeQuery();

    //创建保存数据的集合
    List<Map> list = new ArrayList<>();
    //获取列的信息对象
    //todo: metaData 装的当前结果集列的信息对象
    ResultSetMetaData metaData = resultSet.getMetaData();
    //得到列的数量
    int colNum = metaData.getColumnCount();
    
    //按行解析结果集
    while(resultSet.next()) {
        Map map = new HashMap();
        //自动解析列
        for (int i = 1; i <= colNum; i++) {
            //获取列名
            String colName = metaData.getColumnLabel(i);
            //获取列值
            Object value = resultSet.getObject(i); 
            //放入map
            map.put(colName, value);
        }
        
        list.add(map);
    }

    System.out.println(list);
    
    //关闭资源
    resultSet.close();
    ps.close();
    conn.close();
}

3、完整代码

package com.atguigu.connection;

import org.junit.Test;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PSCrudPart {
    @Test
    public void testInsert() throws ClassNotFoundException, SQLException {
        //插入一条 (xiebo, 777777, 软件设计师)
        
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.连接
        Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
        //3.sql
        String sql = "insert into t_user(account, password, nickname) values(?,?,?);";
        //4.预处理
        PreparedStatement ps = conn.prepareStatement(sql);
        //5.占位符填充
        ps.setObject(1, "xiebo");
        ps.setObject(2, "777777");
        ps.setObject(3, "软件设计师");
        //6.发送sql, 返回改变行数
        int row = ps.executeUpdate();
        //7.解析
        if (row > 0) System.out.println("插入成功");
        else System.out.println("插入失败");
        //8.释放资源
        ps.close();
        conn.close();
    }
    
    @Test
    public void testUpdate() throws Exception {
        //修改id=3的password为111
        
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
        
        String sql = "update t_user set password=? where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setObject(1, "111");
        ps.setObject(2, 3);
        
        int row = ps.executeUpdate();
        if (row > 0) System.out.println("修改成功");
        else System.out.println("修改失败");
        
        ps.close();
        conn.close();
    }
    
    @Test
    public void testDelete() throws Exception {
        //删除id=3的数据
        
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
        
        String sql = "delete from t_user where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setObject(1, 3);
        
        int row = ps.executeUpdate();
        if (row > 0) System.out.println("删除成功");
        else System.out.println("删除失败");
    }
    
    @Test
    public void testSelect() throws Exception {
        // 将每行的列:值映射装到Map的key:value中,再把所有行装入List,使用List<Map>存放查询数据
        
        //注册驱动,建立连接
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
        
        //预处理SQL
        String sql = "select id, account as ac from t_user";
        PreparedStatement ps = conn.prepareStatement(sql);
        //发送SQL并返回结果集
        ResultSet resultSet = ps.executeQuery();

        //创建保存数据的集合
        List<Map> list = new ArrayList<>();
        //获取列的信息对象
        //todo: metaData 装的当前结果集列的信息对象
        ResultSetMetaData metaData = resultSet.getMetaData();
        //得到列的数量
        int colNum = metaData.getColumnCount();
        
        //按行解析结果集
        while(resultSet.next()) {
            Map map = new HashMap();
            //自动解析列
            for (int i = 1; i <= colNum; i++) {
                //获取列名
                String colName = metaData.getColumnLabel(i);
                //获取列值
                Object value = resultSet.getObject(i); 
                //放入map
                map.put(colName, value);
            }
            
            list.add(map);
        }

        System.out.println(list);
        
        //关闭资源
        resultSet.close();
        ps.close();
        conn.close();
    }
    
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值