码迷,mamicode.com
首页 > 数据库 > 详细

JavaWeb系列之十二(jdbc)

时间:2015-06-20 14:22:44      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:



1.jdbc的简介
    Java DataBase Connectivity;java数据库的链接
    比如按一个显卡,就要需要显卡驱动,我们要安装数据库驱动,厂商会提供,提供一个jar包,sun公司提供和通用的接口,实现这个接口,这个接口就是jdbc,提供用于操作数据库的标准接口,
2.jdbc的应用
    第一步:加载数据库的驱动 使用DriverManager里面registerDriver方法
    第二步:创建链接 DriverManager.getConnection();
            在方法里面有三个参数
            第一个参数:要连接的是哪一个数据库
            简写方式 jdbc:mysql:///day15
            使用范围:如果连接的是本机,并且端口是3306
            第二个参数:连接数据库用户名
            第三个参数:密码
    第三步:编写sql语句
    第四步:执行sql语句
            首先创建statement对象
            通过对象里面方法执行sql
            如果执行查询语句,使用executeQuery
            查询返回是一个结果集 resultset
            遍历结果集得到每一条记录
    第五步:释放资源,谁最后打开,谁就最先关闭
   
3.jdbc的DriverManager对象
    在sql包里面
    主要用途:
    第一个加载数据库的驱动,registerDriver会加载两次,通过mysql的源码,Driver类里面静态代码块里面是类加载的时候执行,一般使用放射数据库的驱动,Class.forName("com.mysql.jdbc.Driver");剩下的都是加载sql的包
    第二个驱动获取数据库的链接
        getConnection(String url;String user,String password)
        第一个参数:要连接的是哪个数据库
        第二个参数:连接数据库用户名
        第三个参数:使用数据库密码
4.jdbc的Connection对象
    在sql包里面
    创建statement对象:createstatement():表示执行sql语句的对象
    创建prepareStatement对象:prepareStatement(String sql) :表示预编译的对象
    创建CallableStatement对象: prepareCall(String sql)  :执行存储过程的对象
    setAutoCommit(boolean autoCommit) :表示是否会自动提交,设置成false不会自动提交,默认情况下是自动提交
    commit() :表示提交事务
    rollback() :表示回滚事务
5.jdbc的statement对象
    主要功能:执行sql语句
    方法:
    执行查询操作时候:ResultSet executeQuery(String sql) 
    返回是ResultSet结果集,遍历结果集得到每一条记录
    执行增加 修改 删除时候:int executeUpdate(String sql)
    返回int,成功的记录数
    执行sql语句的方法:boolean execute(String sql)
    返回布尔类型,
    如果第一个结果为 ResultSet 对象(执行查询操作),则返回 true;
    如果其为更新计数或者不存在任何结果,则返回 false
6.jdbc的ResultSet对象
    执行查询操作时候,返回ResultSet
    遍历结果集的方法:next()
    while(rs.next()){ }
    得到每一行里面内容:
    比如得到字段是int类型,使用方法getInt(“字段名称”)
    比如得到字段是string类型,使用方法getString(“字段名称”)
    如果不知道字段是什么类型,使用方法getObject(String columnLabel)  
    使用getXX方法得到值,可以写字段名称,另外可以写字段的位置,但是位置从1开始的
    结果集的遍历
    首先rs在第一行之前,当执行了next方法之后,一行一行进行向下遍历
    在默认情况下,结果集只能向下通过,不能修改遍历之后的值
    但是可以设置结果集可以滚动,同时可以修改
    结果集的遍历
   

7、jdbc的滚动结果集(了解)
    如果想要结果集是滚动的,表里面必须有主键
    结果集类型
   * TYPE_FORWARD_ONLY : 结果集只能向下
   * TYPE_SCROLL_INSENSITIVE : 结果集可以滚动
   * TYPE_SCROLL_SENSITIVE : 结果集可以滚动

    结果集并发策略
   * CONCUR_READ_ONLY : 结果集不可以修改
   * CONCUR_UPDATABLE : 结果集可以修改

    组合:
   * TYPE_FORWARD_ONLY  CONCUR_READ_ONLY : 结果集只能向下且不可修改(默认) 
   * TYPE_SCROLL_INSENSITIVE  CONCUR_READ_ONLY : 结果集可滚动,但不可修改.
   * TYPE_SCROLL_SENSITIVE  CONCUR_UPDATABLE : 结果集可滚动,而且可修改.

    在创建statement时候,设置滚动的结果集
    createStatement(int resultSetType, int resultSetConcurrency)
    方法里面的两个参数,使用ResultSet里面的常量传递
8、jdbc的释放资源
    原则:谁最后打开,谁最先关闭
    之前关闭连接的方法会产生一个问题,如果程序执行过程中出现了异常,关闭语句不会执行到
    写finally,表示含义是无论是否出现异常,finally总会被执行到,需要把关闭的语句写到finally里面
    //关闭连接
    if(rs != null) {
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    //让jvm快速回收
    rs = null;
    }

10、封装jdbc的工具类
    读取properties配置文件有两种方式:
    读取properties配置文件的第一种方式:使用类加载器读取(只能读取classes下面的文件)
    //因为文件在src下面,部署到tomcat里面会在classes里面
    //读取classes里面的文件,使用类加载器读取 properties
    InputStream in = MyJDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
    //读取properties文件
    Properties p = new Properties();
    p.load(in);
    drivername = p.getProperty("drivername");
    url = p.getProperty("url");
    username = p.getProperty("username");
    password = p.getProperty("password");

    一般在开发都使用第二种方式读取 (使用ResourceBundle工具类读取properties配置文件)
    ResourceBundle.getBundle("配置文件名称,没有后缀名").getString("配置文件里面的值的名称");
    static {
    drivername = ResourceBundle.getBundle("db").getString("drivername");
    url = ResourceBundle.getBundle("db").getString("url");
    username = ResourceBundle.getBundle("db").getString("username");
    password = ResourceBundle.getBundle("db").getString("password");
    }
    使用范围:只能读取classes里面的properties配置文件
    如果想要在工具类加载时候就读取配置文件,同时赋值,
    通过写静态代码块实现 static { 里面放读取配置文件的代码}

11、javaee的dao模式
    回顾mvc开发模式(也称为模型二)
    m:模型,使用javabean技术实现封装数据
    v:视图,使用jsp技术实现显示数据
    c:控制器:使用servlet技术实现管理操作,什么数据显示到哪个jsp页面中
    dao:用于操作数据库的模式
   
    画图分析dao模式
    javaee的结构:客户端层,web层,业务逻辑层,持久化层
    web层,业务逻辑层,持久化层 这三层称为javaee的三层结构
    dao模式:使用在持久化层的模式,专注于对数据库进行操作模式(crud)
    首先创建接口,在接口里面定义操作数据库的方法
    其次创建类实现这个接口里面的操作数据库的方法
    在业务逻辑层通过dao提供的接口进行操作数据库
    jsp+servlet+javabean+jdbc架构:可以实现目前所能看到的所有的应用
    一般企业中不使用这种架构,因为这个架构太底层了(代码太多了)
    一般企业里面使用框架实现系统 ,一般常用的框架 SSH: struts2 spring hibernate
    在web层一般使用struts2框架
    在业务逻辑层一般使用spring框架
    在持久化层一般使用hibernate框架
    mvc和dao的关系
    这两个都是模式,这两个模式是不同开发时期,由不同的人提出来的。mvc是由开发人员提出的,
    dao模式是由sun公司提出的。mvc整体的架构模式,dao专注于持久化层(操作数据库的模式)
    可以在mvc模式里面使用dao模式专注于操作数据库
13、SQL注入的漏洞的防范
    select * from stu where sname=‘"+user.getUsername()+"‘ and password=‘"+user.getPassword()+"‘"
    select * from stu where sname=‘zhangsan‘ or ‘1=1‘ and password=‘qqq‘"
    使用prepareStatement对象防止sql注入
    预编译sql的对象:预先把sql在执行之前先编译
    创建prepareStatement
    PreparedStatement prepareStatement(String sql)
    代码
    String sql = "select * from stu where sname=? and password=?";
    //预编译sql
    pst = conn.prepareStatement(sql);
    //传递参数,第一个参数表示第一个参数 开始从1
    pst.setString(1, user.getUsername());
    pst.setString(2, user.getPassword());
    //执行sql
    rs = pst.executeQuery();
 
 14、jdbc的批处理操作(了解)
    批处理:同时执行多条sql语句
    方法
    addBatch(sql):把sql语句加载到批处理操作里面
    executeBatch():执行批处理操作
    代码
    //创建statement对象
    stmt = conn.createStatement();
    //把这些sql加到批处理里面
    stmt.addBatch(sql1);
    stmt.addBatch(sql2);
    stmt.addBatch(sql3);
    //执行多个sql
    stmt.executeBatch();



   

JavaWeb系列之十二(jdbc)

标签:

原文地址:http://blog.csdn.net/lois_yue/article/details/46572929

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!