- JDBC
- JDBC概述
JDBC(Java DataBase Connectivity, java数据库连接)是一种用于执行SQL语句的Java API。JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。
XML方式:
JDBC方式:
JDBC规范(掌握四个核心对象):
类:
DriverManager:用于注册驱动
接口:
Connection: 表示与数据库创建的连接
PreparedStatement : sql语句发射器
ResultSet: 结果集或一张虚拟表
今天我们使用的是mysql的驱动mysql-connector-java-5.1.47.jar
- JDBC入门案例
- 需求描述
需求:
使用java代码 链接到数据库 查询category表下的所有数据 将查询到的结果 显示到控制台
显示效果:
- 实现思路
项目中添加驱动包链接数据库. 发射语句得到结果,对结果进行遍历
- 准备工作
#创建数据库 create database day05pre; #使用数据库 use day05pre; ###创建分类表 create table category( cid int PRIMARY KEY AUTO_INCREMENT , cname varchar(100) ); #初始化数据 insert into category (cname) values('家电'); insert into category (cname) values('服饰'); insert into category (cname) values('化妆品');
创建项目导入Jar包
创建lib目录,用于存放当前项目需要的所有jar包
选择jar包,右键执行build path / Add to Build Path
- 书写方法完成查询
方法内部按照如下步骤书写:
//1.注册驱动 获取连结 //2.发射语句 拿到结果进行处理 //3.关闭资源 以查询为例的代码实现
package com.czxy.demo01; import java.sql.*; public class Test01 { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1.注册驱动 获取连结 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day05pre", "root", "root"); //2.发射语句 拿到结果进行处理 PreparedStatement pps = conn.prepareStatement("select * from category"); ResultSet resultSet = pps.executeQuery(); //查看结果 while (resultSet.next()){ int cid = resultSet.getInt("cid"); String cname = resultSet.getString("cname"); System.out.println(cid+" : "+cname); } //3.关闭资源 resultSet.close(); pps.close(); conn.close(); }
- API详解
- API详解:注册驱动
语法: Class.forName("com.mysql.jdbc.Driver");
固定写法: com.mysql.jdbc.Driver 是MySQL数据库的驱动类
通过反射获取com.mysql.jdbc.Driver对象时底层会直接注册驱动
其他写法:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用
原因是:
>导致驱动被注册2次。
>强烈依赖数据库的驱动jar
- API详解:获得链接
接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。
Connection conn = DriverManager.getConnection(url, user, password);
语法:static Connection getConnection(String url, String user, String password)
试图建立到给定数据库 URL 的连接。
参数说明:url 需要连接数据库的位置(网址) user用户名 password 密码
例如:getConnection("jdbc:mysql://localhost:3306/day06", "root", "root");
URL:SUN公司与数据库厂商之间的一种协议。
jdbc:mysql://localhost:3306/day06
协议:子协议:// IP :端口号/具体的数据库
mysql: jdbc:mysql://localhost:3306/day04或者jdbc:mysql:///day14(默认本机连接)
oracle数据库: jdbc:oracle:thin:@localhost:1521:sid
API详解:java.sql.PreparedStatement接口: 操作sql语句,并返回相应结果
String sql = "某SQL语句";
PreparedStatement pst = conn.prepareStatement(sql);
对象pst就是SQL语句的发射器,可以发射SQL语句,并获取执行结果
常用方法:
int executeUpdate(); --执行insert update delete语句.
ResultSet executeQuery(); --执行select语句.
boolean execute(String sql); --仅当执行select并且有结果时才返回true,执行其他的语句返回false.
- API详解:处理结果集(注:执行insert、update、delete无需处理)
ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据:
rs.next();//判断下一行有没有数据,如果有返回true否则返回false
rs.getInt(1);//获取第一行第一列的数据
常用方法:
Object getObject(int index) // Object getObject(String name) 获得任意对象
String getString(int index)// String getString(String name) 获得字符串
int getInt(int index)//int getInt(String name) 获得整型
double getDouble(int index)// double getDouble(String name) 获得双精度浮点型
Eg:
- API详解:释放资源
与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。
rs.close();
Pps.close();
con.close();