自己动手写框架

今天开始将日记内容记录在这里。日记记录的是自己的一些想法的流动,发上来是为了防止日记丢失。

——————————————————————————————————————————————————————————————————————————————————

第一步:连接数据库

.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 ?,?

第一个?是行号,第二个是返回的数量。

还可以使用存储过程,但是存储过程语言没学,看了也不大懂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值