黑马程序员技术交流社区
标题:
【石家庄校区】JDBC概述
[打印本页]
作者:
perry2017
时间:
2018-1-11 15:21
标题:
【石家庄校区】JDBC概述
本帖最后由 小石姐姐 于 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推荐的, 内部也是使用方式1实现的
注意
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数据库 |+-------------+ +-------------+
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2