jdbc基础

Posted bbs1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbc基础相关的知识,希望对你有一定的参考价值。

回顾:

sql

 sql分类:

  DDL:

   对象:数据库和表

   关键词:create alter drop truncate

   创建数据库:create database day06;

   删除数据库: drop database day06;

   创建表:create table user(

    id int primark key auto_increment,

    username varchar(20)

   );

   

   修改表:

    alter table user rename to user10;

    alter table user add password varchar(20);

    alter table user change password pwd varchar(20);

    alter table user modify pwd int;

    alter table user drop pwd;

   

   删除表:

    drop table user;

    

   常用的命令:

    use day06;

    show tables;

    desc user;

    show create table user;

   

  DML:

   对象:记录(行)

   关键词:insert update delete

   插入:

    insert into user values(字段值1,字段值2,...);-- 所有的字段

    insert into user(字段1,字段2....) values(字段值1,字段值2);-- 插入指定的字段

   更新:

    update user set 字段=字段值1,字段2=字段值2 where 条件;

   删除:

    delete from user where 条件;

   扩展:

    以后开发中很少使用delete,数据无价,删除有物理和逻辑(常用),

     逻辑删除一般会在表中添加一个字段(isdel:若值为1,代表删除了;若为0代表没有删除),

     此时的删除操作变成了更新操作.

  DQL:

   select ... from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段;

   执行顺序:

    1.确定数据来自那张表 from

    2.是否需要筛选 where 

    3.是否需要分组 group by

    4.分组后是否需要筛选 having

    5.是否需要排序 order by

    6.确定显示那些数据. select

  DCL:用户 权限 事务

////////////////////////

auto_increment 自增

truncate 干掉表,重新创建 和delete的区别

数据类型:

 int 和 varchar(size):可变长度

 date time datetime timestamp

////////////////////////////////////

多表的操作:

 表与表之间的关系:

  一对多:

   在多表的一方添加一个外键,外键的名称一般是主表名称_id,外键的类型和主表的主键的类型保持一致

   为了保证数据的有效性和完整性,

    需要在多表上添加外键约束

     格式:

      alter table 多表 add [constraint [外键的名称]] foreign key(外键名称) references 主表名称(主键);

  多对多:

   添加一张中间表,存放两张表的主键,就可以将多对多拆分成两个一对多了

   为了保证数据的有效性和完整性,

    需要在中间表添加两个外键约束

  一对一:(了解)

   1.两个实体合二为一(字段比较少)

   2.将一张表的主键添加外键约束即可

/////////////////////////////

多表的查询:

 内连接:

  显式:

   select a.*,b.* from a join b on 条件;

  隐式:

   select a.*,b.* from a,b where 条件;

 外连接:

  左外连接:

   select a.*,b.* from a left join b on 条件;

   以a为主,展示所有数据,根据条件关联查询b表,满足条件则展示,不满足的话以null显示

 子查询::

  一个查询依赖于另一个查询.

//////////////////////////////////////

案例1-通过jdbc完成单表的curd操作:

需求:

 对分类表完成操作.

技术分析:

 jdbc

///////////////////////

jdbc:

 java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)

 驱动:jdbc的实现类.由数据库厂商提供.

 我们就可以通过一套规范操作不同的数据库了(多态)

 jdbc作用:

  连接数据库

  发送sql语句

  处理结果

 

jdbc操作步骤:★

 1.数据库和表

 2.创建一个项目

 3.导入驱动jar包

 4.编码:

  注册驱动

  获取连接

  编写sql

  创建预编译的语句执行者

  设置参数

  执行sql

  处理结果

  释放资源

 

 初始化数据库和表:

  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‘,‘书籍‘);

 

 IDE打开之后

  1.修改字符集 utf-8

  2.新建 java项目

  3.使用的jdk为自己的jdk 不用使用内置

 

 使用junit单元测试

  要求:

   1.方法是public void xxx(){}

   2.在方法上添加 @Test

   3.在@Test 按下 ctrl+1(快速锁定错误)

   4.在方法上右键 run as -->junit 就可以执行方法了.

jdbc-api详解:

 所有的包 都是 java.sql 或者 javax.sql

 

 DriverManager:管理了一组jdbc的操作 类

  常用方法:

   了解:注册驱动 

    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();

 

   掌握:获取连接

    static Connection getConnection(String url, String user, String password) 

     参数1:告诉我们连接什么类型的数据库及连接那个数据库

        协议:数据库类型:子协议 参数

      mysql: jdbc:mysql://localhost:3306/数据库名称

      oracle: jdbc:oracle:[email protected]:[email protected]实例

      

     参数2:账户名 root

     参数3:密码

 

 

 (了解)Driver:java.sql 接口 驱动

 Connection:连接 接口

  常用方法:

   获取语句执行者:

    (了解)Statement createStatement() :获取普通的语句执行者 会出现sql注入问题

    ★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者

    (了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者

 

   了解:

    setAutoCommit(false) :手动开启事务

    commit():提交事务

    rollback():事务回滚

 

 Statement:语句执行者 接口

 PreparedStatement:预编译语句执行者 接口

  常用方法:

   设置参数:

    setXxx(int 第几个问号,Object 实际参数);

     常见的方法:

       setInt

       setString

       setObject

   

   执行sql:

     ResultSet executeQuery() :执行 r 语句 返回值:结果集

     int executeUpdate() :执行cud 语句 返回值:影响的行数

 

 

 ResultSet:结果集 接口

  执行查询语句之后返回的结果

   常用方法:

    boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false

     光标一开始处于第一条记录的上面

    

    获取具体内容

     getXxx(int|string)

      若参数为int :第几列

      若参数为string:列名(字段名)

     例如:

      获取cname的内容可以通过

       getString(2)

       getString("cname")

     常用方法:

      getInt

      getString 也可以获取int值

      getObject 可以获取任意

///////////////////////

常见的配置文件格式:

 1.properties

  里面内容的格式 key=value

 2.xml

/////////////////

若我们的配置文件为properties,并且放在src目录下.

我们可以通过 ResourceBundle工具快速获取里面的配置信息

 使用步骤:

  1.获取ResourceBundle 对象:

   static ResourceBundle getBundle("文件名称不带后缀名") 

  2.通过ResourceBundle 对象获取配置信息 

   String getString(String key) :通过执行key获取指定的value

//////////////////////

案例2-通过连接池(数据源)优化我们的操作.

需求:

 使用jdbc的时候,没操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作.

技术分析:

 连接池

////////////////////

连接池概述:

 管理数据库的连接,

 作用:

  提高项目的性能.

 就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.

 所有的连接池必须实现一个接口 javax.sql.DataSource接口

 

 获取连接方法:

  Connection getConnection() 

 归还连接的方法就是以前的释放资源的方法.调用connection.close();

自定义一个连接池(理解思想)

 

常用连接池:

 DBCP

 C3P0

///////////////////

增前方法

 1.继承

 2.装饰者模式(静态代理)

 3.动态代理

//////////////

装饰者模式:★★★

 使用步骤:

  1.装饰者和被装饰者实现同一个接口或者继承同一个类

  2.装饰者中要有被装饰者的引用

  3.对需要增强的方法进行加强

  4.对不需要加强的方法调用原来方法

 ////////////////////////////////////

 常用的连接池:

 DBCP:(理解)

  apache组织

  使用步骤:

   1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)

   2.使用api

    a.硬编码

     //创建连接池

     BasicDataSource ds = new BasicDataSource();

     

     //配置信息

     ds.setDriverClassName("com.mysql.jdbc.Driver");

     ds.setUrl("jdbc:mysql:///day07");

     ds.setUsername("root");

     ds.setPassword("1234");

    b.配置文件

     实现编写一个properties文件

     //存放配置文件

     Properties prop = new Properties();

     prop.load(new FileInputStream("src/dbcp.properties"));

     //设置

     //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");

     

     //创建连接池

     DataSource ds = new BasicDataSourceFactory().createDataSource(prop);

 C3P0:(★)

  hibernate和spring使用

  有自动回收空闲连接的功能.

  使用步骤:

   1.导入jar包(c3p0-0.9.1.2.jar)

   2.使用api

    a.硬编码(不推荐)

     new ComboPooledDataSource()

    b.配置文件

     配置文件的名称:c3p0.properties 或者 c3p0-config.xml

     配置文件的路径:src下

    

     编码只需要一句话

      new ComboPooledDataSource()//使用默认的配置

      new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默认的配置

      

////////////////////////////

案例3-使用dbutils完成curd操作

技术分析:

 dbutils

dbutils:

 是apache组织的一个工具类,jdbc的框架,更方便我们使用

 使用步骤:

  1.导入jar包(commons-dbutils-1.4.jar)

  2.创建一个queryrunner类

   queryrunner作用:操作sql语句

    构造方法:

     new QueryRunner(Datasource ds);

  3.编写sql

  4.执行sql

   query(..):执行r操作

   update(...):执行cud操作

////////////////////////////

核心类或接口

 QueryRunner:类名

  作用:操作sql语句

  构造器:

   new QueryRunner(Datasource ds);

  注意:

   底层帮我们创建连接,创建语句执行者 ,释放资源.

  常用方法:

   query(..):

   update(..):

 

 DbUtils:释放资源,控制事务 类

  closeQuietly(conn):内部处理了异常

  commitAndClose(Connection conn):提交事务并释放连接

  ....

 

 ResultSetHandler:封装结果集 接口

  

   ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler

   

   (了解)ArrayHandler, 将查询结果的第一条记录封装成数组,返回

   (了解)ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回

   ★★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回

   ★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.

   (了解)ColumnListHandler, 将查询结果的指定一列放入list中返回 

   (了解)MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回

   ★MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回

   ★ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值

  

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//////////////////////////////////

上午回顾:

jdbc:

 java语言操作数据库

 jdbc是oracle公司指定的一套规范,

 驱动:jdbc的实现类,由数据库厂商提供.

jdbc操作步骤:

 1.导入驱动jar包

 2.注册驱动

 3.获取连接

 4.编写sql

 5.获取语句执行者

  PreparedStatement st=conn.prepareStatement(sql);

 6.设置参数

  st.setXxx(int 第几个问号,Object 实参);

 7.执行sql

  ResultSet rs=st.executeQuery();

  int i=st.executeUpdate();

 8.处理结果

  若是resultset

   while(rs.next()){

    rs.getXxx(int|String)

   }

 9.释放资源

////////////////////////////////////////

获取src目录下的properties格式的配置文件

 ResourceBundle bundle=ResourceBundle.getBundle("不带后缀名的文件名");

 String value = bundle.getString("key"); 

////////////////////////

自定义连接池:

增强方法:

 1.继承

 2.装饰者模式(静态代理)

 3.动态代理

///////////////

装饰者模式(静态代理)

 1.装饰者和被装饰者实现同一个接口或者继承同一个类

 2.在装饰者中要有被装饰者的引用

 3.对需要增强的方法进行加强

 4.对不需要加强的方法调用原来方法

///////////////////

常见连接池:

 dbcp:

 c3p0:★

  配置文件:

   名称:c3p0.properties或者 c3p0-config.xml

   位置:src下

  使用:

   new ComboPooledDataSource()

////////////////

dbutils:

 工具类,封装了jdbc的操作.

 使用步骤:

  1.导入jar包

  2.创建queryrunner类

  3.编写sql

  4.执行sql

queryrunner:操作sql语句

 构造器:

  new queryrunner()

 方法:

  query(..)

  update(..)

ResultSetHandler:封装结果集

 BeanHandler

 BeanListHandler

 MapListHandler

 ScalarHandler

 

 

 

 

 

 

 

 

 

 

 

 

回顾:

sql

 sql分类:

  DDL:

   对象:数据库和表

   关键词:create alter drop truncate

   创建数据库:create database day06;

   删除数据库: drop database day06;

   创建表:create table user(

    id int primark key auto_increment,

    username varchar(20)

   );

   

   修改表:

    alter table user rename to user10;

    alter table user add password varchar(20);

    alter table user change password pwd varchar(20);

    alter table user modify pwd int;

    alter table user drop pwd;

   

   删除表:

    drop table user;

    

   常用的命令:

    use day06;

    show tables;

    desc user;

    show create table user;

   

  DML:

   对象:记录(行)

   关键词:insert update delete

   插入:

    insert into user values(字段值1,字段值2,...);-- 所有的字段

    insert into user(字段1,字段2....) values(字段值1,字段值2);-- 插入指定的字段

   更新:

    update user set 字段=字段值1,字段2=字段值2 where 条件;

   删除:

    delete from user where 条件;

   扩展:

    以后开发中很少使用delete,数据无价,删除有物理和逻辑(常用),

     逻辑删除一般会在表中添加一个字段(isdel:若值为1,代表删除了;若为0代表没有删除),

     此时的删除操作变成了更新操作.

  DQL:

   select ... from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段;

   执行顺序:

    1.确定数据来自那张表 from

    2.是否需要筛选 where 

    3.是否需要分组 group by

    4.分组后是否需要筛选 having

    5.是否需要排序 order by

    6.确定显示那些数据. select

  DCL:用户 权限 事务

////////////////////////

auto_increment 自增

truncate 干掉表,重新创建 和delete的区别

数据类型:

 int 和 varchar(size):可变长度

 date time datetime timestamp

////////////////////////////////////

多表的操作:

 表与表之间的关系:

  一对多:

   在多表的一方添加一个外键,外键的名称一般是主表名称_id,外键的类型和主表的主键的类型保持一致

   为了保证数据的有效性和完整性,

    需要在多表上添加外键约束

     格式:

      alter table 多表 add [constraint [外键的名称]] foreign key(外键名称) references 主表名称(主键);

  多对多:

   添加一张中间表,存放两张表的主键,就可以将多对多拆分成两个一对多了

   为了保证数据的有效性和完整性,

    需要在中间表添加两个外键约束

  一对一:(了解)

   1.两个实体合二为一(字段比较少)

   2.将一张表的主键添加外键约束即可

/////////////////////////////

多表的查询:

 内连接:

  显式:

   select a.*,b.* from a join b on 条件;

  隐式:

   select a.*,b.* from a,b where 条件;

 外连接:

  左外连接:

   select a.*,b.* from a left join b on 条件;

   以a为主,展示所有数据,根据条件关联查询b表,满足条件则展示,不满足的话以null显示

 子查询::

  一个查询依赖于另一个查询.

//////////////////////////////////////

案例1-通过jdbc完成单表的curd操作:

需求:

 对分类表完成操作.

技术分析:

 jdbc

///////////////////////

jdbc:

 java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)

 驱动:jdbc的实现类.由数据库厂商提供.

 我们就可以通过一套规范操作不同的数据库了(多态)

 jdbc作用:

  连接数据库

  发送sql语句

  处理结果

 

jdbc操作步骤:★

 1.数据库和表

 2.创建一个项目

 3.导入驱动jar包

 4.编码:

  注册驱动

  获取连接

  编写sql

  创建预编译的语句执行者

  设置参数

  执行sql

  处理结果

  释放资源

 

 初始化数据库和表:

  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‘,‘书籍‘);

 

 IDE打开之后

  1.修改字符集 utf-8

  2.新建 java项目

  3.使用的jdk为自己的jdk 不用使用内置

 

 使用junit单元测试

  要求:

   1.方法是public void xxx(){}

   2.在方法上添加 @Test

   3.在@Test 按下 ctrl+1(快速锁定错误)

   4.在方法上右键 run as -->junit 就可以执行方法了.

jdbc-api详解:

 所有的包 都是 java.sql 或者 javax.sql

 

 DriverManager:管理了一组jdbc的操作 类

  常用方法:

   了解:注册驱动 

    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();

 

   掌握:获取连接

    static Connection getConnection(String url, String user, String password) 

     参数1:告诉我们连接什么类型的数据库及连接那个数据库

        协议:数据库类型:子协议 参数

      mysql: jdbc:mysql://localhost:3306/数据库名称

      oracle: jdbc:oracle:[email protected]:[email protected]实例

      

     参数2:账户名 root

     参数3:密码

 

 

 (了解)Driver:java.sql 接口 驱动

 Connection:连接 接口

  常用方法:

   获取语句执行者:

    (了解)Statement createStatement() :获取普通的语句执行者 会出现sql注入问题

    ★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者

    (了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者

 

   了解:

    setAutoCommit(false) :手动开启事务

    commit():提交事务

    rollback():事务回滚

 

 Statement:语句执行者 接口

 PreparedStatement:预编译语句执行者 接口

  常用方法:

   设置参数:

    setXxx(int 第几个问号,Object 实际参数);

     常见的方法:

       setInt

       setString

       setObject

   

   执行sql:

     ResultSet executeQuery() :执行 r 语句 返回值:结果集

     int executeUpdate() :执行cud 语句 返回值:影响的行数

 

 

 ResultSet:结果集 接口

  执行查询语句之后返回的结果

   常用方法:

    boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false

     光标一开始处于第一条记录的上面

    

    获取具体内容

     getXxx(int|string)

      若参数为int :第几列

      若参数为string:列名(字段名)

     例如:

      获取cname的内容可以通过

       getString(2)

       getString("cname")

     常用方法:

      getInt

      getString 也可以获取int值

      getObject 可以获取任意

///////////////////////

常见的配置文件格式:

 1.properties

  里面内容的格式 key=value

 2.xml

/////////////////

若我们的配置文件为properties,并且放在src目录下.

我们可以通过 ResourceBundle工具快速获取里面的配置信息

 使用步骤:

  1.获取ResourceBundle 对象:

   static ResourceBundle getBundle("文件名称不带后缀名") 

  2.通过ResourceBundle 对象获取配置信息 

   String getString(String key) :通过执行key获取指定的value

//////////////////////

案例2-通过连接池(数据源)优化我们的操作.

需求:

 使用jdbc的时候,没操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作.

技术分析:

 连接池

////////////////////

连接池概述:

 管理数据库的连接,

 作用:

  提高项目的性能.

 就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.

 所有的连接池必须实现一个接口 javax.sql.DataSource接口

 

 获取连接方法:

  Connection getConnection() 

 归还连接的方法就是以前的释放资源的方法.调用connection.close();

自定义一个连接池(理解思想)

 

常用连接池:

 DBCP

 C3P0

///////////////////

增前方法

 1.继承

 2.装饰者模式(静态代理)

 3.动态代理

//////////////

装饰者模式:★★★

 使用步骤:

  1.装饰者和被装饰者实现同一个接口或者继承同一个类

  2.装饰者中要有被装饰者的引用

  3.对需要增强的方法进行加强

  4.对不需要加强的方法调用原来方法

 ////////////////////////////////////

 常用的连接池:

 DBCP:(理解)

  apache组织

  使用步骤:

   1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)

   2.使用api

    a.硬编码

     //创建连接池

     BasicDataSource ds = new BasicDataSource();

     

     //配置信息

     ds.setDriverClassName("com.mysql.jdbc.Driver");

     ds.setUrl("jdbc:mysql:///day07");

     ds.setUsername("root");

     ds.setPassword("1234");

    b.配置文件

     实现编写一个properties文件

     //存放配置文件

     Properties prop = new Properties();

     prop.load(new FileInputStream("src/dbcp.properties"));

     //设置

     //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");

     

     //创建连接池

     DataSource ds = new BasicDataSourceFactory().createDataSource(prop);

 C3P0:(★)

  hibernate和spring使用

  有自动回收空闲连接的功能.

  使用步骤:

   1.导入jar包(c3p0-0.9.1.2.jar)

   2.使用api

    a.硬编码(不推荐)

     new ComboPooledDataSource()

    b.配置文件

     配置文件的名称:c3p0.properties 或者 c3p0-config.xml

     配置文件的路径:src下

    

     编码只需要一句话

      new ComboPooledDataSource()//使用默认的配置

      new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默认的配置

      

////////////////////////////

案例3-使用dbutils完成curd操作

技术分析:

 dbutils

dbutils:

 是apache组织的一个工具类,jdbc的框架,更方便我们使用

 使用步骤:

  1.导入jar包(commons-dbutils-1.4.jar)

  2.创建一个queryrunner类

   queryrunner作用:操作sql语句

    构造方法:

     new QueryRunner(Datasource ds);

  3.编写sql

  4.执行sql

   query(..):执行r操作

   update(...):执行cud操作

////////////////////////////

核心类或接口

 QueryRunner:类名

  作用:操作sql语句

  构造器:

   new QueryRunner(Datasource ds);

  注意:

   底层帮我们创建连接,创建语句执行者 ,释放资源.

  常用方法:

   query(..):

   update(..):

 

 DbUtils:释放资源,控制事务 类

  closeQuietly(conn):内部处理了异常

  commitAndClose(Connection conn):提交事务并释放连接

  ....

 

 ResultSetHandler:封装结果集 接口

  

   ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler

   

   (了解)ArrayHandler, 将查询结果的第一条记录封装成数组,返回

   (了解)ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回

   ★★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回

   ★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.

   (了解)ColumnListHandler, 将查询结果的指定一列放入list中返回 

   (了解)MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回

   ★MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回

   ★ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值

  

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//////////////////////////////////

上午回顾:

jdbc:

 java语言操作数据库

 jdbc是oracle公司指定的一套规范,

 驱动:jdbc的实现类,由数据库厂商提供.

jdbc操作步骤:

 1.导入驱动jar包

 2.注册驱动

 3.获取连接

 4.编写sql

 5.获取语句执行者

  PreparedStatement st=conn.prepareStatement(sql);

 6.设置参数

  st.setXxx(int 第几个问号,Object 实参);

 7.执行sql

  ResultSet rs=st.executeQuery();

  int i=st.executeUpdate();

 8.处理结果

  若是resultset

   while(rs.next()){

    rs.getXxx(int|String)

   }

 9.释放资源

////////////////////////////////////////

获取src目录下的properties格式的配置文件

 ResourceBundle bundle=ResourceBundle.getBundle("不带后缀名的文件名");

 String value = bundle.getString("key"); 

////////////////////////

自定义连接池:

增强方法:

 1.继承

 2.装饰者模式(静态代理)

 3.动态代理

///////////////

装饰者模式(静态代理)

 1.装饰者和被装饰者实现同一个接口或者继承同一个类

 2.在装饰者中要有被装饰者的引用

 3.对需要增强的方法进行加强

 4.对不需要加强的方法调用原来方法

///////////////////

常见连接池:

 dbcp:

 c3p0:★

  配置文件:

   名称:c3p0.properties或者 c3p0-config.xml

   位置:src下

  使用:

   new ComboPooledDataSource()

////////////////

dbutils:

 工具类,封装了jdbc的操作.

 使用步骤:

  1.导入jar包

  2.创建queryrunner类

  3.编写sql

  4.执行sql

queryrunner:操作sql语句

 构造器:

  new queryrunner()

 方法:

  query(..)

  update(..)

ResultSetHandler:封装结果集

 BeanHandler

 BeanListHandler

 MapListHandler

 ScalarHandler

 

以上是关于jdbc基础的主要内容,如果未能解决你的问题,请参考以下文章

JDBC编程JAVA

JDBC 基础

java基础之JDBC二:基础应用

JDBC基础

JDBC的基础原理

通过题目掌握Spring的数据库开发基础概念 (学习通,作业二,详细答案解析)