JDBC介绍

JDBC介绍

JDBC全称为:Java DataBase Connectivity(java数据库连接)。
学习JDBC 技术目的,使用Java技术操作数据库。

什么是驱动? 两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

如果没有JDBC,Java程序员需要面向各个数据库驱动接口编程,开发复杂 ; sun 公司提供一套统一JDBC接口规范,Java程序只需要使用JDBC就可以操作任何数据库,JDBC实现类由各个数据库厂商提供。

学习JDK中自带JDBC接口规范:
它们主要在两个包下:

  • java.sql
    类:DriverManger
    接口 Connection Statement ResultSet PreparedStatement
    CallableStatement(它是用于调用存储过程)
  • javax.sql
    接口 DataSource

JDBC入门

编写一个jdbc入门代码,完成对数据库操作。

create table user(
   id int primary key auto_increment,
   username varchar(20) unique not null,
   password varchar(20) not null,
   email varchar(40) not null
);

INSERT INTO USER VALUES(NULL,'tom','123','tom@163.com');
INSERT INTO USER VALUES(NULL,'fox','123','fox@163.com');    

JDBC程序:

// 1.注册驱动
DriverManager.registerDriver(new Driver());

// 2.获取连接对象
Connection con = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/day17", "root", "abc");

// 3.通过连接对象获取操作sql语句Statement
Statement st = con.createStatement();

// 4.操作sql语句
String sql = "select * from user";

// 操作sql语句(select语句),会得到一个ResultSet结果集
ResultSet rs = st.executeQuery(sql);

// 5.遍历结果集      
while(rs.next()){
    int id=rs.getInt("id");
    String username=rs.getString("username");
    String password=rs.getString("password");
    String email=rs.getString("email");

    System.out.println(id+"  "+username+"  "+password+"  "+email);
}

//6.释放资源
rs.close();
st.close();
con.close();

JDBC操作详解

注册驱动

DriverManager.registDriver(new Driver());
  1. DriverManager类
    它是java.sql包下的一个驱动管理的工具类,可以理解成是一个容器(Vector),可以装入很多数据库驱动
    它的registDriver方法分析
    public static synchronized void registerDriver(java.sql.Driver driver)
    参数:java.sql.Driver
    我们传递的是 com.mysql.jdbc.Driver;

    com.mysql.jdbc.Driver类中有一段静态代码块:

    static {
        try {       
            java.sql.DriverManager.registerDriver(new Driver());                                   
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");           
        }
    }

    上述代码的问题:
    在驱动管理器中会装入两个mysql驱动.
    解决方案:使用反射
    Class.forName(“com.mysql.jdbc.Driver”);
    分析:使用反射的方式来加载驱动有什么好处?

    1. 只加载一次,装入一个驱动对象.
    2. 降低耦合,不依赖于驱动.
  2. 可以通过DriverManager来获取连接对象

Connection con=DriverManager.getConection(String url,String user,String password);

url作用:就是用于确定使用哪一个驱动.

  1. umysql url: jdbc:mysql://localhsot:3306/数据库名.
  2. oralce url: jdbc:oracle:thin:@localhost:1521:sid

**总结:**DriverManager作用:

  1. 注册驱动
  2. 获取连接Connection

关于url
url格式:jdbc : mysql ://localhost:3306/day17

主协议子协议主机端口数据库
jdbcmysqllocalhost3306day17

mysql的url可以简写:
前提:主机是localhost 端口是3306
jdbc:mysql:///day17
在url后面可以带参数
useUnicode=true&characterEncoding=UTF-8

Connection详解

java.sql.Connection,它代表的是一个连接对象。简单说,就是我们程序与数据库连接。
Connection作用:

  1. 可以通过Connection获取操作sql的Statement对象。
    Statement createStatement() throws SQLException
    示例:
    Statement st=con.createStatement();
  2. 可以获取执行预处理的PreparedStatement对象.
    PreparedStatement prepareStatement(String sql) throws SQLException
  3. 可以获取执行存储过程的 CallableStatement
    CallableStatement prepareCall(String sql) throws SQLException
  4. 操作事务
    setAutoCommit(boolean flag);开启事务
    rollback();事务回滚
    commit();事务提交

Statement详解

java.sql.Statement用于执行sql语句.
Statement作用:

  • 执行sql
    DML:执行insert update delete用executeUpdate
    int executeUpdate(String sql)
    利用返回值判断非0来确定sql语句是否执行成功。
    DQL:执行select用executeQuery
    ResultSet executeQuery(String sql)
    可以通过execute方法来执行任何sql语句.
    execute(String sql):用于向数据库发送任意sql语句
  • 批处理
    addBatch(String sql); 将sql语句添加到批处理
    executeBatch();批量执行
    clearBatch();清空批处理.

ResultSet详解

java.sql.ResultSet它是用于封装select语句执行后查询的结果。
常用API:

  • next()方法
    public boolean next();
    用于判断是否有下一条记录。如果有返回true,并且让游标向下移动一行。
    如果没有返回false.

  • 可以通过ResultSet提供的getXxx()方法来获取当前游标指向的这条记录中的列数据。
    参数有两种
    getInt(int columnIndex);
    getInt(String columnName);
    如果列的类型不知道,可以通过下面的方法来操作
    getObject(int columnIndex);
    getObject(String columnName);

关闭资源

Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值