数据库访问的代码优化PPT教学课件
合集下载
MySQL数据库设计、优化幻灯片

• 不要同时指定字符集(character set)和校验集(collect set),避免出现和默认对应关系不一致
Value ''
CHAR(4) Storage Required VARCHAR(4) Storage Required
''
4 bytes
''
1 byte
'ab' 'abcd' 'abcdefgh'
规范
字段规范
• char(10) VS varchar(10)
• 尽可能不使用text/blob类型
• 存储字符型数据时,尽可能先压缩或者序列化
• 注意字符集问题,server=>database(trigger、stored procedure、event
scheduler)=>table=>column
规范
命名规范
• 涉及系统目录、文件、数据库、表、字段名 • 强烈建议只用小写字符、数字、下划线组合 • 命名长度不超过32个字符 • 不使用select、show、update等保留字 • 全英文或全中文,言之有意,不要半洋半中 • 临时用加上 tmp/temp 前缀/后缀 • 统计表加上 stat/statistic 前缀/后缀 • 历史归档加上完整日期,例如:20130802
规范
SQL规范
• 过滤用户提交SQL,防止注入 • 杜绝 like ‘%xxx%’,不用/少用 like ‘xxx%’ • 不用/少用子查询,改造成连接(JOIN) • 不用/少用FOR UPDATE、LOCK IN SHARE MODE,防止锁范围扩大化 • SQL中不用/少用函数,可能造成额外开销或者导致无法使用索引 • 分页SQL采用内连接(INNER JOIN)实现,更高效
《数据库性能优化》-PPT课件

数据库性能优化
B2B-DBA-陈立-2019年Q3
主题
基本元素 访问堆表 访问B树索引 案例分析 执行计划
基本元素-总览
一本字典---------------一个表 字典中的一页----------一个数据块 一个字的解释----------一笔记录 页码跟行号------------ROWID
基本元素-堆表
物理上由若干数据块组成
物理上的分界线:High Water Mark
每笔数据的唯一地址:ROWID
逻辑上由若干数据行组成
基本元素-数据块
保存数据的最小容器 读取数据的最小单位(8k或16k,固定大小)
基本元素-ROWID
访问一笔记录的最快方式 ROWID只是一个坑,不是一个萝卜,用它来 访问数据虽然快,但是不安全。因为随着 DELETE/INSERT操作,坑里埋的萝卜会变。 坑还是原来的坑,萝卜已经不是原来的萝卜了。
访问堆表-STOP机制
查询到指定的记录数之后就停止扫描
无需借助索引,也不必访问整张表的所有数据块
在字典中找出5个笔画数为20的字
访问B树索引-典型结构
访问B树索引-特点
自索引的索引 平衡树-----每个叶节点到根节点的距离相等 叶节点之间存在有序链表结构 对 =, >, <, >=, <=, like ‘a%’ 等操作效率 极高 对 <>, like ‘%a%’, like ‘%a’ 操作效率差
实际问题-7
问:这个SQL如何优化?
B2B-DBA-陈立-2019年Q3
主题
基本元素 访问堆表 访问B树索引 案例分析 执行计划
基本元素-总览
一本字典---------------一个表 字典中的一页----------一个数据块 一个字的解释----------一笔记录 页码跟行号------------ROWID
基本元素-堆表
物理上由若干数据块组成
物理上的分界线:High Water Mark
每笔数据的唯一地址:ROWID
逻辑上由若干数据行组成
基本元素-数据块
保存数据的最小容器 读取数据的最小单位(8k或16k,固定大小)
基本元素-ROWID
访问一笔记录的最快方式 ROWID只是一个坑,不是一个萝卜,用它来 访问数据虽然快,但是不安全。因为随着 DELETE/INSERT操作,坑里埋的萝卜会变。 坑还是原来的坑,萝卜已经不是原来的萝卜了。
访问堆表-STOP机制
查询到指定的记录数之后就停止扫描
无需借助索引,也不必访问整张表的所有数据块
在字典中找出5个笔画数为20的字
访问B树索引-典型结构
访问B树索引-特点
自索引的索引 平衡树-----每个叶节点到根节点的距离相等 叶节点之间存在有序链表结构 对 =, >, <, >=, <=, like ‘a%’ 等操作效率 极高 对 <>, like ‘%a%’, like ‘%a’ 操作效率差
实际问题-7
问:这个SQL如何优化?
优化和目标代码生成(PPT课件)

• 代码优化在整个编译过程的位置
源程序 编译前端 中间代码 中间代码生成 中间代码 目标代码生成 目标程序 中间代码 中间代码优化 目标代码优化
程序员和编译器可能改上程序的位置
源程序 编译前端 中间代码 目标代码生成 目标程序
程序员可以改进 算法,改变循环
编译器可以改进过程调 用、循环和地址计算
编译器可以利用寄存器, 选择指令和窥孔优转换
3
7.1.1 数据类型
类型的合法性检查是判断数据类型是否与上下文的要求一致 数据类型是对该类型数据(变量或常量)的取值是否合法以 及对该类型数据的运算是否合法的一种说明。
4
7.1.2 数据结构
一个程序设计语言如允许使用的数组、记录、字符串、 表、栈等形式的数据结构,在编译程序中应为它们提供相 应的翻译。 为了能对数据结构中的元素进行引用,必须完成从逻辑结 构到能够访问这些数据元素的物理结构的映射。应考虑: 1映射算法相对简单,根据逻辑结构容易计算出物理地址 2从逻辑结构投影到物理结构时,不至于超界或存储溢出 3使用的数据结构承担这种程序设计语言的主要功能 4在这些数据结构定义相关的运算
25
• 指令选择
– 一个编译程序可以看成是一个转换系统,它把源程序转换成 等价的目标代码,也就是说,对源语言种各种语言结构,依 据语义确定相应的目标代码结构,即确定源语言于目标语言 之间的对应关系,确保正确实现语义。显然,能否建立这样 的关系直接影响到编译程序的质量。 – 目标机器指令系统的性质决定了指令选择的难以程度,指令 系统的一致性和完备性直接影响到这种对应关系的建立。如 果目标机器能一致地支持各种数据类型和寻址方式,不需特 别处理例外,这种对应关系的建立就容易得多。 – 指令执行速度和机器特点对产生目标代码的质量也十分重要。 显然,如果指令集合丰富的目标机器对于某种操作可提供集 中处理的时候,应该选择效率高、执行速度快的一种。
《数据库优化》幻灯片

实验案例2:个人查询未缴费账单
学员练习: 使用SQL语句查询用户的未缴费信息 使用数据库引擎优化参谋优化数据库 建立索引,从而优化查询速度 使用SQL语句查询用户的滞纳金
未缴费信息
35分钟完成
用户滞纳金
实验案例3:备份与恢复Tariff数据库
需求描述 电信公司的数据库Tariff对数据的稳定性有非常高 的要求 对数据库执行完整+事务日志备份 用户缴费后,数据丧失需要能够完全恢复 定期让数据库自动完成完整、差异、事务日志备 份(可选任务)
账单情况户 对 上 月 话 费 进行缴费
已缴费数据导出到 历史数据
2.用户在26日后缴费,需要缴 滞纳金,滞纳金每天按欠费
电准备信查看每月收入、欠费用户情1%况收取等
接
受
缴
费
实验案例1:批量批价8月账单
需求描述 电信公司在月底准备进展用户的缴费工作,需要 对通话记录call表中所有用户通话记录进展批价, 批价日期为2021-09-05 建立性能监视器监视tempdb文件大小和Tariff数 据库日志文件大小,分析监视后的结果并给出改 进建议
需求描述 本次实验依赖于前一实验结果,即8月份所有用户 的批价已经完成 查询号码为的用户未缴费信息(账单日期,账单金 额) 帐单表accountbill表中的列isPaid=0为未缴费 优化查询速度,给出优化改进建议 查询未缴费账单滞纳金(可选任务)
实验案例2:个人查询未缴费账单
实现思路: 利用SQL语句查询的用户未缴费信息 查看优化前的SQL执行方案和客户端统计信息 使用数据库引擎优化参谋优化数据库 再次查看SQL执行方案和客户端统计信息 使用SQL语句查询用户的滞纳金 滞纳金:缴费日期每超过账单所在月26号一天, 收取账单金额的1%
Java代码优化ppt课件

reference类型在32位系统上每个占用4bytes, 在64位系 统上每个占用8bytes。
19
100个entries,cost 8.6k, 实际的double=2*100*8=1.6k
20
Double=16+8,double=8,67%额外开销
21
TreeMap包括: 48bytes+n*40bytes(entry)
Cache分类实现 1.AlarmCache封装了活动告警/1409/清除告警的插入,活动放7天,清除3小时
2.AlarmCFPCache<cfp,fpList>增加本地缓存,提升查询效率
14
DW缓存优化 封装完,代码量依然很大,而且日志不方便,继续拆分:
1.alarmService负责写操作,cacheService负责读操作
3、找到优化的关键点
这是有效优化的关键。找到项目中与你的目标(性能、资源或其他)相背的地方,并将你的努力和 时间用在那里。举一个典型的例子,一个Web项目速度比较慢,开发者在优化时将大部分精力放在了数 据库优化上,最终发现真正的问题是网络连接慢。另外,不要分心于容易实现的问题。这些问题尽管很 容易解决,但可能不是必要的,或与你的目标不相符。容易优化并不意味着值得你花费工夫。
2、选择正确的优化指标
选择正确的指标,是优化的一个重要组成部分,你需要按照这些指标来测量优化工作的进展情况。如 果指标选择不恰当,或者完全错误,你所做的努力有可能白费了。即使指标正确,也必须有一些辨别。 在某些情况下,将最多的努力投入到运行消耗时间最多的那部分代码中,这是实用的策略。但也要记住, Unix/Linux内核的大部分时间花费在了空循环上。需要注意的是,如果你轻易选择了一个很容易达到的 指标,这作用不大,因为没有真正解决问题。你有必要选择一个更复杂的、更接近你的目标的指标。
《如何优化JAVA应用》课件

● 以下是用户提供的信息和标题: ● 我正在写一份主题为“《如何优化JAVA应用》PPT课件”的PPT,现在准备介绍“JAVA应用性能优化”,请帮我生成“性能优化策略”为标题的内
容 ● 性能优化策略
● 代码优化:通过优化代码结构、算法和数据结构来提高应用程序的执行效率
● JVM参数调优:根据应用程序的特点和需求,调整JVM参数以获得更好的性能
PART SEVEN
部署架构:介绍微服务架构、容器化技术、Docker等 容器化技术:介绍Docker的原理、使用方法、优势等 部署架构优化:介绍如何通过容器化技术优化JAVA应用的部署架构 监控优化:介绍如何通过容器化技术对JAVA应用进行监控和优化
监控和告警系统的重要性
监控和告警系统的组成
去除冗余代码:删除不必要的 代码,提高代码质量
优化算法:改进算法,提高程 序运行效率
减少内存占用:优化内存管理, 减少内存占用
代码可读性:提高代码可读性, 方便维护和调试
PART SIX
数据库连接池 的使用
索引的使用和 优化
查询语句的优 化
数据库连接的 关闭和释放
数 据 库 索 引 : 介 绍 索 引 的 概 念 、 作 用 和 应 用 场 景 , 以 及 在 JAVA 应 用 中 如 何 使 用 索 引 进 行 优 化 缓 存 技 术 : 介 绍 缓 存 的 概 念 、 作 用 和 应 用 场 景 , 以 及 在 JAVA 应 用 中 如 何 使 用 缓 存 进 行 优 化
● 多线程优化:合理利用多线程技术,提高应用程序的并发处理能力和响应速度
● 缓存技术:利用缓存技术减少对数据库等外部资源的访问,提高应用程序的响应速度和吞吐量
识别性能瓶颈: 通过分析应用程 序的响应时间、 吞吐量、内存使 用等指标,确定 性能瓶颈所在
容 ● 性能优化策略
● 代码优化:通过优化代码结构、算法和数据结构来提高应用程序的执行效率
● JVM参数调优:根据应用程序的特点和需求,调整JVM参数以获得更好的性能
PART SEVEN
部署架构:介绍微服务架构、容器化技术、Docker等 容器化技术:介绍Docker的原理、使用方法、优势等 部署架构优化:介绍如何通过容器化技术优化JAVA应用的部署架构 监控优化:介绍如何通过容器化技术对JAVA应用进行监控和优化
监控和告警系统的重要性
监控和告警系统的组成
去除冗余代码:删除不必要的 代码,提高代码质量
优化算法:改进算法,提高程 序运行效率
减少内存占用:优化内存管理, 减少内存占用
代码可读性:提高代码可读性, 方便维护和调试
PART SIX
数据库连接池 的使用
索引的使用和 优化
查询语句的优 化
数据库连接的 关闭和释放
数 据 库 索 引 : 介 绍 索 引 的 概 念 、 作 用 和 应 用 场 景 , 以 及 在 JAVA 应 用 中 如 何 使 用 索 引 进 行 优 化 缓 存 技 术 : 介 绍 缓 存 的 概 念 、 作 用 和 应 用 场 景 , 以 及 在 JAVA 应 用 中 如 何 使 用 缓 存 进 行 优 化
● 多线程优化:合理利用多线程技术,提高应用程序的并发处理能力和响应速度
● 缓存技术:利用缓存技术减少对数据库等外部资源的访问,提高应用程序的响应速度和吞吐量
识别性能瓶颈: 通过分析应用程 序的响应时间、 吞吐量、内存使 用等指标,确定 性能瓶颈所在
oracle性能优化149页PPT

合理运用技术的重要性
二.性能优化分析基本工具的使用
工欲善其事,必先利其器
SQL量化分析和优化工具:
EXPLAIN
SQL*TRACE TKPROF
4种基本的诊断分析工具
AUTO*TRACE
AWR
ADDM
SQL*PROFILING
SQL ACCESS ADVISOR
SQL TUNING ADVISOR
ASH
SQL语句到底是怎么执行的
最经典的执行计划分析工具---EXPLAIN 可以快速的了解语句的执行过程。 目前几乎所有的开发工具(PLSQL developer、toad
等)都有图形化界面,可以直接的分析语句的执行 计划。但如银行类的客户不允许使用工具。
如何配套使用SQL*TRACE和 TKPROF
一. Oracle数据库性能优化方法论
WHY WHO WHAT HOW WHEN
--Why tunes? --Who tunes? --What to tune? --How to tune? --When to tune?
为什么(why)要优化
--系统慢了? --其实慢只是表象 --距离找到慢的原因可能路还很长…
索引未被使用的原因
1.不要轻易的在字段前加函数 2.尽量不要将字段嵌入表达式中 3.避免字符转换 4.索引列的选择性不高 5.索引列值是否可为空(NULL) 6.检查被索引的列或组合索引的首列是否出现在
PL/SQL语句的WHERE子句中 7.优化器的选择
复合索引
1. 前缀性(Prefixing) 复合索引的前缀性是指只有当复合索引的第一个字 段出现在SQL语句的谓词条件中时,该索引才会被用 到。 2. 可选性(Selectivity) Oracle建议复合索引应按字段可选性(即值的多少) 的高低进行排列,这是因为,字段值越多,可选性 越强,定位的记录就越少,查询效率就越高。
MySql优化精品PPT课件

3、解决问题:HOW – 升级硬、软件
不同RAID级别 & 不同磁100
89
80 68
60
40
20
0
raid 5(4)
raid 5(6)
raid 1+0(4)
raid 1+0(6)
3、解决问题:HOW – 升级硬、软件
FW 升级前后 8G内存拷贝38G大文件耗时对比
status/processlist
show [global] status 重点关注key hit ratio, qcache hit ratio, lock, slow
query, innodb buffer hit ratio, innodb data/log write/read
show processlist 重点关注一些异常状态的查询,或者耗时很长的查询
Linux下的MySQL调优
1
需求来源:WHY
2
分析问题:WHERE
3
解决问题:HOW
4
总结
3、解决问题:HOW
硬件
软件
MySQL自身 程序,架构
3、解决问题:HOW – 升级硬、软件
通常硬件是优化的最佳入口,主要是CPU、内存、 磁盘、网络,尤其是IO上的提升 应用服务器和服务器在一个高速的局域网内 通常,新版本的效率不如旧版本,但是可以利用 新版本的新功能来从另一方面得到性能上的提升 编译优化,采用静态编译等 使用更稳定高效的内核 使用合适的文件系统,推荐使用xfs(高级文件系 统实现者指南)
88 86 84 82 80 78
76 74 72 70
86.493 FW升级前
76.0777 FW升级后
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库访问的代码优化
2020/12/10
1
数据库访问的代码优化
利用基本的对数据库的jdbc操作,可以实现对数据的 管理,但是,从可复用、从软件架构的方面、从软件的升
级维护等方面来看,这些是远远不够的,我们需要深入剖
析数据库操作更深层次的知识,进一步掌握对数据库的操
作设计,形成优化的操作方式----》代码优化。 下面我们从以下几 方面逐渐提高对数据库操作的认识。
问题:
操作使用是方便了,但是当修改数据库的配置信息时,还需要修改 DBConst类,当应用系统部署以后,修改这些信息必须得重新编译、部 署或者把这个类重新编译,然后替换换下来的类文件。
虽然用常量表示数据库配置的方法可以给我们带来方便,但还是有缺
陷20。20/1--2-/1》0 近一步优化。
6
1. 3 进一步优化――数据库配置文件 和对数据库操作的封装类
String url=DBConst.URL; //数据库用户名
String user=; //数据库用户密码
String password=DBConst.PASSWORD; //根据数据库参数取得一个数据库连接
Connection conn=null ;
conn=DriverManager.getConnection(url,user,password);
但,这些配置信息需要从文件中读取,为此,需要编写 获取配置信息的一个javabean类。
2020/12/10
8
//----------文件名:DBProperty.java------------------
package beans;
(2)从属性文件中获取
import java.io.IOException;
为了解决用常量表示数据库配置信息带来的问题,避免重新编 译部署应用项目,就需要把数据库配置的信息从Java类中提出出来, 可以使用属性文件来代替描述常量的类,经过这样的处理就可以避免 重新编译、部署应用系统的问题。
同时,实现数据库访问操作类的封装。
2020/12/10
7
Hale Waihona Puke (1)用来描述数据库配置信息的属性文件的内容:
public String getClassName() {
return getProperty("className");
}
public void setClassName(String className) {
//-----------文件名: DB.properties-------------------className=com.mysql.jdbc.Driver url=jdbc:mysql://<数据库服务器IP>:3306/<数据库名称> name=root password=123456
优点:需要修改数据库配置信息时,只修改该属性文件即 可。不需要重新编译、部署。
String password=“123456”;
//根据数据库参数取得一个数据库连接
Connection conn=null ;
conn=DriverManager.getConnection(url,user,password);
问题:若需要更爱数据库的用户名、密码或者更换数据库
驱动,需奥在每个页面(有关类)中都要修改对应的信息,
Class.forName(“com.mysql.jdbc.Driver ”).newInstance();
//指定数据库连接字(连接串)
String url=“jdbc:mysql://<数据库服务器IP>:3306/<数据库名称> ”;
//数据库用户名
String user=“root”;
//数据库用户密码
(1)定义存放数据库连接需要参数的类文件: //-----------文件名: DBConst.java--------------------
package beans; public class DBConst{
public static String CLASSNAME=“com.mysql.jdbc.Driver”; public static String URL=“jdbc:mysql://<数据库服务器IP>:3306/<数据库名称> ”; public static String NAME=“root”; public static String PASSWORD=“123456”; }
在上面这个类中,我们把数据库的基础配置信息都 用常量表示,经过这样的处理,若需要更爱这些信息, 只需要更改这个类文件就可以。
2020/12/10
5
(2)这个常量类的使用方法为:
(2)这个常量类的使用方法为: //加载数据库的驱动类
Class.forName(DBConst.CLASSNAME).newInstance(); //指定数据库连接字(连接串)
2麻020烦/12且/10 容易遗漏。---》需要改进
3
2 初步优化――数据库配置信息基础类
在这种原始的数据库访问操作中,更改数据库的配置 信息是非常麻烦的。
现在可以考虑这样的处理方法: 把数据库的配置信息用常量表示,所有的数据库配 置信息都可以放在一个类中。
代码见下一页。
2020/12/10
4
(1)定义存放数据库连接需要参数的类文件
数据库配置信息类定义
import java.io.InputStream;
import java.util.Properties;
public class DBProperty {
String className=null;
String url=null;
String name=null;
String password=null;
(1)最原始的数据库访问代码示例;
(2)初步优化――数据库配置信息基础类;
(3)进一步优化――数据库配置文件
(4) 继续优化――数据库访问操作类的封装
(5)更进一步优化――DAO类封装数据库操作
(6)追求完美的优化――添加视图、存储过程
2020/12/10
2
1最原始的数据库访问代码——示例
在我们一般 开发的应用系统中,通常采用下面这段代码来建立与数据库的连接。 //加载数据库的驱动类
2020/12/10
1
数据库访问的代码优化
利用基本的对数据库的jdbc操作,可以实现对数据的 管理,但是,从可复用、从软件架构的方面、从软件的升
级维护等方面来看,这些是远远不够的,我们需要深入剖
析数据库操作更深层次的知识,进一步掌握对数据库的操
作设计,形成优化的操作方式----》代码优化。 下面我们从以下几 方面逐渐提高对数据库操作的认识。
问题:
操作使用是方便了,但是当修改数据库的配置信息时,还需要修改 DBConst类,当应用系统部署以后,修改这些信息必须得重新编译、部 署或者把这个类重新编译,然后替换换下来的类文件。
虽然用常量表示数据库配置的方法可以给我们带来方便,但还是有缺
陷20。20/1--2-/1》0 近一步优化。
6
1. 3 进一步优化――数据库配置文件 和对数据库操作的封装类
String url=DBConst.URL; //数据库用户名
String user=; //数据库用户密码
String password=DBConst.PASSWORD; //根据数据库参数取得一个数据库连接
Connection conn=null ;
conn=DriverManager.getConnection(url,user,password);
但,这些配置信息需要从文件中读取,为此,需要编写 获取配置信息的一个javabean类。
2020/12/10
8
//----------文件名:DBProperty.java------------------
package beans;
(2)从属性文件中获取
import java.io.IOException;
为了解决用常量表示数据库配置信息带来的问题,避免重新编 译部署应用项目,就需要把数据库配置的信息从Java类中提出出来, 可以使用属性文件来代替描述常量的类,经过这样的处理就可以避免 重新编译、部署应用系统的问题。
同时,实现数据库访问操作类的封装。
2020/12/10
7
Hale Waihona Puke (1)用来描述数据库配置信息的属性文件的内容:
public String getClassName() {
return getProperty("className");
}
public void setClassName(String className) {
//-----------文件名: DB.properties-------------------className=com.mysql.jdbc.Driver url=jdbc:mysql://<数据库服务器IP>:3306/<数据库名称> name=root password=123456
优点:需要修改数据库配置信息时,只修改该属性文件即 可。不需要重新编译、部署。
String password=“123456”;
//根据数据库参数取得一个数据库连接
Connection conn=null ;
conn=DriverManager.getConnection(url,user,password);
问题:若需要更爱数据库的用户名、密码或者更换数据库
驱动,需奥在每个页面(有关类)中都要修改对应的信息,
Class.forName(“com.mysql.jdbc.Driver ”).newInstance();
//指定数据库连接字(连接串)
String url=“jdbc:mysql://<数据库服务器IP>:3306/<数据库名称> ”;
//数据库用户名
String user=“root”;
//数据库用户密码
(1)定义存放数据库连接需要参数的类文件: //-----------文件名: DBConst.java--------------------
package beans; public class DBConst{
public static String CLASSNAME=“com.mysql.jdbc.Driver”; public static String URL=“jdbc:mysql://<数据库服务器IP>:3306/<数据库名称> ”; public static String NAME=“root”; public static String PASSWORD=“123456”; }
在上面这个类中,我们把数据库的基础配置信息都 用常量表示,经过这样的处理,若需要更爱这些信息, 只需要更改这个类文件就可以。
2020/12/10
5
(2)这个常量类的使用方法为:
(2)这个常量类的使用方法为: //加载数据库的驱动类
Class.forName(DBConst.CLASSNAME).newInstance(); //指定数据库连接字(连接串)
2麻020烦/12且/10 容易遗漏。---》需要改进
3
2 初步优化――数据库配置信息基础类
在这种原始的数据库访问操作中,更改数据库的配置 信息是非常麻烦的。
现在可以考虑这样的处理方法: 把数据库的配置信息用常量表示,所有的数据库配 置信息都可以放在一个类中。
代码见下一页。
2020/12/10
4
(1)定义存放数据库连接需要参数的类文件
数据库配置信息类定义
import java.io.InputStream;
import java.util.Properties;
public class DBProperty {
String className=null;
String url=null;
String name=null;
String password=null;
(1)最原始的数据库访问代码示例;
(2)初步优化――数据库配置信息基础类;
(3)进一步优化――数据库配置文件
(4) 继续优化――数据库访问操作类的封装
(5)更进一步优化――DAO类封装数据库操作
(6)追求完美的优化――添加视图、存储过程
2020/12/10
2
1最原始的数据库访问代码——示例
在我们一般 开发的应用系统中,通常采用下面这段代码来建立与数据库的连接。 //加载数据库的驱动类