jdbc是什么?

 

    1、jdbc是什么?

    java database connectivity 
    sun公司制订的一种通用的数据库访问接口, 
该接口由不同的数据库厂商来实现,这样一来, 
开发人员可以使用相同的方式来访问不同的数据库。 
2、三个重要的接口 
    1)Connection 
    2)Statement 
    3)ResultSet  
3、编程步骤 
    step1, 加载驱动 
        1)什么是驱动? 
            由不同的数据库厂商实现jdbc接口对应的 
        java类压缩之后生成的.jar文件。 
            也就是说,访问某个数据库,就必须使用 
        该数据库对应的驱动。 
        2)驱动要放到build path对应的路径里面。 
        3)代码: 
            Class.forName(String classname); 
            forname方法:jvm依据classname找到 
            类的字节码文件(.class文件),然后将字节 
            码文件的内容读到方法区,生成一个 
            class对象。 
    step2, 获得连接 
        Connection conn = DriverManager. 
        getConnection(String url,String username, 
        String pwd); 
        注意: 
            1)getConnection方法会返回一个符合Connection 
        接口要求的对象,称之为连接对象。 
            2)如果连接对象获得了,则表示连接已经建立 
        成功。 
    step3,创建Statement 
        Statement stat = conn.createStatement(); 
        注意: 
            1) createStatement()方法会返回一个 
        符合Statement接口要求的对象,该对象 
        可以理解为一个执行sql的容器。 
    step4,执行sql 
            //执行查询 
            ResultSet rst = stat.executeQuery(String sql); 
            //执行插入、删除、修改 
            int stat.executeUpdate(String sql); 
            注意: 
                1)executeUpdate方法返回值是一个整数, 
            表示该sql执行成功之后,受到影响的记录的 
            个数。 
                2)executeQuery方法返回的是一个 
            ResultSet(结果集),需要遍历。 
    step5, 如果是查询,需要遍历 
            ResultSet有一个next()方法,每执行一次 
    该方法,会返回一个true/false,如果值为true, 
    表示还有记录。 
            while(rst.next()){ 
                rst.get***方法(比如 getString("name")) 
            }     
    step6, 关闭资源 
            rst.close() 
            stat.close() 
            conn.close() 
 
4、mysql的使用 
    1)登录mysql  (以root用户登录mysql) 
        mysql -uroot;   
    2)查看当前有哪些数据库 
        show databases; 
    3)创建一个新的数据库 
        //创建了一个名叫jsd1306db的数据库, 
        //并且设置缺省的字符集为utf8 
        create database jsd1306db default 
        character set utf8; 
    4) 使用某个数据库 
        use jsd1306db; 
    5) 查看当前数据库有哪些表 
        show tables; 
    6)建表 
        create table t_user( 
            id int primary key auto_increment, 
            username varchar(50), 
            pwd varchar(30), 
            age int 
        )type=innodb; 
        insert into t_user(username,pwd,age)  
        values('tom','test',22); 
        insert into t_user(username,pwd,age)  
        values('mickey','test',23); 
        insert into t_user(username,pwd,age)  
        values('jerry','test',24); 
         
        如果是oracle数据库 
            insert into t_user 
            values(t_user_seq.nextval,'tom','test',22); 
        注意: 
            a, type=innodb: 让该表支持事务。 
            b, auto_increment: 自增长列,即 
            由数据库自动为这个列赋值(当插入 
            记录时,数据库会生成一个唯一的值)。 
    练习: 
        使用jdbc访问oracle数据库上的一张表 
    (t_user表),输出该表中所有的记录。 
     
5、sql注入(了解) 
        所谓"sql注入",指的是一些用户可以通过输入一些 
    刻意构造的参数来改变sql语句的结构,从而达到 
    破坏系统的目的。比如,非法登录。 
6、PreparedStatement接口 (预编译的Statement) 
    预编译的Statement有两个优点: 
        优点1: 防止sql注入,因为sql语句会在执行之前 
        先发送给数据库,数据库会生成执行计划。这个 
        sql语句不会因为后面给参数赋值而改变。 
        优点2:  执行多个结构相同的sql效率要高于 
        Statement。 
1、DAO(Data access object 数据访问对象) 
    (1)什么是DAO 
        封装了数据访问逻辑的模块。 
    (2)如何写一个DAO? 
        step1, 写一个实体类 
            实体类与表对应,是为了方便实现对表中的记录 
    进行访问而设计的一个简单的java类。 
        step2, 写一个DAO类,在该类里面, 
        提供相应的数据访问方法。 
 
2、如何控制事务 
    (1)什么是事务? 
        将多个操作当做一个原子操作来进行,要么 
    全部成功,要么全部失败。 
    (2)事务的四个特性 
        a, 原子性:多个操作要当做一个整体来进行,要么 
        全部成功,要么全部失败。 
        b,一致性:事务不管成功还是失败,不应该破坏 
        完整性约束(比如,主键不能为空)。 
        c,隔离性:多个并发的事务不应该相互影响。 
        d,持久性:事务成功之后,结果应该永久保存。 
    (3)jdbc当中,如何控制事务。 
        //禁止自动提交 
        //默认情况下,jdbc驱动会自动提交事务。 
        conn.setAutoCommit(false);     
        //提交事务 
        conn.commit(); 
        //回滚事务 
        conn.rollback(); 
 
3、批处理 
    (1)什么是批处理? 
        将多个要执行的sql语句一次性地发送给数据库去执行。 
    (2)如何批处理? 
        addBatch(): 将要执行的参数添加到PreparedStatement 
        对象上。 
        executeBatch(): 将PreparedStatement对象上保存的 
        参数发送到数据库,然后一次性地执行多条sql语句。 
        clearBatch(): 清空PreparedStatement对象上保存的 
        参数。 
 
 
1、事务的封装 
     
    "买股票" 
        step1, 建表 
            create table t_account( 
                id int primary key auto_increment, 
                accountNo varchar(16) unique, 
                balance int 
            )type=innodb; 
            create table t_stock( 
                id int primary key auto_increment, 
                stockCode varchar(6) unique, 
                qty int 
            )type=innodb; 
            insert into t_account(accountNo,balance)  
            values('6225881003192000',1000); 
            insert into t_stock(stockCode,qty) 
            values('600015',0); 
            unique:唯一性约束 
        step2, 实体类 
            Account类 
            Stock类 
        step3,DAO 
            AccountDAO 
            StockDAO 
        step4, StockService 
 
         
    1)事务应该由业务类来控制 
    比如,买股票涉及到对资金帐户和股票帐户的操作 
    (AccountDAO和StockDAO),那么,事务应该由 
    业务类StockService来控制。 
    2)    Threadlocal (线程局部变量) 
        a, Threadlocal是什么 
            为每一个使用某个变量的线程维护一个 
        该变量值的副本。 
        b, 什么时候使用Threadlocal 
            如果一个线程调用了多个方法,要在多个方法 
        之间共享相同的数据,可以考虑使用Threadlocal。 
            比如:买股票这个案例当中,一个线程 
        需要调用AccountDAO,StockDAO的多个方法, 
        为了控制事务,需要这些方法共享同一个Connection 
        对象。 
2、分页 
        (1)什么是分页 
            就是依据两个参数(每页多少条记录, 
            第几页)查询数据库,返回有限的记录。 
        (2)为什么要分页 
            如果不分页,当数据库中的记录很多, 
            那么一次性地查询所有记录,会严重 
            影响系统的性能。 
        (3)如何分页? 
            mysql: 
                select * from t_user limit ?,? 
            其中,第一个参数表示记录的序号(从0开始) 
            第二个参数表示每页多少条记录。 
            oracle: 
                select * from 
                (select a.*,rownum rn 
                from 
                    (select * from t_user) a 
                where rownum < ?) 
                where rn > ? 
            public List<User> findAll2(int rowsPerPages, 
            int pages); 
            int start = rowsPerPages * (pages - 1) + 1; 
            int end = start + rowsPerPages; 
            prep.setInt(1, end); 
            prep.setInt(2,start); 
            prep.executeQuery();
1、xml是什么 (可扩展的标记语言) 
    (1)是一种基于文本的通用的数据保存格式 
        a,通用 
            使用xml格式保存的数据,是与平台无关的。 
        也就是说,所有的语言都支持xml。 
            比如,我们可以使用java语言将一个对象( 
        Point)保存到一个xml文件里面,另外一个用 
        c语言写的程序,可以很方便地读取这个xml文件。 
        b,数据保存格式 
            xml使用标记加内容的方式来保存数据。 
        比如: 
            <point> 
                <x>10</x> 
                <y>20</y> 
            </point> 
    (2)发展历史 
            html (超文本标记语言)。  
            xml使用了html的基本语法,但是,更严格,并 
        且可扩展,使用范围也更广泛。 
            xhtml: 对html按照xml语法来加以约束。 
2、xml的基本语法 
    1)元素 
        a,什么是元素? 
            标记和标记之间的内容,统称为元素。 
        b,一个xml文档,只有一个根元素。 
        c,元素可以嵌套     
        d,元素必须有开始标记和结束标记,如果是空 
        元素,可以简写为 <标记/>。 
            比如: 
                <a></a>  是一个空元素,可以简化为<a/> 
        e,元素可以有属性 
            比如: 
                <point type="normal"> 
                </point> 
    2)属性 
        a,属性用来表示元素的特性 
        b,属性值必须用引号括起来。 
        c,属性必须写在开始标记里面。 
    3)实体 
        a,什么是实体 
            有一些特殊的字符,比如 <, >, &, ', ", 
        对xml解析器有特殊的含义,需要使用相应的 
        字符来代替,这些用来代替的字符称之为实体。 
        比如,使用 &lt; 来代替 <。 
        比如: 
            <question> 
                1+2<3? 
            </question> 
         解析器会认为 "<"号是一个开始标记,因为没有 
        ">"结束,会解析出错。 
            正确的写法: 
                <question> 
                1+2 &lt; 3? 
            </question> 
        b,常见的实体 
            <     &lt; 
            >    &gt; 
            &    &amp; 
            '     &apos; 
            "     &quot; 
    4) CDATA段 
            <![CDATA[ 不需要解析器解析的内容  ]]> 
    5) xml大小写敏感  
        建议,标记用小写;另外,如果一个标记有 
    多个单词,建议使用"-"连接。 
        比如:  <cust-name> 
3、xml解析 
    1) 主要的解析方式 
        a, sax: sun公司提供的一套相对比较底层的用来 
        解析xml的api。一般作为其它的一些解析工具的 
        底层的解析方式。sax解析的优点是需要的系统资源 
        非常少。但是编程比较麻烦。 
        b,dom: dom解析需要将整个xml文档读入到内存, 
        对系统资源的占用比较大。编程也比较麻烦。 
        c,一些开源的工具 : DOM4J,Digest,pull等等。 
        这些开源的工具编程相对sax,dom要更方便。 
    2)如何将一个java对象转换成一个xml文档 
        step1,将dom4j的jar文件加到build path。 
        step2,  先设计好xml文档的结构 
            一般来说,一个java类对应一个元素。 
            简单的类型,比如string,既可以作为属性,也 
        可以作为子元素来设计。复杂类型只能作为子元素 
        来设计。 
             
    3)如何将一个xml文档转换成一个java对象 
4、dtd 
5、xpath 

           

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值