JDBC

1、JDBC(Java DataBase Connectivity)概述

Sun公司推出的java访问数据库标准规范(接口)。

(1)、JDBC是一种用于执行SQL语句的java API

(2)、JDBC可以为多种关系数据库提供统一访问入口。

(3)、JDBC有一组java工具类和接口组成。

2、JDBC原理

JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!

3、JDBC开发步骤

(1)、注册驱动

(2)、获得连接

(3)、获得语句执行者

(4)、执行SQL语句

(5)、处理结果集

(6)、释放资源

1)、注册驱动:

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

步骤分析:

A)JDBC规范定义驱动接口:java.sql.Driver

mysql驱动包提供了实现类:com.mysql.jdbc.Driver

B)DriverManager工具类,提供注册驱动的方法registerDriver(),方法参数是java.sql.Driver,所以我们可以通过如下语句进行注册

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

但是不推荐用此方法注册,原因:

          a、硬编码,以后不易于程序扩展和维护

          b、驱动被注册两次

C)通常开发我们使用Class.forName()加载一个使用字符串描述的驱动类。

如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。

通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”讲自己进行了注册

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

2)、获得连接:

Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb1”,”root”,”root”);

获取连接需要方法DriverManager.getConnection(url,username,password),三个参数分别表示,

url需要连接数据库的位置(网址)、user用户名、 password密码

 

url比较复杂,下面试mysql的url:

jdbc:mysql://localhost:3306/mydb1

解释:

JDBC规定url格式有三个部分组成,每个部分中间使用逗号隔开。

第一部分是jdbc,这是固定的;

第二部分是数据库名称,那么连接mysql数据库,第二部分就是mysql了;

第三部分是有数据库厂商规定,我们需要了解每个数据库厂商的需求,mysql的第三个部分分别由数据库服务器的IP地址(localhost)、端口号(3306)、以及database名称(mysql)组成。

 

扩展:url参数

jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=UTF8

 

useUnicode参数:指定这个连接数据库的过程中,使用的字节集是Unicode字节集;

characterEncoding参数:指定java程序连接数据库的过程中,使用的字节集编码为UTF-8编码,注意:mysql中指定UTF-8编码是给出的是UTF8,而不是UTF-8。

3)、获得语句执行者:

Statement stmt = con.createStatement();

 

常用方法:

● 执行SQL语句:

     ■ Int executeUpdate(String sql);——执行insert、update、delete语句。(DML语句) 其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很 少会使用JDBC来执行这些语句;

 

     ■ ResultSet executeQuery(String sql)——执行select语句。(DQL语句)

     ■ Boolean execute(String sql)——执行select返回true,执行其他语句返回false

          ◆ 如果返回true,需要使用getTesultSet()获取查询结果

          ◆ 如果返回false,需要使用getUpdateCount()获得影响行数

● 执行批处理(可选)

     ■ AddBatch(String sql);

     ■ clearBatch();

     ■ executeBatch;

 

PreparedStatement pstmt = con.prepareStatement(sql);

常用方法同上,方法没有参数,用setXXX(int i,String obj)设置占位符的值,i值从一开始

4)、处理结果集

可以通过next()方法使ResultSet的游标向下移动,当游标移动到你需要的行时,就需要来获取该行的数据了,ResultSet提供了一系列的获取列数据的方法:

  1. String getString(int columnIndex):获取指定列的String类型数据;
  2. int getInt(int columnIndex):获取指定列的int类型数据;
  3. double getDouble(int columnIndex):获取指定列的double类型数据;
  4. boolean getBoolean(int columnIndex):获取指定列的boolean类型数据;
  5. Object getObject(int columnIndex):获取指定列的Object类型的数据。

 

上面方法中,参数columnIndex表示列的索引,列索引从1开始,而不是0,这第一点与数组不同。如果你清楚当前列的数据类型,那么可以使用getInt()之类的方法来获取,如果你不清楚列的类型,那么你应该使用getObject()方法来获取。

ResultSet还提供了一套通过列名称来获取列数据的方法:

  1. String getString(String columnName):获取名称为columnName的列的String数据;
  2. int getInt(String columnName):获取名称为columnName的列的int数据;
  3. double getDouble(String columnName):获取名称为columnName的列的double数据;
  4. boolean getBoolean(String columnName):获取名称为columnName的列的boolean数据;
  5. Object getObject(String columnName):获取名称为columnName的列的Object数据;

5)、释放资源:

与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。

rs.close();

stmt.close();

con.colse();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值