jdbc

jdbc

一、jdbc

1.基础知识(了解)
(1)简介:java语言操作数据库,是oracle公司制定的一套规范(一套接口).
(2)驱动:jdbc的实现类,由数据库厂商提供.
(3)作用(了解):连接数据库;发送sql语句;处理结果
  
2.操作步骤 ★
(1)数据库和表
(2)创建一个项目
(3)导入驱动jar包(步骤:项目右键-New-Folder(命名为lib)-将jar包复制到lib中)
(4)编码
    注册驱动
        格式:Class.forName("全限定名");//包名+类名   
        例如:Class.forName("com.mysql.jdbc.Driver");
    获取连接
        格式:static Connection getConnection(String url, String user, String password) 
        例如:Connection conn = 
                  DriverManager.getConnection("jdbc:mysql://loacalhost:3306/dayxx","root","123");
    编写sql
    获取语句执行者
        例如:PreparedStatement st=conn.prepareStatement(sql);
    设置参数
        格式:st.setXxx(int 第几个问号,Object 实参);
        例如:st.setString(1, "c005");
    执行sql
        例如:ResultSet rs=st.executeQuery();
                  int i=st.executeUpdate();
    处理结果
        格式:若是resultset
            while(rs.next()){
                rs.getXxx(int|String);
            }
        例如:
            while(rs.next()){
                rs.getString("cid");
            }
    释放资源

3.使用junit单元测试(了解)
  要求:
(1)方法是public void xxx(){}
(2)在方法上添加 @Test
(3)在@Test 按下 ctrl+1(快速锁定错误)
(4)在方法上右键 run as  -->junit 就可以执行方法了.    

4.jdbc-api详解(了解)
  所有的包 都是 java.sql 或者 javax.sql
(1)DriverManager:管理了一组jdbc的操作 类
    常用方法:
        注册驱动(了解)    
            static void registerDriver(Driver driver) :
            将类加载到内存中:
                方式1: ★ Class.forName("全限定名");//包名+类名   
                    例如: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 接口 驱动
(2)Connection:连接 接口
    常用方法:
        获取语句执行者:
            (了解)Statement createStatement() :获取普通的语句执行者  会出现sql注入问题
            ★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者
            (了解)CallableStatement prepareCall(String sql) :获取调用存储过程的语句执行者
        (了解):
            setAutoCommit(false) :手动开启事务
            commit()  :提交事务
            rollback():事务回滚
    Statement:语句执行者 接口
(3)PreparedStatement:预编译语句执行者 接口
    常用方法:
        设置参数:
            setXxx(int 第几个问号,Object 实际参数);
                常见的方法:
                     setInt
                     setString
                     setObject
        执行sql:
             ResultSet executeQuery():执行 r 语句 返回值:结果集
             int executeUpdate()         :执行cud 语句 返回值:影响的行数
(4)ResultSet:结果集 接口
    执行查询语句之后返回的结果
    常用方法:
        boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有则返回false
                       光标一开始处于第一条记录的上面
        获取具体内容:
            格式:
                getXxx(int|string)
                若参数为int   :第几列
                若参数为string:列名(字段名)
            例如:
                获取cname的内容可以通过
                getString(2)
                getString("cname")
            常用方法:
                getInt
                getString 也可以获取int值
                getObject 可以获取任意

5.配置文件
(1)常见的配置文件格式
    a.properties  里面内容的格式 key=value
    b.xml
(2)获取src目录下的properties格式的配置文件
    使用步骤:
    a.获取ResourceBundle(获取资源文件里面的内容)对象:
    格式:static ResourceBundle getBundle("文件名称不带后缀名") 
    例如:ResourceBundle bundle=ResourceBundle.getBundle("不带后缀名的文件名");
    b.通过ResourceBundle对象获取配置信息(获取值) 
    格式:String getString(String key) :通过指定key获取指定的value
    例如:String value = bundle.getString(key); 
    


二、连接池

1.基础知识(了解)
(1)概述:管理数据库的连接
    就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.
    所有的连接池必须实现一个接口 javax.sql.DataSource接口
(2)作用:提高项目的性能.
(3)使用:
    获取连接方法:Connection getConnection() 
    归还连接的方法就是以前的释放资源的方法.调用conn.close();
    
2.自定义连接池(理解思想)

3.增强方法
(1)继承
(2)静态代理(装饰者模式)
(3)动态代理

4.装饰者模式(静态代理)★★★
  使用步骤:
(1)装饰者和被装饰者实现同一个接口或者继承同一个类
(2)在装饰者中要有被装饰者的引用
(3)对需要增强的方法进行加强
(4)对不需要加强的方法调用原来方法

5.常见连接池    
(1)DBCP(DataBase Connection Pool)数据库连接池:(了解) apache组织        
    使用步骤:
        a.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)
        b.使用api
            方式一:硬编码
                //创建连接池
                BasicDataSource ds = new BasicDataSource();
                //配置信息
                ds.setDriverClassName("com.mysql.jdbc.Driver");
                ds.setUrl("jdbc:mysql:///day07");
                ds.setUsername("root");
                ds.setPassword("1234");
            方式二:配置文件
                事先编写一个properties文件
                //存放配置文件
                Properties prop = new Properties();
                prop.load(new FileInputStream("src/dbcp.properties"));
                //设置
                //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");
                //创建连接池
                DataSource ds = new BasicDataSourceFactory().createDataSource(Properties prop);
(2)C3P0:(★) hibernate和spring使用,有自动回收空闲连接的功能.
    使用步骤:
        a.导入jar包(c3p0-0.9.1.2.jar)
        b.使用api
            方式一:硬编码(不推荐)
                //创建连接池
                ComboPooledDataSource ds = new ComboPooledDataSource();
                //配置信息 类DBCP
            方式二:配置文件
                配置文件的名称:c3p0.properties 或者 c3p0-config.xml
                配置文件的路径:src下
                使用:(通过构造器创建)
                    //使用默认的配置
                    new ComboPooledDataSource()
                    //使用命名的配置 若配置的名字找不到,使用默认的配置
                    new ComboPooledDataSource(String configName)

    
三、dbutils

1.简介:是apache组织的一个工具类,封装了jdbc的操作(jdbc框架).
    
2.使用步骤
(1)导入jar包(commons-dbutils-1.4.jar)
(2)创建一个queryrunner类
    queryrunner作用:操作sql语句
    构造方法:new QueryRunner(Datasource ds);
(3)编写sql
(4)执行sql
    query(..)  :执行r操作
    update(...):执行cud操作
    例如:qr.update(sql, "c201","厨房用品");

3.核心类或接口
(1)QueryRunner:类名
    作用:操作sql语句
    构造器:new QueryRunner(Datasource ds);
    注:底层帮我们创建连接,创建语句执行者,释放资源.
    常用方法:
        query(..):
        update(..):
(2)DbUtils(了解):释放资源,控制事务 类
    closeQuietly(Connection conn)  :内部处理了异常
    commitAndClose(Connection conn):提交事务并释放连接
    ....
(3)ResultSetHandler:封装结果集 接口     
     (了解)ArrayHandler: 将查询结果的第一条记录封装成数组,返回
     (了解)ArrayListHandler: 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回
     ★★BeanHandler: 将查询结果的第一条记录封装成指定的bean对象,返回
     ★★BeanListHandler: 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中返回.
     (了解)ColumnListHandler: 将查询结果的指定一列放入list中返回 
     (了解)MapHandler: 将查询结果的第一条记录封装成map,字段名作为key,值为value返回
     ★MapListHandler: 将查询结果的每一条记录封装成map集合,将每一个map集合放入list中返回
     ★ScalarHandler:针对于聚合函数 例如:count(*) 返回的是一个Long值
    


四、常见案例

1.案例一-通过jdbc完成单表的curd操作
(1)需求:对分类表完成操作.
(2)技术分析:jdbc(java数据库连接)
    
2.案例二-通过连接池(数据源)优化我们的操作
(1)需求:使用jdbc的时候,每操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作.
(2)技术分析:连接池

3.案例三-使用dbutils完成curd操作
(1)需求:使用dbutils完成curd操作
(2)技术分析:dbutils
    
    
    
    
    
    
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值