JDBC——增删改查

@[TOC]JDBC——增删改查

本篇将介绍JDBC源码对数据库的基本操作——增删改查

一、未封装的JDBC数据库操作源码,增删改查四个操作每一个都必须要经历7个步骤,分别为:
(1)加载数据库
(2)创建数据库连接
(3)准备数据库sql语句
(4)处理sql语句
(5)得到产生的结果
(6)处理结果
(7)释放加载的资源

一、未对连接进行封装的JDBC数据库操作源码,注释都写在里面哦,很容易就能看懂,源码如下:

//1.查询tb_user这张表中的数据
public static void printAllUser() {
    try {
        //(1)加载数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        //(2)创建数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=uft8","root","123456");
        System.out.println("数据库连接成功!");

        //(3)准备写出sql语句
        String sql = "select * from tb_user";
        //(4)选中语句并执行它
        PreparedStatement pstm = conn.prepareStatement(sql);
        //(5)产生结果
        ResultSet rs = pstm.executeQuery();
        //(6)处理结果
        while(rs.next()) {
            System.out.println("用户编号"+rs.getInt(1)+",用户名称"+rs.getString(2)+",用户密码"+rs.getString(3));
        }
        //(7)释放连接
        rs.close();
        pstm.close();
        conn.close();
    }catch (Exception e){
        e.printStackTrace();
    }
}
//2.新增数据
public static void addUser(){
    try {
        //(1)加载数据库成功
        Class.forName("com.mysql.jdbc.Driver");//反射:reflect - 封装,要想得到封装具体细节,需要用反射机制来获取
        //(2)创建数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true$characterEncoding=uft8","root","123456");
        System.out.println("数据库连接成功!");
        //(3)准备SQL语句
        String sql = "insert into tb_user values(null,?,?,?)";
        //(4)处理SQL语句
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setString(1,"陈潇猫");
        pstm.setString(2,"961215");
        pstm.setInt(3,1);
        //(5)产生结果
        int num = pstm.executeUpdate();
        //(6)处理结果
        System.out.println("新增成功<"+num+">受到影响");
        //(7)释放资源
        pstm.close();
        conn.close();
    }catch (Exception e) {
        e.printStackTrace();
        }
     }

//3.删除数据
public static void delUser() {
    try {
        //(1)加载数据库
        Class.forName("com.mysql.jdbc.Driver");   //反射:reflect -  封装,想要得到具体细节,需要用反射机制来获取

        //(2)创建数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");
        System.out.println("数据库连接成功!");

        //(3)准备数据库语句
        String sql = "delete from tb_user where uid=2";
        //(4)处理SQL语句
        PreparedStatement pstm = conn.prepareStatement(sql);
        /*Statement stmt = conn.createStatement(); */   //创建Statement对象
        //(5)产生结果
        int num = pstm.executeUpdate();
        //(6)处理结果
        System.out.println("删除成功<"+num+">受到影响");
        //(7)释放资源
        pstm.close();
        conn.close();

    }catch (Exception e) {
        e.printStackTrace();
    }
}

//4.更改用户信息
public static void updUser() {
    Scanner in = new Scanner(System.in);
    try {
        //(1)加载数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        //(2)建立数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");

        System.out.println("请输入更新后的用户编号:");
        int uid = in.nextInt();

        System.out.println("请输入更新后的用户名称:");
        String username = in.next();

        System.out.println("请输入更新后的用户密码:");
        String userPassword = in.next();

        System.out.println("请输入更新后的用户类型:");
        int tid = in.nextInt();
        //(3)准备sql语句
        String sql = "update tb_user set username=?,userpassword=?,tid=? where uid=?";
        //(4)执行sql语句
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setString(1,username);
        pstm.setString(2,userPassword);
        pstm.setInt(3,tid);
        pstm.setInt(4,uid);
        //(5)产生结果
       /* ResultSet rs = pstm.executeQuery();*/
        int num = pstm.executeUpdate();
        //(6)执行结果
        System.out.println("修改成功<"+num+">行受影响");
        //释放连接
        pstm.close();
        conn.close();
    }catch (Exception e) {
        e.printStackTrace();
    }
}
//5.模糊查询
public static void fuzzyQuery(){
    try {
        //(1)加载数据库
        Class.forName("com.mysql.jdbc.Driver");
        //(2)创建数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");
        System.out.println("数据库连接成功!");
        //(3)准备sql语句
        String sql = "select * from tb_user where username like '%猫%'";
        //(4)处理sql语句
        PreparedStatement pstm = conn.prepareStatement(sql);
        //(5)产生结果
        ResultSet rs = pstm.executeQuery();
        //(6)处理结果
        while (rs.next()) {
            System.out.println("用户编号"+rs.getInt(1)+",用户名称"+rs.getString(2)+",用户密码"+rs.getString(3));
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
}

//6.精准查询
public static void selOneById(){
    try {
        //(1)加载数据库
        Class.forName("com.mysql.jdbc.Driver");
        //(2)创建数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");
        System.out.println("数据库连接成功!");
        //(3)准备sql语句
        String sql = "select * from tb_user where uid=10";
        //(4)处理sql语句
        PreparedStatement pstm = conn.prepareStatement(sql);
        //(5)产生结果
        ResultSet rs = pstm.executeQuery();
        //(6)处理结果
        while (rs.next()) {
            System.out.println("用户编号"+rs.getInt(1)+",用户名称"+rs.getString(2)+",用户密码"+rs.getString(3));
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
}

二、可以看到以上代码中每一种方法的编写都会重复使用数据库连接,在大量的数据库操作过程中,重复使用是会造成代码冗余并且影响速度,下面可以把数据库连接封装成一个函数,在每个方法中调用,封装函数代码如下:

//封装连接数据库
public Connection  getConn() {
    String driver = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=uft8";
    String root = "root";
    String password = "123456";
    try {
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url,root,password);
        return conn;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

可以用getConn()函数替换掉每个方法中连接数据库的代码,这样就简化了代码,减少代码量,是整体看起来更清晰。
三、使用文档式调用静态资源实现数据库连接,原理很简单,就是将连接数据库的几个参数存放在properties文件里面。通过静态方法调用它,去除其中的参数,与直接写上去并无差别,不过写上去更直接,调用静态资源有个很大的优点是如果需要修改参数,不需要去找java代码,这就能为不懂java代码的人修改参数带来会很大的便利,properties文件可以写成如下:

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8
jdbcuser = root
password = 123456

调用方式如下:

//1.数据库连接的获取

public static String driver;
public static String url;
public static String jdbcuser;
public static String password;

public static Properties properties = new Properties();

//获取db.properties资源,static方法代表软件一打开就会自动加载资源文件
static {
    try {
        properties.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));

        driver =  properties.getProperty("driver");
        url = properties.getProperty("url");
        jdbcuser = properties.getProperty("jdbcuser");
        password = properties.getProperty("password");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

//1.实现数据库连接的获取
public Connection getConn() {

    try {
        Class.forName(driver);
        conn = DriverManager.getConnection(url,jdbcuser,password);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return conn;
}

以上实现了数据库的连接,很清晰方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值