目录
1、 3、1 DriverManager:管理了一组jdbc的操作 类
1、 3、2 (了解)Driver:java.sql 接口 驱动
3、 2 、3 ResultSetHandler:封装结果集 接口
一、通过jdbc完成单表的curd操作
需求:
对分类表完成操作.
技术分析:
jdbc
1、 1 jdbc
java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
驱动:jdbc的实现类.由数据库厂商提供.
我们就可以通过一套规范操作不同的数据库了(面向对象——多态)
jdbc作用:
连接数据库
发送sql语句
处理结果
1、 2 jdbc操作步骤:★
1.数据库和表
2.创建一个项目
3.导入驱动jar包
4.编码:
注册驱动
获取连接
编写sql
创建预编译的语句执行者(?号)
设置参数
执行sql
处理结果
释放资源
1、 2、1 初始化数据库和表
CREATE DATABASE day07;
USE day07;
create table category(
cid varchar(20) primary key,
cname varchar(20)
);
insert into category values('c001','电器');
insert into category values('c002','服饰');
insert into category values('c003','化妆品');
insert into category values('c004','书籍');
1、 2、2 IDE打开之后——eclipse
1.修改字符集 utf-8
2.新建 java项目
3.使用的jdk为自己的jdk 不用使用内置
1、 2、3 使用junit单元测试
要求:
1.方法是public void xxx(){}
2.在方法上添加 @Test
3.在@Test 按下 ctrl+1(快速锁定错误)
4.在方法上右键 run as -->junit 就可以执行方法了.public class Hello { @Test public void f1(){ System.out.println("hello"); } @Test public void f2() throws Exception{ //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //DriverManager.registerDriver(new Driver());————驱动注册两次 //获取连接 ctrl+o 整理包 Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day07", "root", "1234"); //编写sql String sql="select * from category"; //创建语句执行者 PreparedStatement st=conn.prepareStatement(sql); //设置参数 //执行sql ResultSet rs=st.executeQuery(); //处理结果 while(rs.next()){ System.out.println(rs.getString("cid")+"::"+rs.getString("cname")); } //释放资源. rs.close(); st.close(); conn.close(); }
1、 2、4 添加工具类
注册驱动、 获取连接、释放资源 工具类
异常处理:抛出异常,谁调用谁处理
方法调用前先判断是否为空
public class DataSourceUtils { private static ComboPooledDataSource ds=new ComboPooledDataSource(); /** * 获取数据源 * @return 连接池 */ public static DataSource getDataSource(){ return ds; } /** * 获取连接 * @return 连接 * @throws SQLException */ public static Connection getConnection() throws SQLException{ return ds.getConnection(); } /** * 释放资源 * @param conn 连接 * @param st 语句执行者 * @param rs 结果集 */ public static void closeResource(Connection conn, Statement st, ResultSet rs) { closeResultSet(rs); closeStatement(st); closeConn(conn); } /** * 释放连接 * @param conn 连接 */ public static void closeConn(Connection conn) { if (conn != null) {//调用方法时需要判断是否为空 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null;//助于垃圾回收器快速回收 } } /** * 释放语句执行者 * @param st 语句执行者 */ public static void closeStatement(Statement st) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } st = null; } } /** * 释放结果集 * @param rs 结果集 */ public static void closeResultSet(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } } }
1、 2、5 使用工具类插入一条数据
//设置参数
st.setString(1, "c006");
st.setString(2, "户外");//执行sql ——返回行数
int i=st.executeUpdate();//插入一条数据 @Test public void f3(){ //模板,方便最后释放资源 Connection conn=null; ResultSet rs=null; PreparedStatement st=null; try { //获取连接 conn=JdbcUtils.getConnection(); //编写sql String sql="insert into category values(?,?)"; //获取语句执行者 st=conn.prepareStatement(sql); //设置参数 st.setString(1, "c006"); st.setString(2, "户外"); //执行sql ——返回行数 int i=st.executeUpdate(); //处理结果 if(i==1){ System.out.println("success"); }else{ System.out.println("fail"); } } catch (Exception e) { e.printStackTrace(); } finally { //释放资源 JdbcUtils.closeResource(conn, st, rs); } }
1、 3 jdbc-api详解
所有的包 都是 java.sql 或者 javax.sql
1、 3、1 DriverManager:管理了一组jdbc的操作 类
常用方法:
- 1、了解:注册驱动 registerDriver
static void registerDriver(Driver driver) :
通过查看 com.mysql.jdbc.Driver的源码 有如下代码
static {
try {
java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
驱动注册了两次.我们只需要将静态代码块执行一次,类被加载到内存中会执行静态代码块,并且只执行一次.
现在只需要将类加载到内存中即可:
方式1:
★Class.forName("全限定名");//包名+类名 com.mysql.jdbc.Driver
方式2:
类名.class;
方式3:
对象.getClass();——object类中的方法
- 2、掌握:获取连接 getConnection
static Connection getConnection(String url, String user, String password)
参数1:告诉我们连接什么类型的数据库及连接那个数据库
协议:数据库类型:子协议 参数
mysql: jdbc:mysql://localhost:3306/数据库名称
oracle: jdbc:oracle:thin@localhost:1521@实例
参数2:账户名 root
参数3:密码