JDBC概述

JDBC

 

Statement

使用jdbc操控数据库时,一开始学习的时候是这样的

Class.forName(“com.mysql.jdbc.Driver”);

再通过DriverManager获取到Connection

由Connection获得到statement

再利用statement执行SQL语句,返回的结果为ResultSet类。

(resultset类中提供了诸多方法来访问结果集中的数据)

代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test_01 {

    public static void main(String[] args)throws Exception{
        String url="jdbc:mysql://localhost:3306/newsql";
        String username="root";
        String password="derder";
        Connection conn=null;
        Statement statement=null;
        String sql="select * from users";
        //注册数据库驱动

        //DriverManager.deregisterDriver(new com.mysql.jdbc.Driver());
        // 该方法会使数据库驱动被注册两次,因为Driver类源码的静态代码块中已经完成了数据库驱动的注册。

        Class.forName("com.mysql.jdbc.Driver");//需要在idea 的library中导入mysql的jdbc包
        //通过DriverManager对象获取数据库连接。
        conn=DriverManager.getConnection(url,username,password);
        //通过connection对象获取statement对象
        statement=conn.createStatement();
        //通过statement对象执行SQL语句。
        ResultSet resultSet=statement.executeQuery(sql);//executeQuery()方法会返回一个ResultSet
        //回收数据库资源
        resultSet.close();
        statement.close();
        conn.close();

    }
}

 

Preparestatement

Statement每次执行SQL语句都要对其进行编译,所以可以利用preparestatement对SQL进行预编译,PreparedStatement是Statement的子接口,与直接使用Statement不同的是,SQL语句里可用?占位,然后调用preparestatement.setString()方法进行传值。( mybatis里的${ }可将变量用?表示,就源于这里,我不习惯称?为占位符,因为mysql的模糊查询的占位符有_(下划线)和%等等,但是没有?)

代码如下:

String sql="insert into user(name ,password,email,birthday)";

conn=DriverManager.getConnection(url,username,password);

prepareStatement prt=conn.prepareStatement(sql);

prt.setString(1, “com.derder”);

prt.setString(2, “derder”);

prt.setString(3, “derder.com”);

prt.setString(4, “219219”);

 

 

批处理

Statement和preparestatement批处理

Statement可利用preparestatement的对象实例ptsm

 

Statement对象可调用多个addBatch(sql)方法,最后再使用executeBatch方法完成对多个SQL语句进行批量处理(即多个SQL语句提交给数据库一起执行)。

代码如下:

Statement.addBatch(sql1);

Statement.addBatch(sql2);

Statement.addBatch(sql3);

Statement.executeBatch();

 

Preparestatement批处理

如果是preparestatement的批处理,代码如下:

String sql="insert into user(name ,password,email,birthday)";

conn=DriverManager.getConnection(url,username,password);

prepareStatement prt=conn.prepareStatement(sql);

for (int i=1;i<5;i++) {

prt.setString(1, “com.derder”+i);

prt.setString(2, “derder”+i);

prt.setString(3, “derder.com”+i);

prt.setString(4, “219219”+i);

}

prt.executeBatch();

 

DataSource

Jdbc提供DataSource接口来负责与数据库进行连接,定义了返回值为connection的方法。

C3p0连接池的核心类ComboPooledDatasource就是DataSource的实现类。

(单独写Mybatis Demo时,DataSource可定义为pool,Unpool和jndi的形式,mybatis使用pool时,我在看代码时没有迹象表明使用的pool是C3P0 pool,而mybatis和spring做整合时,会指定使用C3P0的连接池,如果是mybatis整合springboot时,pom文件中会加入jdbc启动器

        <!--jdbc的启动器,默认使用HikariCP连接池-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jdbc</artifactId>

        </dependency>

 

这里默认使用HikariCP连接池

 

Dbutils工具类中

QueryRunner可简化代码。

ResultSetHandler接口实现类可用于处理resultset结果集。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值