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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tianhaolin 初级黑马   /  2018-12-10 09:25  /  899 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 tianhaolin 于 2018-12-10 09:26 编辑

JDBC一、JDBC基本概念
1.JDBC:Java DataBase Connectivity:Java 数据库连接
2.JDBC的本质:
JDBC是官方(SUN)定义的一套操作所有关系型数据库的规范及接口
各个数据库厂商去实现这套接口,提供数据库驱动jar包.
我们可以使用这套接口编程,真正执行的代码是驱动jar包中的实现类
二、JDBC入门
1.快速入门
步骤:
前置条件:
   导入驱动jar包:mysql-connector-java-5.1.37-bin.jar
       **在modual下创建libs目录
       **拷贝jar包到项目的libs目录下
       **Add As Library
   1)注册驱动
       Class.forName("com.mysql.jdbc.Driver");
   2)获取数据库连接对象 Connection
       Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称",用户名,密码)
   3)定义SQL语句
       String sql =  注意SQL语句结尾不要加分号
         获取执行sql语句的对象 Statement,PreparedStatement(一般使用这个类)
       Statement stmt = conn.createStatement();
   4)执行SQL,接收返回的结果
   5)遍历结果,对结果进行操作
   6)释放资源
2.DriverManager-驱动管理类
功能:
  1)注册驱动
     -static void register(Driver driver):注册给定的驱动程序 DrivrManager
         Class.forName("com.mysql.jdbc.Driver")  Class类有静态代码块,使用了DriverManger的register方法
         注意:MySQL5之后的jar包可以省略,建议不要省略
         为什么不使用DriverManager注册?***
           --DriverManager.registeDriver(new Driver()),而new Driver()时候Driver的静态代码块又注册了一次
  2)获取数据库连接
     -static Connection getConnection(String url,String user,String password)
     -参数:
         **url:指定连接的路径
             语法: jdbc:mysql://ip地址(域名):端口号/数据库名称
            例子: jdbc:mysql://localhost:3306/db3
            注意:如果连接是本机MySQL服务器而且端口号为3306,可以省略ip和端口jbdc:mysql:///db3
        **user:用户面
        **password:密码
3.Connection-数据库连接 接口
功能:
  1)获取执行SQL的对象
      -Statement createStatement()
      -PreparedStatement prepaereStatement(String sql)
  2)管理事务
      -开启事务  void setAutoCommit(boolean autoCommit):调用该方法设置参数为false,开启事务
      -提交事务  void commit():提交事务
      -回滚事务  void rollback():回滚事务
4.Statement-执行SQL的对象
功能:用于执行静态SQL语句并返回其生成结果对象
  1)执行DML和DDL语句(DDL语句一般不使用jdbk)
      -int excuteUpdate(String sql)
             **返回值是影响的行数,可以通过影响的行数来判断DML语句是否执行成功
  2)执行DQL语句(SELECT)
          -ResultSet excuteQuery(String sql)
5.ResultSet-结果集对象
      -boolean next():游标向下移动一行,判断当前行是否是最后一行末尾,如果是则返回false,否则返回true
      -Xxx getXxx(参数):获取一列数据
            **Xxx:代表数据类型 如Int getInt(), String getString()
            **参数:
             int:代表列的编号  注意:!!编号从1开始
             String:代表列的名称
       -遍历集合
注意:ResultSet结果集也是一个资源,在程序结束时需要释放
6.PreparedStatement-执行SQL的对象,是Statement的实现类****
功能:用于执行动态SQL语句并返回其生成结果对象
注意:PreparedStatement在操作大批量SQL语句时效率远远高于Statement,并且可以防止注入,后期使用PreparedStatement对象
1)SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全问题
   例:SQL:SELECT * FROM user WHERE username = "adfafa" and password 'a' OR 'a' = 'a',会查出表的所有内容
2)解决sql注入问题
3)预编译的SQL:参数使用?号作为占位符
4)步骤:
   -注册驱动
   -获取数据库连接对象 Connection
   -定义SQL语句***** ? 只可以在Value的位置
     *注意:sql的参数使用?作为占位符,如:slect * from user where username = ? and password = ?
   -获取PreparedStatement对象
     PreparedStatement Connection.prepareStatement()
   -给?赋值
      *方法:setXxx(参数1,参数2)
      *参数1:?的位置编号,从1开始
      *参数2:?的值
   -执行SQL,接收返回的结果
   -遍历结果,对结果进行操作
   -释放资源
7.抽取JDBC工具类:JDBCUtils
1)目的:简化书写
2)分析:
   *注册驱动抽取
   *抽取一个方法获取连接对象
   *抽取一个方法释放资源


管理事务
操作:
1)开启事务
2)提交事务/回滚事务
2.使用Connection对象来管理事务
*开启事务:SetAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
   在try中开启事务
*提交事务:commit();
   在执行完后提交commit
*回滚事务:rollback();
   在catch中rollback
一、数据库连接池--DataSource接口
1.概念
数据库连接池就是一个容器(集合),用于存放数据库连接,类似于线程池
用来管理连接Connection对象(驱动,url,username,password)
2.好处
1)节约资源
2)高效
3.实现
1)标准接口: DataSource  javax.sql包下
  *方法:
     -获取连接:getConnection();
     -归还连接:
         如果连接对象Connection是从连接池中获取的,那么调用 Connection.close()方法,则不再关闭而是归还连接
2)一般我们不去实现它,有数据库厂商来实现
4.C3P0数据库连接池--使用的人最多
步骤
  1)导入jar包 :c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar 不要忘记导入驱动jar包
  2)定义配置文件:
      名称:c3p0.properties或c3p0-config.xml
      路径:类路径,直接将文件放在src目录下即可
  3)创建核心对象 DataSource ds = new ComboPooledDataSource()
  4)获取连接
      Connection con = ds.getConnection()
5.Druid数据库连接池--阿里巴巴
  1)导入jar包:druid-1.0.9.jar
  2)定义配置文件:
     *是以properties形式的
     *可以叫任意名称,需要手动导入
  3)加载配置文件:
     Properties property = new Properties(...)
  4)获取连接池对象
     DataSource ds = DruidDataSourceFactory.createDataSource(property)
  5)获取连接
     Connection con = ds.getConnection()
6.使用Druid定义工具类
二、JDBCTemplate -- > Spring JDBC******
1.概念:
   Spring框架对JDBC的简单封装,提供了JDBCTemplte对象简化JDBC的开发
   三大框架:
     SSM
           springMVC : web
           spring : 核心
           Mybatis : 操作数据库
     SSH
           struts2: web
           spring :核心
           hibernate:操作数据库
2.步骤:
   1)导入jar包
   2)创建JDBCTemplate对象,依赖于数据源DataSource
      *JdpcTemplate template = new JDBCTemplate(ds);
   3)调用方法来JDBCTemplate的方法来完成CRUD操作
      -update():执行DML语句,增、删、改语句*****
             例:不需要释放资源,update(sql,?占位符... 参数...)
                  String sql = "update account set balance = 5000 where id = ?";
              int count  = template.update(sql,3);
      -queryForMap():查询结果将结果集封装为map集合(了解)
             !!!查询的结果集长度(row)只能是1,将字段设置为KEY,值为Value
             例:
              String sql = "SELECT * FROM emp WHERE id = ?";
          Map<String, Object> map = template.queryForMap(sql, 1001);
      -queryForList():查询结果将结果集封装为list结合(了解)
             !!!查询的结果为多条(row>1),将字段封装为LIST<MAP<String,Object>>
             例:
              String sql = "SELECT * FROM emp";
         List<Map<String, Object>> maps = template.queryForList(sql);
      -query():查询结果,将结果封装为JavaBean对象*****
             !!!查询的结果封装为对象集合
             !!!query(sql,RowMapper,?占位符... 参数...)
             !!!RowMapper是一个接口,可以直接重写其中的mapRow方法,但是一般不这么做,太麻烦
             !!!一般使用Template定义好的实现类,如:BeanPropertyRowMapper,可以实现JavaBean自动封装
                      BeanPropertyRowMapper<T> (Class<T> mappedClass);
             例:
                  String sql = "SELECT * FROM emp";
          List<Emp> list = template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
          -queryForObject:查询结果,将结果封装为对象*****
             !!!查询一个值,一般和聚合函数一起用
                 例:
                   String sql = "select count(id) from emp"
                   Long total = template.queryForObject(sql,Long.class);
3.javaBean:
        构造
        属性私有
        提供get/set方法
        实现序列化接口(可以不写)


1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马