• JDBC编程


    在这里插入图片描述

    🎉🎉🎉写在前面:
    博主主页:🌹🌹🌹戳一戳,欢迎大佬指点!
    博主秋秋:QQ:1477649017 欢迎志同道合的朋友一起加油喔💪
    目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个小菜鸟嘿嘿
    -----------------------------谢谢你这么帅气美丽还给我点赞!比个心-----------------------------

    在这里插入图片描述



    一,前期准备

    1,数据库,如MySQL,Oracle,SQL Server。

    2,编程语言,这里使用的是java来操作数据库。

    3,数据库驱动包,不同的数据库,针对不同的编程语言,会提供不同的驱动包。


    在这里插入图片描述


    二,什么是JDBC

    JDBC,全称为Java Database Connectivity ,java数据库连接。它是一种用于执行SQL语句的Java API,是Java对于数据库操作的一个官方API。

    因为每个数据库的原生API都是不一样的,对于我们程序员而言,不可能说是对于每一种数据库的API都去掌握,那样学习成本会很大,开发成本也会很高。所以Java就推出了这么一个Java对于数据库连接的一个标准,让那些数据库公司去适配,这样统一规范之后,用起来就会方便很多。

    不过对于不同的数据库,我们需要提供不同的驱动程序。这个驱动程序就相当于一个转接头,能够将我们的JDBC转换到我们这个数据库的原生API上。


    三,JDBC使用

    首先打开你的服务器,把你的数据库以及表准备好,然后就可以开始在你的IDEA上进行编写代码了。

    (1)创建数据源对象

    在这里插入图片描述


    MysqlDataSource mysqlDataSource = new MysqlDataSource();
    
    • 1

    这里其实你如果用这种方法创建数据源对象也是可以的,直接用实现类的引用接收。只不过这种方法对于后期的扩展维护成本比较高,反观如果是利用JDBC里面的DataSourse接口的引用接受的话,后面如果是想换一个种类的数据库操作,只需要把这里具体的实现类改一下就好了,需要动的代码不多。


    (2)设置URL

    在这里插入图片描述


    设置完URL之后,相当于就将我们的数据库服务器的地址以及数据库的名字这些相关信息写到了我们的数据源对象里面去了。根据我们的数据源就知道我们的数据库在哪。


    (3)设置用户名,密码

    在这里插入图片描述


    用户名与密码就相当于是进入我们数据库的钥匙,用户名统一都root用户,密码就是你自己设置的密码。当然如果没有密码就是空字符串。


    (4)与数据库建立连接

    在这里插入图片描述

    只不过这里需要处理一下这个受查异常,可以选择利用throws声明,或者是try catch进行包裹。受查异常必须要显示进行处理,不然编译都过不了。

    注意:这个Connection要使用我们标准库 java.sql里面的,不要使用驱动包里面的。在我们整个JDBC变成的过程中,特别要注意导包一定要导入对

    这个时候就可以开始将程序跑起来进行数据库的连接了,前期注意要先把数据库开启,该建的数据库也建好。当然也有可能出问题,例如:

    在这里插入图片描述

    这种情况就是用户名或者是密码错了。注意要仔细检查。


    这里可能有人会问,自己电脑没有联网,不是说是通过网络和数据库进行连接的嘛。确实是通过网络和数据库连接,但是那是客户端和数据库服务器不在一个主机上,现在我们是通过环回IP来连接的,和连不连外面的网没有任何关系。


    (5)构造SQL语句(构造请求)

    在这里插入图片描述


    (6)执行代码(发送请求)

    在这里插入图片描述


    (7)关闭资源

    在这里插入图片描述


    我们的语句对象preparedStatement以及连接对象connection都是要占用资源的,只不过在释放资源的时候,我们要注意,释放资源的顺序与我们开启资源的顺序刚好是反过来的。


    (8)代码(这里以insert操作为例)
    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.Scanner;
    
    //jdbc:mysql://127.0.0.1:3306/javaTest?characterEncoding=utf8&useSSL=false
    public class JDBCInsert {
        //通过JDBC来操作数据库,往数据库里面插入一条数据
        //数据库 javaTest 表 student
        public static void main(String[] args) throws SQLException {
            //1,创建数据源对象。数据源对象描述了我们的数据库是哪一个,在哪
            DataSource dataSource = new MysqlDataSource();
            ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/javaTest?characterEncoding=utf8&useSSL=false");
            ((MysqlDataSource) dataSource).setUser("root");
            ((MysqlDataSource) dataSource).setPassword("88888888");
    
            //2,让代码与我们的数据库建立连接
            Connection connection = dataSource.getConnection();
            //System.out.println(connection);
    
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入你想要插入的学生的id:");
            int id = scan.nextInt();
            System.out.println("请输入你想要插入的学生的name:");
            String name = scan.next();
    
            //3,构造要执行的sql语句
            String sql1 = "insert into student values(?,?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql1);
            preparedStatement.setInt(1,id);
            preparedStatement.setString(2,name);
    
    
            int result = preparedStatement.executeUpdate();
            System.out.println(result);
    
            //4,释放相关资源
            preparedStatement.close();
            connection.close();
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    【查询操作:】

    String sql = "select * from student";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
    ResultSet set = preparedStatement.executeQuery();
    
    while(set.next()){
        int id = set.getInt("id");
        String name = set.getString("name");
        System.out.println("id = " + id + " " + "name = " + name);
    }
    
    set.close();
    preparedStatement.close();
    connection.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这里要单独说一下查询操作,因为他和前面的增删改有一些不一样,首先我们执行用的是executeQuery()另外它的返回结果是一个类似于表的数据结构,我们想要看到结果的话是要去遍历的,这个遍历有点类似迭代器。每一次的next()都可以拿到结果中的每一行,然后再使用get方法去拿到每一列,注意这个getXXX方法也是一个系列,和你的列的类型有关,我们在取的使用使用列名就好,当然也可以用列的下标,从1开始,只不过用下标会有数错的风险。


    四,有关时间类型数据的操作

    对于一般的类型来说,大家操作都不成问题,但是时间这个类型它还有点不一样,所以这里就扩展说一下怎么对时间类型的数据进行操作。

    1,往数据库中插入时间类型的数据

    首先,我们创建好数据库(JDBC)以及表book。

    在这里插入图片描述


    然后就可以开始在IDEA上编写代码了。我们的时间一般都是以字符串来表示的,那如何能将一个字符串表示的时间插入进数据库,总体步骤就是两个。

    1,首先把String转换为 java.util.Date类型,将字符串按照指定的时间格式进行转化。
    2,然后把java.util.Date类型转换为 java.sql.Date/java.sql.Timestamp(java.sql.Date 不能表示时分秒,Timestamp可以)。

    【代码:】

    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    
    import javax.sql.DataSource;
    import java.sql.*;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Scanner;
    
    public class JDBCTest {
        public static void main(String[] args) throws SQLException, ParseException {
            DataSource dataSource = new MysqlDataSource();
            ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
            ((MysqlDataSource) dataSource).setUser("root");
            ((MysqlDataSource) dataSource).setPassword("88888888");
    
            Connection connection = dataSource.getConnection();
    
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入书名:");
            String bookName = scan.next();
            scan.nextLine();//这个地方注意一定要吃掉回车,下面读取时间用的是nextLine(),不然回车会直接输入到日期里面去
            System.out.println("请输入出版日期:");
            String publishTime = scan.nextLine();
    
    
            String sql = "insert into book values(?,?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1,bookName);
            //要将一个字符串形式的时间转换成时间类型然后放入数据库中
            //1,String转换为 java.util.Date
            java.util.Date time1 = null;
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//时间格式工具类
            time1 = simpleDateFormat.parse(publishTime);//将出版日期按照这个时间格式转换为java.util.Date类型
    
            //2,java.util.Date 转换为 java.sql.Date/java.sql.Timestamp
            //首先获取到这个时间的毫秒数,然后把这个毫秒数转换为 java.sql.Date
            Long time2 = time1.getTime();//距离1970-01-01 00:00:00的毫秒数
            java.sql.Timestamp publish_Time = new Timestamp(time2);
            preparedStatement.setTimestamp(2,publish_Time);
    
            //java.sql.Date publish_Time = new Date(time2);
            //preparedStatement.setDate(2,publish_Time);
            
            preparedStatement.executeUpdate();
            preparedStatement.close();
            connection.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    【运行截图:】

    在这里插入图片描述


    2,从数据库中获取时间类型的数据

    获取时间类型的数据就很简单了,没什么弯弯绕绕,只不过和上面一样,java.sql.Date接收的话获取出来只能看到年月日,Timestamp可以得到准确的时分秒。

    【代码:】

    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class bookSelect {
        public static void main(String[] args) throws SQLException {
            DataSource dataSource = new MysqlDataSource();
            ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
            ((MysqlDataSource) dataSource).setUser("root");
            ((MysqlDataSource) dataSource).setPassword("88888888");
    
            Connection connection = dataSource.getConnection();
    
            String sql = "select publishTime from book where bookName = 'vvv'";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
            ResultSet resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                java.sql.Timestamp date1 = resultSet.getTimestamp("publishTime");
                java.sql.Date date2 = resultSet.getDate("publishTime");
                System.out.println(date1);
                System.out.println(date2);
    
            }
    
            resultSet.close();
            preparedStatement.close();
            connection.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    【运行截图:】

    在这里插入图片描述


    今天关于Java的JDBC编程的分享就到这了,大家如果觉得写的不错的话还请点点赞咯,十分感谢呢!🥰🥰🥰
    在这里插入图片描述

  • 相关阅读:
    论信息系统项目的整体管理
    华为数通方向HCIP-DataCom H12-821题库(单选题:181-200)
    Global Mapper栅格计算器,波段计算NDVI、NDSI、NDWI等
    ucore实验二
    关于双表join时on里边字段为null或者空的情况
    Integer和int
    ubuntu中的系统消息中显卡显示llvmpipe (LLVM 10.0.0, 256 bits)
    美国市场三星手机超苹果 中国第一属华为
    Mybatis_plus-逻辑删除、通用枚举、自动填充、插件等
    什么是vue单向数据流(详解)
  • 原文地址:https://blog.csdn.net/qq_61688804/article/details/126317089