一,
1.jdbc 概述: jdbc 是一种用来执行 sql 语句的 java API, 可以为多种关系数据库提供同意访问, 是由一组用 Java 代码写的类和接口组成, 是 java 访问数据库的标准规范
2.jdbc 原理: Java 提供访问数据库孤帆称为 jdbc, 而生产厂商提供方规范的实现类成为驱动
jdbc 是接口, 驱动是接口的实现, 没有驱动将无法完成数据库连接, 从而不能操作数据库
3.jdbc 开发步骤:
(1), 注册驱动: 告知 jvm 使用的是哪一个数据库的驱动
(2), 获得链接: 使用 JDBC 中的类, 完成对 MySQL 数据库的连接
(3), 获得语句执行平台: 通过连接对象获取对 SQL 语句的执行者对象
(4), 执行 sql 语句: 使用执行者对象, 向数据库执行 SQL 语句, 获得到数据库的执行后的结果
(5), 处理结果
(6), 释放资源
4. 导入驱动 jar 包
创建 lib 目录, 用于存放当前项目需要的所有 jar 包, 选择 jar 包, 右键执行 build path / Add to Build Path
5. 注册驱动:
代码: Class.forName("com.mysql.jdbc.Driver");
jdbc 规范定义驱动接口: java.sql.Driver,MySQL 驱动包提供了实现类: com.MySQL.jdbc.Driver DriverManager 工具类, 提供注册驱动的方法 registerDriver(), 方法的参数是 java.sql.Driver, 所以可以通过下面的代码进行注册:
DriverManager.registerDriver(new com.MySQL.jdbc.Driver());
但是由于上面的代码存在: 硬编码, 后期不宜与程序扩展维护和驱动被注册两次的不足, 所以不推荐使用
通常开发使用 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!");
- }
- }
- ......
- }
6. 获得连接:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");
获取连接需要方法 DriverManager.getConnection(url,username,password), 三个参数分别表示, url 需要连接数据库的位置(网址)user 用户名 password 密码
url 比较复杂, 下面是 MySQL 的 url:
jdbc:MySQL://localhost:3306/mydb
JDBC 规定 url 的格式由三部分组成, 每个部分中间使用冒号分隔.
第一部分是 jdbc, 这是固定的;
第二部分是数据库名称, 那么连接 MySQL 数据库, 第二部分当然是 MySQL 了;
第三部分是由数据库厂商规定的, 我们需要了解每个数据库厂商的要求, MySQL 的第三部分
分别由数据库服务器的 IP 地址 (localhost), 端口号(3306), 以及 DATABASE 名称(mydb) 组成.
7. 获得语句执行平台:
String sql = "某 SQL 语句";
获取 Statement 语句执行平台: Statement stmt = con.createStatement();
常用方法:
int executeUpdate(String sql); -- 执行 insert update delete 语句.
ResultSet executeQuery(String sql); -- 执行 select 语句.
boolean execute(String sql); -- 执行 select 返回 true 执行其他的语句返回 false.
8. 处理结果集(执行 insert,update,delete 无需处理)
ResultSet 实际上就是一张二维的表格, 我们可以调用其 boolean next()方法指向某行记录, 当第一次调用 next()方法时, 便指向第一行记录的位置, 这时就可以使用 ResultSet 提供的 getXXX(int col)方法 (与索引从 0 开始不同个, 列从 1 开始) 来获取指定列的数据:
- rs.next();// 指向第一行
- rs.getInt(1);// 获取第一行第一列的数据
常用方法:
Object getObject(int index) / Object getObject(String name) 获得任意对象
String getString(int index) / Object getObject(String name) 获得字符串
int getInt(int index) / Object getObject(String name) 获得整形
double getDouble(int index) / Object getObject(String name) 获得双精度浮点型
9. 释放资源:
- rs.close();
- stmt.close();
- con.close();
来源: http://www.bubuko.com/infodetail-2848969.html