自己动手写框架
来源:互联网 发布:三国志11知乎 编辑:程序博客网 时间:2024/04/28 06:49
今天开始将日记内容记录在这里。日记记录的是自己的一些想法的流动,发上来是为了防止日记丢失。
——————————————————————————————————————————————————————————————————————————————————
第一步:连接数据库
.LOG
17:35 2012-1-13
看了余浩东的关于他的BJAF的书,想说自己边看边写,弄一个自己的框架,当做学习之用。
17:39 2012-1-13
第一天是关于数据库的连接的封装。主要的思想就是将jdbc的底层操作封装起来提供更方便安全的接口。
主要考虑的地方在于连接池的管理。可以一次建立n个连接,当不够时,重新建立n个连接。当重新再创建连接的时候可能造成性能问题,所以可以对连接进行监控从而实时地创建连接。
14:43 2012-1-14
将对数据库的连接弄好了,用mysql测试,没有使用其他数据库。麻烦的地方在于要手动添加各种数据库的驱动包,不知道能不能通过什么方法来解决。
另外,目前的所有异常只是直接输出异常信息,没有抛出。
23:04 2012-1-14
关于连接池的维护和最大连接数的问题讨论。连接池当请求不到连接的时候将会重新添加连接,并没有考虑是否超出最大连接数。而内建的监控线程会周期性地对已经关闭的连接清除出连接池,并重新添加连接,使连接维持在最小和最大连接数之间。另外一个问题是,当前的连接是由使用者来关闭的,而不是框架自动关闭(仅在关闭连接池的时候会关闭全部连接)。
这样的话可能会出现连接数超过DBMS设置的最大连接数的情况。为了解决这个问题,应该使getConnection()函数能够抛出异常,当连接数超出的时候通过异常来通知用户。并且要求在初始化连接池的时候必须使设置的最大连接数等于DBMS实际上的最大连接数
19:03 2012-2-24
关于数据库的驱动程序放置位置:将整个jar放在/java-6-openjdk/jre/lib/ext 中即可。
对底层操作的封装:底层操作主要包括:Connection, DriverManager, statement, ResultSet。处理对数据库的连接、执行,包括对抛出异常的处理,使使用者不用处理这些异常,不用跟这些底层api打交道。
22:45 2012-2-26
有两个问题。
1、对于异常的处理原则。对底层操作进行封装的原因之一就是为了处理那些频繁出现的try/catch语句,那么当出现异常的时候应该怎么处理呢?我想到了两种做法:第一种是选择性地抛出检查异常,而对于一些异常则由框架自己处理;第二种是将所有的检查异常转化为运行时异常,从而使用者可以自己选择是否捕捉该 异常,框架在异常发生的地方做记录(log),并将异常转化为RuntimeException抛出。
我选择了第二种方法,这样的话使用者可以更灵活的使用异常。而对于异常发生的地方,使用者应该是事先有准备的,比如说请求连接数可能超出已有连接数,这时候使用者就应该使用try/catch语句来捕捉异常并进行相关处理。使用者可以通过测试来发现哪些地方应该处理异常。
2、对ResultSet的封装。ResultSet是一个接口,只能够从statement中获取;当statement关闭的时候Resultset会自动关闭。但是最好是当使用完结果集的时候手动关闭结果集。所以应该封装对结果集的操作,使其可以在必要时候关闭,在不需要的时候自动关闭。而由查询操作获取的结果集,事实上可以看成一个二维表加上一些关于结果集的元数据。关于结果集内容的获取操作也属于底层操作,应该封装起来。做法是使用一个一维数组来保存元数据,用一个二维数组来保存查询结果。问题在于,当sql语句返回的数据集过大的时候,将会消耗大量的内存空间。
或许可以使用两种不同的封装,一种不关闭结果集,而仅仅封装对结果集的获取和关闭操作,另一种将结果集的信息提取出来之后关闭结果集,数据存放在数组里面。这样,当使用可能返回大量数据的sql语句,可以使用第一种结果集,当使用仅返回少量数据的sql(比如在O-R映射的时候),可以使用关闭的结果集。
而事实上,sun公司出的RowSet对上面的两种方式已经有类似的实现。
16:00 2012-02-29
关于结果集过大的解决方法。今天看了书发现,可以使用分页方式来获取结果集,具体实现是使用sql。具体的sql语法因数据库的不同而不同。比如在MySql中,语法是:
QUERY_SQL limit ?,?
第一个?是行号,第二个是返回的数量。
还可以使用存储过程,但是存储过程语言没学,看了也不大懂。
- 自己动手写框架
- 自己动手写AJAX框架
- 自己动手写ajax框架
- 自己动手写MVC框架
- 自己动手写Struts框架
- 自己动手写注解框架
- 自己动手写web框架----1
- 自己动手写web框架----2
- 《自己动手写框架1》:缘起
- 自己动手写Rpc框架系列
- 自己动手写Android数据库框架
- 自己动手写ORM框架-java
- 自己动手写PHP MVC框架
- 自己动手写PHP MVC框架
- 自己动手写PHP MVC框架
- 自己动手写PHP MVC框架
- 自己动手写Web自动化测试框架
- 《自己动手写框架3》:业务流程引擎设计
- 更改Android编译时的默认配置
- Eclipse安装SVN插件
- NHibernate 异常 No persister for 类名
- 设计模式
- wince 下有哪些可以玩的免费游戏软件?
- 自己动手写框架
- 滑动显示首字母的ListView
- Linux练习题
- Windows核心编程<读书笔记十四>虚拟内存二 VMQuery程序
- 【转载】 ssh 连接 通过公钥体制,无密码登陆
- 755 487--3279(***)
- 开篇
- setDefaultKeyMode 用法介绍
- 关于同步(Sync),异步(Async),阻塞(Block),非阻塞等网络通信的一些解释