A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区 黑马粉丝团   /  2018-5-28 17:29  /  6107 人查看  /  53 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

同学们,今天继续学习了JDBC,重点就是对连接池的理解C3P0连接池DBUtils的使用

今日需要掌握的有:
  • 能够用自己的话阐述什么是连接池,有什么好处?
  • 会使用Druid和C3P0连接池改写工具类
  • 会使用DBUtils对数据进行增删改查
  • 能够用自己的话解释几个易混淆的概念:JDBC、JDBCUtils、C3P0、Druid、DBUtils

请同学们按照如上要求,总结今日所学。




53 个回复

倒序浏览
本帖最后由 13163997058 于 2018-5-29 11:49 编辑

王刘锁
看着写过的代码才能想起来今天学习了什么!首先是事务的处理,主要就是一个Connection接口,它有两个作用一是创建连接二是管理事务! 这个接口中有一些方法用来管理事务.事务就是一组操作,这组操作的各个步骤要么全部成功要么全部失败.事务的管理方法:
开启事务:conn.setAutoCommit(false);括号内写false意思是不自动提交事务
提交事务:conn.commit();回滚事务:conn.rollback();
然后学习了连接池的工作原理,主要学习的是怎么自定义一个连接池当然这不是今天的重点,所以不多记录,能做到理解会用就可以!接下来学习的是一些开源的连接池像阿里巴巴的Druid,阿帕奇的C3PO,老师说重点掌握C3PO,那今天就多练习一下C3PO好了.敲了好多遍的代码结果做作业的时候又是一脸懵的去翻笔记,这真的很愁人!下面是凭记忆记录的,不知道能有多少错误!那种很麻烦的手动连接的方式就不写了,直接记配置文件的方式.
首先配置文件的注意事项:文件名字不能乱改,是固定的 c3po-config.xml
然后是里面的属性也不能改,都是系统认定的!那我们能改的只有具体的值classname,url,user,password,这些内容.
那c3po的创建连接池的方式是:ComboPooledDataSource dataSource = new ComboPooledDataSource();其它的好像就没有什么变化的了!
还有就是DBUtils工具类.不过今天没来得及练习.就不记录了,明天练习完了再添加!!
来补充一下昨天没写完的DBUtils,今天上午在敲完日常作业后准备去练习一下
DBUtils的CURD操作,结果创建好Java文件不知道怎么去写代码,后来去翻了笔记发现
笔记中也没有什么信息,最后去了百度百科去查了一下,大概有了一些理解,又去代码
中写了几遍,在这里记录一下自己的理解,首先DBUtils是一个工具类库,
它主要是封装了我们的JDBC代码,以前我们用JDBC来和数据库建立连接并做一些CRUD
的操作,那时候我们的代码会很繁琐而且重复性太高.后来我们可以自定义工具类把注
册驱动和建立连接的方法还有释放资源的方法放到工具类中,这样很大程度上简化我
们的代码,而且复用性提高很多,可是即便有了工具类还是代码还是不够完美,那么
DBUtils的作用就凸显出来了,它对JDBC的封装极大程度简化我们的代码,让我们可以
用两行代码就完成CRUD的操作,那我们去使用它就需要记住它的主要核心类
QueryRunner,首先我们需要通过构造方法来获取到QueryRunner对象,一种是无参
QueryRunner()创建的是一个没有连接的对象,操作数据库的时候还要创建连接比较麻
烦,但是可以手动管理事务,第二种是有参QueryRunner(DataaSource ds),这个构造参
数是一个连接池对象,在这里我们可以用我们之前定义的JDBCUtils2这个工具类来获
取C3PO的连接池,这个构造出来的对象不用我们再获取连接,而且是自动管理事务,
那重要的是要记住CRUD操作的方法,一个增删改,一个查询,查询还没学先不记录,
有参增删改:update(String sql,object...param);
无参增删改:update(Connection conn,String sql,object...param);
这里面直接写sql语句,后面的参数是解决sql注入问题的那个?对应的值,sql语句中有
多少?后面就有多少个值!而且顺序和类型必须对应!无参的不过是多给一个连接对象,
练习的时候我尝试用一个QueryRunner对象去同时执行多条sql语句结果没有报错,但
是这好像也没什么用!!

回复 使用道具 举报
常小天
今天继续学习JDBC的内容。首先学习的是JDBC的事务管理。事务管理的三个方法:setAutoCommit(Boolean AutoCommit)、commit()、rollBack()。需要注意的点有两个,一是在一个事务中三个方法要用同一个连接对象调用,二是rollBack()要放在捕获异常结构的catch{}。接下来学习的是连接池。所谓连接池,就是一个存放连接对象的容器,它内部已经创建了多个连接,当外部用户访问的时候,它就把内部的连接以remove()的形式取出来给用户使用,当用户使用结束后再以add()的方式归还给连接池。以此方式节约资源,提升效率。第三方连接池种类多样,今天重点学习的是C3P0连接池。使用C3P0连接池大步骤分3步,第一是导包,要将C3P0的jar包导入项目。第二步是添加配置文件。这一步很关键,稍有差错就会导致无法正常使用C3P0连接池。这里要注意三点,一是配置文件的存放路径必须是当前项目的SRC文件夹下,不能存放到其他文件夹,也不能存放到SRC文件夹的子文件夹中,二是配置文件的名称只能是C3P0-config.xml,三是配置文件中的格式和key的名称都只能使用C3P0所规定的内容,只有value值可以自行修改,所以这里建议直接拷贝现成的配置文件再加以修改来使用。这三点其实都只有一个目的,就是保证C3P0的底层代码能够顺利找到配置文件并加载。因为其底层代码是将配置文件路径写死的,所以一旦没有按照它的规定来添加配置文件,就会导致它找不到配置文件,找不到配置文件就无法连接数据库,之后的操作也就无从谈起。使用C3P0的第三步就是编写代码使用C3P0。根据构造创建C3P0连接池的对象即可,再拿链接库对象调用方法获取连接,后面的步骤与之前学习的内容相同。今天学习的最后一部分内容是DBUtils工具类,它就是一个简化JDBC代码的工具类,它将JDBC编码中的众多重复部分进行封装,让开发者可以以极其简洁的语句进行开发。首先创建核心类QueryRunner对象,其构造方法中传入一个C3P0链接库,第二步调用update方法进行数据库的增删改操作。
回复 使用道具 举报
本帖最后由 AsusCoder 于 2018-5-29 12:03 编辑

曾耀峰
一、初步学习事务   
事务在代码中的作用是当执行更新操作后,如果代码后面的代码存在异常,那么被更新的数据会返回原来的状态,确保数据不会因为代码异常而更新丢失。
掌握事务的3个方法:
开启事务:conn.setAutoCommit(false):在conn链接对象获取完后,就可以开启事务
提交事务:conn.commmit():当所有sql执行完毕后,可以提交事务
回滚事务:conn.rollback();写在catch代码块中,如果出现代码异常,会执行catch代码块中的回滚事务。
二、连接池      
1.理解:池在编程中通常理解为装某种数据的容器。   
   在JDBC中,如果每个用户的请求都是创建一个连接对象,使用完毕后销毁。这样在大规模用户的请求中,对内存是一种很沉重的负担。所以提出连接池的概念,连接池是装有连接对象的容器,使用连接的话,可以从连接池中进行获取,使用完成之后将连接还给连接池。连接池从内存中获取和归还的效率要远远高于创建连接对象和销毁的效率
2.自定义连接池
      在javax包中提供了一个连接池类DataSource,里面的getConnction()方法可以获得连接对象。编写自定义的连接池要有以下功能:1.连接池中预先存放一些定义好的连接对象 2.需要使用的时候,从连接池中获取;使用完毕后归还到连接池。
      编写步骤:
      1).实现接口:
          新建MyDataSource类,实现DataSource()接口。载入要实现的所有方法
      2).建立连接池:
          新建一个List<Connection>容器,代表一个连接池
      3).编写获取连接的方法:
          将接口方法getConnection() 提到前面,其他接口方法不必管。在里面添加:return list.remove(0);
      4).初始化连接对象
          在默认构造函数MyDataSource()中初始化N个连接对象,存放到集合List中。注意,在这里的建立的连接对象从JDBCUtils中获取。
          connList.add(JDBCUtils.getConnection());
      5).使用完毕归还:
          添加一个归还方法,void addBack(Connection conn) 里面写connList.add(conn);
     测试使用:
       (1)定义MyDataSource dataSource = new MyDataSource();
       (2)从链接池中获取连接:Connction conn = dataSource.getConnection();
       (3)使用完毕后,归还。dataSource.addBack(conn);
3.自定义连接池出现的问题与解决:
       1).问题:
         (1)使用接口的实现完成的构造:这种写法不方便程序的扩展
        (2)额外提供了方法归还连接:这种方式增加使用连接池的难度。
      2).解决方法:
          原来在Connction中式有一个close方法的,close方法完成了连接的销毁。做一个事情,将原有的连接的close方法改为归还。
          -(1).现在要做的事情是如何将原有的close方法的逻辑改为归还(增强一个类中的方法)
          -(2).如何增强一个类中的方法,有3种方式
           [1].使用继承的方式:
              继承这种方式是最为简单的,但是有条件是,必须控制这个类的构造
           [2].采用装饰者模式:
              装饰该类,使该类功能变得强大。比如,一个美女去整双眼皮,人还是这个人,只是比原来更漂亮,眼睛更大。
              -使用条件:
               一、增强的类和被增强的类实现相同的接口
               二、在增强的类中获得被增强的类的引用
           [3].动态代理(后面学习)
        3)装饰者模式增强自定义连接池类_实现步骤:
          [1].定义一个MyConnectionWrapper 实现Connction接口
          [2].初始化构造函数,Connction conn对象。
          [3].载入接口需要实现的方法,出现问题了:Connction中有40+个方法,而我们只需要一个close()方法
          [4].解决步骤3的问题,应该简化编程。提供一个模板类(模板类原封不动的将接口中的所有方法实现,但没有增强)
           编写一个装饰类继承模板类,在装饰类中只需要增强其中某一个方法既可。
             -ConnectionWrappter 原封不动实现 Connction接口
             -MyConnctionWrappter 继承 Connection方法,重写其中的close方法,改为归还.
          [5].改写自定义连接池工具类:
                      public Connection getConnection() throws SQLException {
                Connection conn = connList.remove(0);
                // 增强连接
                MyConnctionWrapper connWrapper = new MyConnctionWrapper(conn, connList);

                return connWrapper;
        }
          [6].去掉归还方法
     了解一下装饰者设计模式
三、c3p0——数据库连接池   
   c3p0是来自Apache提供的数据库连接池的工具类。
   从上面自定义连接池可以看出,自己写一个完美的连接池还是比较费劲的。使用有人写好的工具类就比较简便了。
  1.c3p0使用步骤:   
    (1)步骤1:建立c3p0-config.xml,在里面的默认配置标签<defalut-config>中,设置属性driverClass驱动器、jdbcUrl数据库地址、user数据库用户名、password密码。注意,属性名是固定的写法是固定的,不能改变。当创建数据库连接池对象ComboPooledDataSource datasource = new ComboPooledDataSource()时,会在src路径下查找c3p0-config.xml,自动读取里面的属性配置信息,完成要对连接的数据库基本信息的配置。         
  (2)步骤2:从连接池中获取连接对象。Connection conn = datasource.getConnection();   
   (3)步骤3:获取语句,执行语句,处理结果       (4)步骤4:归还连接。当调用conn.close()时,c3p0里面重写了close()方法,重写的功能是将连接对象放回到数据池容器中。         2.改写工具类:           
  从上面使用c3p0可以发现,每次使用一次就得创建一个连接池,是一种比创建连接还浪费内存的情况。这时候应该将工具类进行改写,把创建连接池做成一个全局静态常量:  
private static final ComboPooledDataSource datasource = new ComboPooledDataSource();  
  这样实例化的对象,就能全局使用。   
   3.总结c3p0作用:      
   1)创建连接池     
2)从连接池中获得连接对象  
   3)连接对象关闭后,自动归还到连接池。
四、DBUtils:   
    来自Apache提供的一个对JDBC进行简单封装的开源工具类库,使它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。   
原理:JDBC手写代码步骤繁多,并且很多代码是类似的,如获取代码中的链接,预编译SQL,释放资源等。因此将类似的代码进行抽取,制作成工具类。
五、今天和昨天总结:   
    因为JDBC原生代码操作的麻烦,我们制作了一个工具类JDBCUtils,封装了JDBC的代码中注册驱动,获取连接,释放资源的方法。很快我们在数据库连接中,发现使用连接对象创建销毁不符合实际开发情况,又学了连接池的概念,学习了两个开源连接池库druid(德鲁伊),c3p0。把原来获取连接变成获取连接池,修改了工具类,变成C3P0Utils。最后学习了DBUtils。完全简化代码,原来的十来行变成两行代码。   
   这就是面向对象封装的特性。
    装饰者模式属于编程设计模式中27个经典设计模式之一。算是第一次接触到,所以用了大幅总结去学自定义设计类。

回复 使用道具 举报 2 0
JDBC的事务管理:
setAutoCommit(false); 打开事务,并且关掉自动提交事务。
将comit()放在try里面的最后,rollback放到catch中,保证事务的一致性。

连接池:之所以用连接池,是因为频繁的创建和销毁连接对象是很浪费时间和消耗
资源的。把连接放入内存中,需要的时候再从内存中去获取,使用完之后再归还到
内存中,效率远远高于前者。

装饰者模式:

可以在不添加新方法的基础上,通过获取被增强类的引用,对增强类的方法进行增强
好比如去买一杯咖啡,获取咖啡的引用,然后我可以选择加糖,或者加牛奶,它本身还是
一杯咖啡,只是在这基础上我对它进行了一下修饰或者变化。

Druid连接池和C3P0的连接池使用方式差不太多,区别在于文件的配置,Druid文件
命名没有限制,C3P0的文件则固定为 c3p0-config.xml


DBUtils使用:
ResultSetHandler<List<User>>()查询多条记录存入对象的list集合中

List<User> list = queryRunner.query(sql,new ResultSetHandler<List<User>>())

ResultSetHandler<User>()查询单条记录存入对象中

User user = queryRunner.query(sql,new ResultSetHandler<User>())

ArrayHandler()将单条记录存入Object[]中

Object[] object = queryRunner.query(sql,new ArrayHandler())

ArrayListHandler()将多条记录存入Obejct[]的List集合中

List<Object[]> list= queryRunner.query(sql,new ArrayListHandler())

BeanHandler<User>((User.class));)将一条记录封装到一个JavaBean中

User user = queryRunner.query(sql, new BeanHandler<User>(User.class));

BeanListHandler<User>将多条记录封装到一个装有JavaBean的List集合中

List<User> list = queryRunner.query(sql, new BeanListHandler<User>(User.class));

MapHandler() 将一条记录存入Map集合中,key为列名

Map<String,Object> map = queryRunner.query(sql, new MapHandler())

MapListHandler() 将多条记录存入装有Map的List集合中

List<Map<String,Object>> list = queryRunner.query(sql, new MapListHandler());

ColumnListHandler()将数据中的某列的值存入List中

List<Object> list = queryRunner.query(sql,new ColumnListHandler("name"));

ScalarHandler()将单个值进行封装

Object object = queryRunner.query(sql,new ScalarHandler());

回复 使用道具 举报
柯威龙
今天首先学习了事务,事务的话有三个步骤开始事务,提交事务,回滚事务这三点.
其次学习了连接池,连接池的作用在于一次创建多个连接,将连接放入内存中,获得连接的时候从内存
取出,使用完归还回去.之前我们是释放资源把连接销毁掉,现在我们需要归还就不能销毁,所以学习了
增强close的方法,这样子就把销毁改成归还.方法有三种,继承,装饰者,动态代理.正常来说我们都是用装饰者
然后学了了DBCP但是有个比DBCP更简便的方法叫在做C3P0.然后还可以使用C3P0来修改工具类.C3P0就是今天的一个重点,
需要掌握.最后学习了DBUtils,这是一个相当于工具类的意思.使用DBUtils完成CRUD的操作.
回复 使用道具 举报
许剑鸿 webDay11

连接池: 用于存放connection对象  在连接池中预先放入connection对象 使用的时候取出用完之后放回
            节省内存和创建connection的时间

C3P0使用步骤:1 导包  2 设置参数(手动set参数或配置文件设置参数 配置文件名必须为c3p0-config.xml且只能放在src下)........

DBUtils增删改: 创建核心类对象QueryRunner 参数中传入连接池 使用核心类对象QueryRunner中的update()方法对数据库表数据的增删改操作

JDBC、 java 数据库连接 为多种数据库提供统一访问
JDBCUtils、自定义工具类 主要有注册驱动 获得连接 释放资源等方法
C3P0、开源连接池
Druid、开源连接池
DBUtils、工具类简化代码
回复 使用道具 举报
陈强
JDBC高级的一天

事务管理的API---三个操作
-开启事务---setAutoCommit
-提交事务---Commit
-回滚事务---rollback

连接池---就是一个容器,里面装有一定量的连接,供使用的时候直接从连接池获取,使用完成后再将连接归还给连接池.提高了效率.

C3P0---采用配置文件方式的使用
前提---src下有c3p0配置的XML文件,并build path c3p0的jar包
注意 : c3p0的XML配置文件中的名称不能改变,文件也必须要放在src目录下
New一个CombopooledDataSource 的对象,获得连接池 ( 此时该连接池对象里面已经有存在一定数量的连接 ),然后根据对象去获取连接,然后再进行sql语句的编写,预编译等操作.

DUBtils完成增删改的操作
创建核心类---QueryRunner
利用核心类进行增删改---queryRunner.update ( sql语句,参数 ( n个,与问号数一致 ) )
回复 使用道具 举报
谢洪彬:
今天学习了JDBC高级
Connection操作事务的三个操作
由连接对象开启事务
由连接对象提交事务
由连接对象回滚事务

C3p0连接池(其中存放了很多连接,用的时候拿出来,不用的时候归还)
1.导入jar包
2.配置文件
3.修改配置文件
注:文件名和文件的内容需要按固定格式定义
注:连接池中获取的connection连接调用close()方法是用于归还连接的
DBUtils工具类
减少代码的复用性,提高效率
核心类:QueryRunner
使用核心类调用update()方法可以完成增删改操作.
使用核心类调用Query()方法可以完成查询操作.
回复 使用道具 举报
陈昆明:
今天对连接池进行了初步的学习
1.对一个类进行增强的方法:  a.通过继承重写,但该方法只能是被增强类可以被继承的情况下才能使用;b.通过修饰者模式(也就是包装类),创建一个类实现接口(要被增强的类需要也实现这个接口),然后创建的类中需要引入
被增强类的对象,至于为什么要引入被增强类的方法,个人理解是因为,当我们只要对其中某写方法进行增强时,才需要引入,要不然其实直接来一个实现类就行了,全部实现方法就行.
2.druid连接池与c3p0连接池,连接池,顾名思义就是存放连接对象的池子(容器),之所以使用连接池的目的是为了提高执行效率.使用连接池的基本步骤:引入jar包,添加配置文件,配置文件包括文件名,路径,key值等都需要按照
别人的游戏规则来,不能随意修改;
3.DBUtils工具类(doubi工具类),使用极为简单,需要知道里面的两个类:QueryRunner与DBUtils,可以使用QueryRunner中的update方法与query方法进行增删改查
*DBUtils与C3p0连接池的结合使用时,可以通过第三方工具类来提供一个C3p0的连接池,避免连接池的重复创建,对资源造成浪费
回复 使用道具 举报
万冕

今天学了事物,只要是用conn去调用setAutoCommit(false)开启事务 ,commit提交事务  rollback回滚到未提交前的状态

连接池是一个存放连接对象的容器,它能在容器里预先产生几个连接对象,供用户使用,并且在用完后不是销毁,而是归还
因为连接池底层重写了close方法。

c3po是一个开源的连接池,先创建c3po的ComboPooledDataSource对象,直接调用getConnection获取连接对象,要在之前先导包
其他的增删改查步骤都一致,改变的地方只有获取连接的那一步

DButils是别人已经定义好了的工具类,大大的优化了代码量,只需要两行的代码,首先创建核心类QueryRunner 然后在调用里面的API就可以
更简化的完成增删改查
回复 使用道具 举报
叶身辉:
事务三个步骤(逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败。)
开启事务:start transaction;
提交事务:commit;
回滚事务:rollback;

test注解:
注意不要全部执行,点击方法名执行,

jdbc(用于执行sql的java语句):
五个步骤:贾琏欲执事,加载驱动,创建连接,输入SQL,执行SQL,释放资源

C3P0(工具类):
导入jar包:要导入mysql的连接包和c3p0的jar包
配置一个文件参数文件名固定,注意不能改原本的内容,只能更改值
Connection                        连接
PreparedStatement        解决了sql注入的问题,执行sql语句
ResultSet                        结果集
ComboPooledDataSource datasource = new ComboPooledDataSource();创建连接池的对象
datasource  连接池
注意connection的释放资源时,将连接返回到连接池

DBUtils:
要导入mysql的连接包和c3p0的jar包还有一个dbutils包
QueryRunner queryrunner = new QueryRunner(dataSource); 传入一个连接池对象
例句queryrunner.update("insert into user values(null,?,?,?,?)", "aaa", "246", "大白", 15);
如果是查询就用query
回复 使用道具 举报
江某人:
JDBC高级:
jdbc管理事务的API 有三步:
        setAutoCommit();开启事务
        commit();提交事务
        rollback();回滚事务

C3P0连接池的使用:
        引入DBCP连接池的jar包
将文件名命名为 c3p0-config.xml(不能改,固定这名字(暂时我只知道不能改))
        拷贝模版配置文件到SRC下,并修改

DBUtils(阿帕奇):
        DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
        DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
        Dbutils今天学习了:QueryRunner;  QueryRunner中提供对sql语句操作的API.
        update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作(今天还没有教查的)
回复 使用道具 举报
李志勇:
JDBC高级:
事务管理  三步骤:
Connection.setAutoCommit(boolean autocommit)  开启事务
          .commit(); 提交事务
          .rollback();回滚事务;
连接池:
连接池是装有连接的容器,使用连接的话,可以从连接池中进行获取,使用完成之后将连接归还给连接池。
c3p0开源连接池的使用,采用配置文件的方式:
导包   
        mysql-connector-java-5.0.8-bin.jar
        c3p0-0.9.1.2.jar

配置文件在src文件下c3p0-config.xml;
然后通过创建连接池ComboPooledDataSource dataSource = new ComboPooledDataSource();
从连接池获得连接   conn = dataSource.getConnection();
编写sql语句
预编译sql   pstmt = conn.prepareStatement(sql);
执行sql  pstmt.executeUpdate();或 rs = pstmt.executeQuery();
工具类的标准:{
        private static final ComboPooledDataSource dataSource=new ComboPooledDataSource();
       
        public static Connection getConnection() throws SQLException{
                 
                return dataSource.getConnection();
        }
        public static DataSource getDataSource(){
                return dataSource;
        }
        }
DBUtils的使用:
                QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
                qr.update("sql语句", sql语句中的问号赋值);
回复 使用道具 举报
李思贤:今天首先学了事务的三个方法:
        1:开始事务 setAutoCommit(Boolean)
        2:提交事务 commit();
        3:回滚事务 rollback();  这三个方法都有conn调用. 回滚事务放在catch中


连接池,就是存放连接对象的容器.
我们要求掌握c3p0连接池.需要做下面几个步骤,
        第一步:引入c3p0连接池的jar包.
第二步:配置文件,文件的名字一定要是c3p0-config.xml,里面的key不能随便乱改.

最后学习了DBUtils,可以非常简洁的书写代码,本来是十来行的代码,现在2行完成.
QueryRunner(DataSource ds);
方法:QueryRunner queryRunner = new QueryRunner(JDBCUtilsC3P0.getDataSource());
                queryRunner.update(“sql语句””...”);
回复 使用道具 举报
16weisong
今天学了JDBC高级,主要包括JDBC事务管理,连接池,Druid连接池,c3p0连接池和DBUtils工具类,主要掌握C3P0连接池和DBUtils工具类的使用即可,事务管理就三个方法.今天只需要把c3p0的使用多写几遍,和DBUtils一起,即可掌握
回复 使用道具 举报
游荣辉
总结
今天首先学了事务的三个方法
        .setAutoCommit(Boolean)
        .commit();
        .rollback();有异常(捕获)
还有连接池,什么是连接池呢?
        就是存放连接对象的容器
还学习了一个很重要的连接池:c3p0连接池.
        第一步:引入DBCP连接池的jar包.
        第二步:编写DBCP代码:
                     手动设置参数:这个我就不多说了
                     配置文件设置参数:这个要创建一个配置文件,文件的名字一定要是c3p0-config.xml,
                                                         里头的名字不能随便乱改
dbutils,是可以非常简洁的书写代码,本来是十来行的代码,用dbutils两行就写好了,
构造:
QueryRunner(DataSource ds);
方法:
int update(String sql,Object… args);
T query(String sql,ResultSetHandler rsh,Object… args);
回复 使用道具 举报
郭明杰
[事务] 事务指的是逻辑上的一组操作,组成这组操作的各个逻辑但愿要么全都成功,
要么全都失败.
1 开启事务,
2 提交事务 : 没有问题的时候-->数据生效,事务结束
3 回滚事务:有问题的时候-->数据回到开启事务时的状态,事务结束
注意:链接事务管理必须是用
开启:conn.setAutoCommit(false);
提交:conn.commit();
回滚:conn.rollback();
连接池 相当于存放连接的容器
c3po是一个开源的连接池,先创建c3po的ComboPooledDataSource对象,直接调用getConnection获取连接对象,要在之前先导包

回复 使用道具 举报
吴利君
今天学习了SQL的一些进阶的知识,其实关键的还是开源的连接池的使用以及DButils的使用。
首先是事务的管理,这个主要有三个,一个是开启事务,setAutecommit,提交事务commit以及回滚事务rollback这三个,使用方式也顾名思义。
然后是两个连接池,第一个是Druid连接池,这个连接池是阿里云开发的,优点是可以和Spring框架很好的整合,还可以对sql语句的执行效率进行统计,优点挺多不过没用过,所以不大了解,然后是c3p0连接池,这个连接池有用过,挺好用的,比原始的连接代码好用很多,代码简略了很多!而且据我了解,现在很多项目都在使用这个,比如我们的要学习的框架SSH,SSM等都可以使用这个来连接数据库,方便很多。
最后是DButils这个工具类,这个超级好用,它可以简化查询代码,提高开发效率,主要的增删改可以通过QueryRunner这个类的update方法使用,查询可以通过query这个方法使用,通过这个方法可以返回几个固定属性的值,然后接收即可。
回复 使用道具 举报
刘文峰

连接池是存放连接对象的容器,连接池在创建时会在里面创建出n个连接对象,当需要使用连接时可以直接从连接池里获取连接对象,使用完成后在归还连接对象.而不是即时创建连接对象然后在销毁.
c3p0的使用步骤,首先要先导入c3p0的jar包并创建路径和c3p0_config.xml 配置文件,要注意配置文件必须放在项目的src文件夹的根目录下,而且文件名不能改变,配置文件里的属性名也是固定的,可以对属性值修改但不能修改属性名.
c3p0有使用配置文件来设置参数和手动设置参数两种:
手动设置参数的使用步骤:
创建连接池 ComboPoolDataSource  datasource = new ComboPoolDataSource();
配置属性  datasource.setDriverClass();  加载驱动
datasource.setJdbcUrl();  连接数据库
datasource.setUser();    用户名
datasource.setPassword();  密码
获得连接对象  
Connection conn = datasource.getConnection();  一个操作只需要一个连接对象
编写sql语句 :String  sql = “sql语句”;
预编译sql语句 PreparedStatement pst = conn.PreparedStatement(sql);
如果sql语句有?号,则需为?号赋值,否则跳过这步;
执行sql语句:  pst.executeUpdate(); 增删改  pst.executeQuery(); 查询
最后是归还资源,连接池里的.close()方法不是销毁连接,而是归还连接.

配置文件的步骤和手动设置一样,只是跳过了配置属性的步骤.

Dbutils是工具类,极大程度简化了代码;它的增删改步骤很简单,只有两步:
第一步 :创建核心类
QueryRunner queryrunner = new QueryRunner(传入连接对象);
第二步,执行sql语句
Queryrunner.update(“sql语句”,后面的参数是可变参数,根据sql语句里的问号数量来传入,有几个就要写几个);
回复 使用道具 举报
郑阳阳
什么是连接池:
就是个装着连接对象的容器,使用的时候拿出来,使用完后还回去.
好处:
销毁和使用对象需要时间,连接池创建时就会初始化一些连接,连接存放于内存中,
使用的时候从内存中获得,使用完毕再归还,效率远高于创建于销毁.

JDBC是sun公司提供的一套统一的规范的接口.
JDBCUtils是JDBC的工具类
C3P0是阿里旗下开源的JDBC连接池
Druid也是开源的JDBC连接池
DBUtils是阿帕奇组织编写的工具类,能够极大的减少编写代码

事务:
就三行代码. 连接对象.setAutoCommit(false) 开启事务
连接对象.commit() 提交事务
连接对象.rollback() 回滚事务
回复 使用道具 举报
杜石苇
今日总结
连接池是用来创建储存多个连接到数据库的链接的,这样就方便用户拿去放;当用户需要时从数据库中拿就行了;用完后不销毁 放回连接池;
Druid ,C3P0改写的工具类就是创建个数据源的链接对象   
这个工具类利用Druid和C3P0的对象能直接从配置文件中加载驱动; 其他的基本一样  这个创建的链接对象  colse后不会销毁  回自动回连接池;
DBUtils 对数据增删改就两行代码
QueryRunner qr=new QueryRunner(JDBCUtils.getDataSoures());   创建个 QueryRunner的对象从C3P0中获取连接池对象
        qr.update("insert into account values (?,?,?)", 5,"ddd",10000);   update增删改  里面底层代码自动有PreparedStatement这个防止注入的对象
               

回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马