本帖最后由 小石姐姐 于 2018-1-12 10:29 编辑
JDBC概述 JDBC概念和数据库驱动程序
- JDBC
- Java DataBase Connectivity, Java数据库连接. 是一种技术的名称
- 是SUN公司提供的用于执行SQL语句的Java API, 用为多种关系型数据库提供统一的访问. 它由一组用Java语言编写的类和接口组成, 是Java访问数据库的标准规范
- 数据库驱动
- 两个不同的设备要通信, 需要满足一定的通信数据格式, 数据格式由设备提供商规定, 设备提供商为设备提供驱动软件, 通过驱动软件就可以让两个设备通信.
- Java和MySQL数据库就可以看作2个不同的设备, JDBC需要使用数据库驱动来让Java代码与数据库服务器通信, 将Java中的SQL字符串发送给数据库来执行
- 数据库驱动有多种, 用于不同开发语言, 对于Java也有专门的一个驱动
JDBC原理
- JDBC是一套API, 可以通过Java代码来使用JDBC, 同时提供了一套接口, 用于让数据库厂商根据自家数据库特点去实现JDBC的功能
- 数据库驱动是数据库厂商根据自家数据库特点去实现JDBC接口而制作的, 用于让JDBC能够调用数据库的相关功能
- Java程序通过使用JDBC的API, 通过多态的方式调用数据库驱动中实现类的方法, 对数据库进行操作 +----------+ | Java程序 | +-----+----+ | +-----+----+ | JDBC | | 接口 | +-----+----+ | +---------+---------+ | |+------+------+ +------+------+| MySQL驱动 | | Oracle驱动 || 实现类 | | 实现类 |+------+------+ +------+------+ | |+------+------+ +------+------+| MySQL数据库 | | Oracle数据库 |+-------------+ +-------------+
JDBC开发步骤
1、注册驱动
- java.sql.DriverManager类: 管理JDBC驱动
- static void registerDriver(Driver driver): 注册数据库驱动
- java.sql.Driver接口: 数据库驱动必须实现的接口. 在数据库驱动jar包中已经实现了
- 注册驱动的2种方式
- 方式1: DriverManager.registerDriver(new Driver());
其中Driver类是jar包驱动中的实现类, 如com.mysql.jdbc.Driver
- 方式2: Class.forName("com.mysql.jdbc.Driver");
注意
MySQL驱动com.mysql.jdbc.Driver类中中已经编写了注册驱动的方法. 我们只需要通过反射去加载MySQL的驱动类, 让其中的静态代码块执行, 从而注册驱动即可. 不要手动注册驱动导致资源浪费 2、获取数据库连接对象
- java.sql.DriverManager类
- static Connection getConnection(String url, String user, String password) : 获取Connection接口的实现类, 实现类是jar包中实现的
>>url: 数据库地址, jdbc:mysql://主机IP:端口号/数据库名
>>主机IP或端口号可以省略, 默认使用localhost和3306: jdbc:mysql:///day02_04
>>user: 数据库用户名
>>password: 数据库登录密码
3、获取数据库连接对象
- Statement s = conn.createStatement(); : 不安全的
- PreparedStatement ps = conn.prepareStatement(String sql); : 可以防范SQL注入
- 占位符: ?, 即使是字符串, 也不要给问号加引号
- void setObject(int index, Object obj) //index从1开始
4、执行SQL语句
- Statement
- 增删改: int s.executeUpdate(String sql)----判断操作是否成功: 判断返回值是否>0则生效, 否则不成功
- 查询: ResultSet rs = s.executeQuery(String sql)
- PreparedStatement
- 增删改: int ps.executeUpdate(); ----判断操作是否成功: 判断返回值是否>0则生效, 否则不成功
- 查: ResultSet rs = ps.executeQuery();
5、处理结果
- ResultSet
- boolean next();: 将指针向后移动, 如果有下一个记录则true, 否则false
默认不执行的之后, 指针在第一条记录之前; 只有调用一次才能指向第一条: while (rs.next()) {}
- String getString(String 列名): 获取指定列的值, 以String类型
- Object getObject(String 列名): 获取指定列的值, 以Object类型
6、释放资源
- resultSet.close()
- preparedStatement.close()
- statement.close()
- connection.close()
DBUtils:
是Apache的Commons项目中的组件;
用于简化JDBC的开发;
和我们自定义的JDBCUtils的目的一样, 简化开发
QueryRunner类: 提供操作SQL语句的API
- QueryRunner(): 创建对象
- int update(Connection conn, String sql, Object... param): 执行INSERT, DELETE, UPDATE语句, 同时传入占位符的参数值, 是可变参数
- <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params): 执行SELECT查询, 并根据传入的结果集处理器来处理结果
JDBC原理
- JDBC是一套API, 可以通过Java代码来使用JDBC, 同时提供了一套接口, 用于让数据库厂商根据自家数据库特点去实现JDBC的功能
- 数据库驱动是数据库厂商根据自家数据库特点去实现JDBC接口而制作的, 用于让JDBC能够调用数据库的相关功能
- Java程序通过使用JDBC的API, 通过多态的方式调用数据库驱动中实现类的方法, 对数据库进行操作 +----------+ | Java程序 | +-----+----+ | +-----+----+ | JDBC | | 接口 | +-----+----+ | +---------+---------+ | |+------+------+ +------+------+| MySQL驱动 | | Oracle驱动 || 实现类 | | 实现类 |+------+------+ +------+------+ | |+------+------+ +------+------+| MySQL数据库 | | Oracle数据库 |+-------------+ +-------------+
|
|