jdbc基础

回顾:java

sqlmysql

 sql分类:spring

  DDL:sql

   对象:数据库和表数据库

   关键词:create alter drop truncateapache

   建立数据库:create database day06;api

   删除数据库: 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

  处理结果

  释放资源

 import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DBConnection

{

public static void main(String[] args)

{

String driver = "com.mysql.jdbc.Driver";

//localhost指本机,也能够用本地ip地址代替,3306为MySQL数据库的默认端口号,“user”为要链接的数据库名

String url = "jdbc:mysql://localhost:3306/user";

//填入数据库的用户名跟密码

String username = "test";

String password = "test";

String sql = "select * from user";//编写要执行的sql语句,此处为从user表中查询全部用户的信息

try

{

Class.forName(driver);//加载驱动程序,此处运用隐式注册驱动程序的方法

}

catch(ClassNotFoundException e)

{

e.printStackTrace();

}

try

{

Connection con = DriverManager.getConnection(url,username,password);//建立链接对象

Statement st = con.createStatement();//建立sql执行对象

ResultSet rs = st.executeQuery(sql);//执行sql语句并返回结果集

while(rs.next())//对结果集进行遍历输出

{

System.out.println("username: "+rs.getString(1));//经过列的标号来得到数据

System.out.println("useradd: "+rs.getString("useradd"));//经过列名来得到数据

System.out.println("userage: "+rs.getInt("userage"));

}

//关闭相关的对象 从最外层 开始关闭

if(rs != null)

{

try

{

rs.close();

}

catch(SQLException e)

{

e.printStackTrace();

}

}

if(st != null)

{

try

{

st.close();

}

catch(SQLException e)

{

e.printStackTrace();

}

}

if(con !=null)

{

try

{

con.close();

}

catch(SQLException e)

{

e.printStackTrace();

}

}

}

catch(SQLException e)

{

e.printStackTrace();

}

}

}

 初始化数据库和表:

  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:thin@localhost:1521@实例

      

     参数2:帐户名 root

     参数3:密码

 

 

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

 Connection:链接 接口

  经常使用方法:

   获取语句执行者:

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

 

攻击

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。若是代码使用存储过程,而这些存储过程做为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能致使攻击者使用应用程序登录在数据库中执行命令。相关的SQL注入能够经过测试工具pangolin进行。若是应用程序使用特权太高的账户链接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者做为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中自己的变量处理不当,使应用程序存在安全隐患。这样,用户就能够提交一段数据库查询的代码,根据程序返回的结果,得到一些敏感的信息或者控制整个服务器,因而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:thin@localhost:1521@实例

      

     参数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

相关文章
相关标签/搜索