JDBC连接数据库

1.jdbc快速入门

        JDBC是现在主流的数据库连接方式,哈哈哈哈哈,这话放在我在吃奶的时候还比较可信,

但难免有公司还是用这种比较主流的方法,比如我,哈哈哈哈,通过我的学习,下面将介绍如何使用JDBC去对数据库操作。

下面请看代码

 public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取链接
        String url="jdbc:mysql://localhost:3306/address?useSSL=false";
        String username="root";
        String password="root";
        Connection conn = DriverManager.getConnection(url, username, password);

        //定义sql
        String sql="update address set address_name='fangao' where id =5";

        //创建statemnt对象,用于传递参数
        Statement statement = conn.createStatement();
        int i = statement.executeUpdate(sql);
        System.out.println(i);

        //释放资源
        statement.close();
        conn.close();
    }

2.api详解

        已经跟大家介绍完如何使用,现在就跟大家仔细聊聊其中的api详解

2.1DriverManger

        首先其是具有两个功能的

                1.注册驱动

                2.获取数据库连接

有的同僚就会问了,”老铁,驱动注册的时候Class.form去获取的类对象吗?“这确实是这样,当我们点进去看其底层你会发现

哎,还真是这样!

第二个就是获取连接了

String url="jdbc:mysql://localhost:3306/address?useSSL=false";
        String username="root";
        String password="root";
        Connection conn = DriverManager.getConnection(url, username, password);

以上我相信都能看得懂,就不多做赘述了。

2.2Connection

Connection也具有两个作用 

        1.获取执行sql的对象

        2.管理事务

获取执行sql的对象也有三个方法,以下代码对其作了介绍

///创建statemnt对象,用于传递参数
        Statement statement = conn.createStatement();
        //防止预编译
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        //执行存储过程的对象
        int i = statement.executeUpdate(sql);

管理事务主要是有三个方法,事务是什么呢?不知道的萌新可以看我下面这篇文章

什么是事务-CSDN博客

介绍完事务是什么我们就开始介绍jdbc是如何对事务做管理的

  //开启事务,true为自动提交;false为手动提交,及开启事务
        conn.setAutoCommit(false);
        //手动开启事务后,进行提交事务
        conn.commit();
        //若出现异常则进行回滚
        conn.rollback();

下面我将为大家举例

public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取链接
        String url="jdbc:mysql://localhost:3306/address?useSSL=false";
        String username="root";
        String password="root";
        Connection conn = DriverManager.getConnection(url, username, password);
        Statement statement = null;
        try {
            //开启事务
            conn.setAutoCommit(false);
            String sql1 ="update user set money=100 where id=1";
            //伪造异常
            //int a=1/0;
            String sql2 ="update user set money=100 where id=2";
            statement = conn.createStatement();
            statement.executeUpdate(sql1);
            statement.executeUpdate(sql2);
            //若无异常提交事务
            conn.commit();
        } catch (Exception e) {
            //若捕获到异常则进行回滚
            conn.rollback();
            throw new RuntimeException(e);
        } finally {
            //释放资源
            statement.close();
            conn.close();
        }


    }
create table user
(
    id    int            not null
        primary key,
    name  varchar(8)     null,
    money decimal(10, 6) null
);

可以去试一下。上面是见表语句,以后都会复用该表结构

2.3.Stateenment

他的作用主要是用来执行sql语句

        有两个方法

//执行DML\DDL语句,返回值是DML语句影响的行数
            int i = statement.executeUpdate(sql1);
            //执行DQL语句返回Resultset结果集
            ResultSet resultSet = statement.executeQuery(sql3);

2.4.ResultSet

ResultSet主要就是封装了去查询结果集,那么我将用代码的形式告诉大家如何去解析这个结果集

        String sql="select * from user";
        statement = conn.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        
        //判断该行是否有数据,游标向下一行
        while (resultSet.next()){
            //getXxx(),Xxx代表返回的参数类型,括号内传递参数,int或者string类型
            //int代表列的编号,切记从1开始,string是列的名称
            resultSet.getInt(1);
            resultSet.getString("name");
            resultSet.getDouble("money");

2.5.PreparedStatement

PreparedStatement的作用呢就是进行sql的预编译,防止sql注入问题,应该都清楚SQL注入问题是什么吧,如果不清楚就参考一下我的这篇文章。

SQL注入-CSDN博客

2.5.1PreparedStatement的使用

使用我就用代码进行描述了,通俗易懂

        //sql中的参数值用?进行占位
        String sql=" select * from user where id =? and name= ?";
        //用Connection获取,并传入sql
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        //setXxx(p1,p2),Xxx代表设置的参数类型
        //参数p1是给第几个占位符进行赋值,p2是具体值。
        preparedStatement.setInt(1,1);
        //执行sql此时并不需要再进行传参
        preparedStatement.executeUpdate();

2.5.2PreparedStatement的原理

       这是因为在预编译期间会对一些敏感字符进行转义,例如" ' "会转义为" \' ",防止sql注入风险,

防止sql注入只是PreparedStatement的一个好处,其还有一个好处就是模板相同,只会检查一次语法,这就提升了性能。

3.数据库连接池

3.1简介

数据库连接池就相当于一个容器,负责分配管理连接

我就给带入场景方便理解,我开了一个餐厅,此时我招聘了一个服务员进行上菜,上完一个菜我就将他辞退并重新招聘,这就是没用连接池。当服务员上完一个菜再进行下个菜的传递这就是使用了连接池,后者也是我们的常规做法,所以我们也尽量使用连接池的方式。

3.2连接池的使用

我用代码进行阐述

        //定义配置文件
        
        //加载配置文件
        Properties properties = new Properties();
        properties.load(new FileInputStream("配置文件路径"));
        
        //获取数据库连接对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        //获取数据库连接
        Connection connection = dataSource.getConnection();

配置文件需要配置的参数

        driverClassName=com.mysql.jdbc.Driver;
        url=jdbc:mysql:/localhost:3306//kuming?useSSL=false&useServwePrtpStmts=true
        username= root;
        password=root;
        #初始化连接数量
        initialSize=5;
        #最大连接数
        maxActive=10;
        #最大等待时间
        maxWait=3000;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值