java的JDBC编程(详解)

JDBC/API的概念:

JDBC:即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API(如果你不知道什么事API,那就请看下面)
API:应用程序接口,就是里面包含了很多方法的接口(可以先这样理解)
在这里插入图片描述

JDBC的来源:那时有很多的数据库厂商,但是很多的数据库厂商的API都有所不同,此时的程序猿要想操作不同的数据库就要学习不同的API,这就大大增加了程序员的负担。这时java的大佬们站了出来,为了制定一个统一的标准,方便程序员们操作数据库,要求所有的数据库厂商都要按照JDBC 这套API来改进。那具体是怎么改进的呢?比如一个函数,每一个数据库厂商在函数内部的写法肯定不可能是完全一样的,只是我们要保证该函数的功能,返回值,参数……是一样的就行了,因此自从都依照JDBC改进了之后,很多方法的功能得到了统一。至此,一个程序猿只需要掌握这一种java的JDBC就能够正常使用其他的数据库了,大大降低了程序猿的工作难度。
在这里插入图片描述
上面是我们一般访问数据库的歩奏:先打开应用程序,通过调用JDBC中的方法来操作数据库,但是由于不同的数据库厂商有不同的实现,而这个转换程序其实就相当于一个说明书 ,让MySQL原生的API和JDBC中的API形成对接,这个接口转换程序就是由MySQL提供的,也叫做 “ 数据库驱动 ”
如何安装这个驱动呢?你可以在Oracle官网上下载,但是那大概率你找不到。此处有一个捷径:就是一些大佬觉得有些软件太分散了不好找的,于是就建立了一个第三方中央仓库,便于我们直接去下载,这个仓库的链接 https://mvnrepository.com/,在搜索框里直接搜MySQL 就行了,下载新版本还是旧版本,就看你用的MySQL是新版本还是旧版本了,如果是新的你就最好用新的,反之,亦是如此。
在下载完以后,再将你下载的以.jar结尾的文件复制,导入到新建的一个文件夹lib中就行了,然后再将这个文件 加入库中,接下来就能在 src 中新建类,写代码了。
下面是导入这个驱动包的基本过程

在这里插入图片描述

利用java操作数据库的一般步骤:

  • 我们先看一遍总体的代码长啥样,再逐个分析:
public class JDBCDemo {
    //增:
    public static void main(String[] args) throws SQLException {
        //1,创建数据源(dataSource)

        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/data_1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("456123");
        //2,和数据库建立连接:
         Connection connection = dataSource.getConnection();
        //3,构建一个简单的sql语句:
        String sql = "insert into student(name,classes_id) values ('高明',9)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        //4,执行sql,把刚才解析好的语句发给数据库服务器。
        //返回值是一个int 类型,表示这个操作影响了几行数据。
        int n = preparedStatement.executeUpdate();
        System.out.println("n = "+n);
        preparedStatement.close();
        connection.close();
    }
}
第一步:创建数据源:
  //1,创建数据源(dataSource)
        //这里其实相当于用了一个向上转型
        DataSource dataSource = new MysqlDataSource();
        //由于父类中不能使用子类方法,所以这里又转回来了:
        
        //设置Url:他也叫:唯一资源定位符,作用:是为了获取到数据库在网络中的服务器位置
        //对于我们普通用户,我们的服务器其实是装在我们自己的电脑上了,但是当我们今后参加工作的时候,我们可能会使用别的服务器。
        //基本上来说:对于我们我们自己的安装的MySQL来说上面的除了数据库名字需要改成自己的,其他的只需要复制粘贴就行了
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/data_1?characterEncoding=utf8&useSSL=false");
        //设置用户名:这个我们一般的普通用户都是root
        ((MysqlDataSource) dataSource).setUser("root");
        //设置密码:我们就需要将我们MySQL刚下载的时候你自己设置的密码填进去就行了。
        ((MysqlDataSource) dataSource).setPassword("456123");

关于URL下面有一个简单的分析,了解一下即可:
在这里插入图片描述
其实关于向上转型,我们还能引出一个话题:高内聚低耦合,这是对一个好程序的要求。
耦合:其实就是写代码的时候,会有很多模块,如果一个模块修改了代码,对别的模块影响很大,就叫“高耦合”,相反:就是低耦合,耦合描述的模块之间的事情。
内聚:就相当于每个人都从事不同的工作有条不紊,就像厂里的车间一样,它描述的是模块内部的事情。
我们之所以追求高内聚,低耦合,就是因为:如果一个程序在模块之间相互独立,如果哪个模块出错了,我们只需要对那个问题模块修复就行了,大大降低了成本。而在模块内部我们的组织严密,歩奏有条不紊,效率会大大提高。

第二步:建立连接
//2,和数据库建立连接:
        //这里可能会出现报错:不可处理的异常,其实鼠标右键点击就有解决办法,我在这里是声明了一个异常。
        //这里还要注意一个要点:
        Connection connection = dataSource.getConnection();

上面我么到底是要注意什么呢?不仅仅是声明异常,还有就是:在这里插入图片描述

第三步:
//3,构建一个简单的sql语句:
        //这里的字符串中储存的就是我们的sql语句了,此时你就能将你想对数据库进行的操作写在里面
        String sql = "insert into student(name,classes_id) values ('高明',9)";
        //这里要说一下PreparedStatement 和直接用statement的区别。
        //若果说前面都是在准备,那这一步才是真正发射炮弹
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

PreparedStatement和Statement的主要区别就是:

  • Statement : 用于执行不带参数的简单SQL语句
  • PrepareStatement : 用于执行带或者不带参数的SQL语句,
    , SQL语句会预编译再数据库系统,
    , 执行速度快于Statement
    其实我们在输入sql的时后还能有其他输入方法:比如当我们想更改一个数据的时候,我们总不能时时刻刻改变字符串内容吧,所以我们也可以
    在这里插入图片描述

代码如下:

        String name = scanner.nextLine();
        int id = scanner.nextInt();
         String sql  = "insert into text_two values(?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(2,id);
        preparedStatement.setString(1,name);

第四步:执行sql
//4,执行sql,把刚才解析好的语句发给数据库服务器。
        //返回值是一个int 类型,表示这个操作影响了几行数据。
        //这里的如果你是想要进行增,删,改那就用executeUpdate:如果只是进行查找,那就用executeQuery()
        int n = preparedStatement.executeUpdate();
        System.out.println("n = "+n);
        preparedStatement.close();
        connection.close();

其实,我们也能使用ResultSet 对结果进行访问:

//只有下面这一段与之前的不同:
    ResultSet resultSet =preparedStatement.executeQuery() ;
        while(resultSet.next()){
            int id = resultSet.getInt("classes_id");
            String name = resultSet.getString("name");
            System.out.println("id = "+id+"  name=  "+name);
        }
        //这里我们只需要根据先创建后销毁关闭就行了。
        resultSet.close();
        preparedStatement.close();
        connection.close();

因为我的数据库里之前建立的是student表所以他打印的结果就是:
在这里插入图片描述
这一节的代码对于每个增删改查来说有很多重复,但是,有很多我们没见过的方法,因此会感觉很难,不过那都很正常,梳理梳理,多练习练习,就能理解了。

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值