jdbc是什么?

xiaoxiao2021-03-01  2

 

    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解析器有特殊的含义,需要使用相应的         字符来代替,这些用来代替的字符称之为实体。         比如,使用 < 来代替 <。         比如:             <question>                 1+2<3?             </question>          解析器会认为 "<"号是一个开始标记,因为没有         ">"结束,会解析出错。             正确的写法:                 <question>                 1+2 < 3?             </question>         b,常见的实体             <     <             >    >             &    &             '     '             "     "     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            

转载请注明原文地址: https://www.6miu.com/read-3850141.html

最新回复(0)