第一范文网 - 专业文章范例文档资料分享平台

JDBC - XML 总结

来源:用户分享 时间:2025/11/20 14:33:59 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

JDBC_XML

主讲:程祖红

以下笔记均为我本人亲自整理,若有描述不对或代码错误,请同学们及时更改一下,重新上传上去,谢谢!

导航........ ? JDBC

1 DAO 2 批处理 3 事务 4 分页 ? XML

1 XML的基本语法 2 XML的解析

3 XML的设计:DTD 4 XML的设计:XPATH

? JDBC

1、什么是jdbc? 全称:java database conectivity sun公司制订的一种用来访问数据库的通用的api,这些api由不同的数据库厂商来实现,这样,开发人员 就可以使用相同的方式来访问不同的数据库。 2、如何使用jdbc? (1)三个重要的对象 a, Connection: 负责建立连接(java程序与数据库之间的连接) b, Statement:负责发送sql给数据库(Statement由Connection来创建) PreparedStatement 下面详解; c, ResultSet: 负责封装数据库返回的查询的结果。 (2)编程步骤 step1, 加载驱动(需要事先将驱动程序对应的jar文件放到classpath对应的路径) 驱动:就是不同的数据库厂商实现的api程序。 语法:Class.forName(驱动类名); step2,获得连接 语法:Connection conn = DriverManager.getConnection(url,user,pwd); url:数据库所在的机器在的ip,端口,sid user:用户名 pwd:密码 step3, 获得Statement 语法:Statement stat = conn.creatStatement(); step4, 执行SQL a, 执行查询 语法:ResultSet rst = stat.executeQuery(SQL);

b,执行删除、更新、插入 int stat.executeUpdate(SQL); step5,如果是查询,需要遍历ResultSet 遍历: 将查询的结果一条一条取出来,获取其中的数据。 3、Mmysql (1)简单使用 1)登录mysql(使用root用户): mysql -uroot; 2)查看当前有哪些数据库: show databases; 3)创建一个数据库 (名叫jd1305db(数据库名),缺省的字符集是utf8) create database jd1305db default character set utf8; 4) 使用某个数据库:use jd1305db(数据库名); 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('jetty','test',23); 注意:auto_increment: 自增长列,即该列的值由数据库自动赋值,一般用于主健的生成。 type=innodb: 表示该表支持事务。Mysql 独有特性 4、使用jdbc访问数据库,常见的错误 (1) 参数错误 (2) 驱动程序(jar文件)不合适,或者没有放到classpath路径里面。 (3) sql语句错误

5、PreparedStatement (预编译的Statement) Statement的子类 1)sql注入问题: 通过刻意构造一些参数值,来改变系统原有sql语句的结构,从而达到破坏系统的目的(比

如,非法获取系统敏感的数据,非法登录等等)

2)PreparedStatement a,PreparedStatement是如何执行的?

重点 特点step1, sql语句先发送给数据库,数据库会生成一个执行计划(预编译) step2, 将参数值发送给数据库,执行sql。 b,优点 b1: 防止sql注入 因为PreparedStatement执行的sql语句结构是不会改变的。 b2:如果有多条结构相同的sql语句要 执行,则PreparedStatement执行效率要比Statement高。 在增删改查语句中,常见方法:

Next() 方法的含义是:将指针向下移动一位,如果返回值为true,表示当前有记录可以读取。 executeQuery:查询语句时运用到的方法;方法会将sql语句发送给/数据库,数据库执行相应

的查询,查询的结果会封装到ResultSet对象。

executeUpdate:插入、删除执行时需运用到方法;方法返回值是一个整数,/表示受到影

响到记录的个数。

?

DAO (Data Access Object)

(1)DAO是什么? 封装了数据访问逻辑的一个模块。 (2)如何写一个DAO? step1, 写一个实体类;就是一个普通的java类,这个类与数据库的表对应;

该类的属性与表的列对应(数据类型匹配)。这些属性要有对应的get/set方法。 实体类的作用,是为了将数据库中的记录封装成一个对应的java对象。 step2, 写一个DAO接口 在DAO接口中,要声明一系列用来访问 数据库的方法。 声明这些方法时,不要涉及任何具体的数据库访问技术。 step3, 写一个DAO实现类 既使用具体的数据库访问技术来实现DAO接口。 public class Factory { // 工厂类 public static Object getInstance(String type){ step4, 写一个工厂类

Object obj = null; \工厂设计模式\:工厂负责为调用者提供一个符合 //依据type(接口名)找到对应的实现类 接口要求的对象(该对象一般称之为产品)。

这样做的好处是:调用者不用了解对象的创建的细节, String className = ConfigUtil.getValue(type); 并且,当对象发生了改变,不会影响到调用者。 try {//加载className对应的类

Class c = Class.forName(className); //依据class对象创建一个实例 obj = c.newInstance(); e.printStackTrace(); ? 批处理

} catch (Exception e) { (1)什么是批处理

} 使用同一个连接,一次发送多个sql

return obj; } } (sql语句的结构是相同的)给数据库去执行。 这样,可以提高运行的效率。 (2)如何批处理? addBatch(): 添加一条要执行的sql。 executeBatch():执行之前添加的所有的sql。 clearBatch():清空之间已经执行过的sql。

(3)批处理的优点:如果同时要执行大量的相同结构的sql;批处理的性能要好。

? 事务

(1)什么是事务? 将多个操作当做一个原子操作来进行。 (2) JDBC如何控制事务? 1) JDBC在默认情况下是自动提交事务,即一条sql语句执行之后,会立即提交事务。

2)如果多个操作(即有多条sql语句要执行)要当做一个整体来执行,比如在“转帐”业务当中,需要

执行两个sql: 一个sql用来对一个帐号进行扣除余额的操作(-1000),另外一个sql用来对另外 一个帐号进行增加余额的操作(+1000),很显示,这两个操作要么同时成功,要么同时失败。

3)三个方法 //当flag为false时,表示禁止自动提交。 connection.setAutoCommit(boolean flag); //提交事务 connection.commit(); //回滚事务 connection.rollback(); (3)事务的封装 比如,要“转帐\ 从资金帐户(t_account表中的某条记录)扣掉200元,然后,股票帐户(t_stock表中的 某条记录)增加价值200元的股票。

create table t_account(id int primary key auto_increment,accountNo varchar(16),balance int)type=innodb;

insert into t_account(accountNo,balance) values('6225881003192000',1000); create table t_stock(id int primary key auto_increment, stockNo varchar(6),qty int)type=innodb; insert into t_stock(stockNo,qty) values('600015',0); (4)Threadlocal (线程局部变量) a,作用: 为每一个线程维护一个变量的副本。 b,用途: 一个线程要访问多个方法,需要在多个方法之间共享同一个数据(比如,一个connection对象)。

? 分页

(1)什么是分页? 因为数据库中保存的记录一般都很大,如果不分页的话,一直性将所有记录取出来,性能很低,所以,需要依据两个参数(每页多少条记录,第几页)查询数据库,这样,返回的数据量可控(比较少),方便 使用。 (2)如何分页? 1)mysql select * from t_user limit ?,?; ?第一个问号:从哪儿开始(即index的值,mysql的第1条记录的index为0) ?第二个问号: 每页多少条记录 PreparedStatement stat = conn.preparestatement(\ stat.setInt(1, rowsPages * ( pages - 1)); stat.setInt(2, rowsPages); 2)oracle的分页 String sql = select * from(select a.*, rownum rn from (select * from t_user) a where rownum =? PreparedStatement prep = conn.preparestatement(sql); int start =( pages - 1) * rowsPerPages + 1; int end = start + rowsPerPages; prep.setInt(1,end); prep.setInt(2,start); (3)假分页 所谓假分页,就是一次性地将所有记录都查询出来,放到内存空间里面(List),然后依据每页多少条记录、第几页对List进行查找。 假分页适用于记录比较少的情况,假分页第一次查询慢,后面比较快。真正的分页适用于记录比较多的情况,对内存空间的要求不高。

?

drop table if exists t_user; //删除表

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('user01','test',22); //插入数据

XML (Xtensible markup language可扩展的标记语言)是什么

(1) 是一种基于文本的通用的数据保存的格式。 a,通用: 即以XML格式保存的数据,可以被其它任何的程序来处理。 Class Point{ 比如:一个点,在java语言里面,可以用一个类Point表示: int x; int y; 那么,一个Point对象要保存下来,可以使用 如下几种方式: ... 方式一: 序列化 (不通用,因为序列化是java语言特有的)。 } 方式二: 数据库(通用) 方式三:自定义一个协议(比如,将数据保存在一个文件里面(10,20),很显示,不通用。 方式四:使用XML :

搜索更多关于: JDBC - XML 总结 的文档
JDBC - XML 总结.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7oag57m1uw77t6k14cit_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top