BlogJava-cccp21-最新评论http://www.blogjava.net/cccp21/CommentsRSS.aspxzh-cnSat, 31 Jan 2009 13:05:00 GMTSat, 31 Jan 2009 13:05:00 GMTcnblogsre: JDBC查询动态封装http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252799银河使者银河使者Sat, 31 Jan 2009 13:05:00 GMThttp://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252799在使用ResultSet时当然不能关闭Connection,不知道你为什么会在使用ResultSet之间关闭Connection,这个Connection是共享的?还是用的什么其他方式。为了提高效率,可以使用连接池,一般每个Connection都是线程独享的,用完了再还给连接池。以上只针对Web应用,如果是桌面引用,建议使用Web Service方式。

如果想关闭ResultSet方便些,可以使用jdbc+spring的方式,也就是jdbcTemplate,这个很方便。基本原理是从连接池中获得一个Connection,执行一条或多条SQL语句,返回结果(这个结果也是封装的,和你的方法差不多,但考虑了异常处理),在返回结果之前,Connection就已经关闭了,关闭的动作是由Spring自动完成的。 而对于用户来说,只是调用了JdbcTemplate的一个方法来获得查询结果。再也不用考虑什么Connection、ResultSet,另人讨厌。不过对于小程序,用什么都行,我还是喜欢直接用jdbc,对于大一点的程序,尤其对Web程序,个人认为用jdbc +Spring比较好,如果想更高级一些,还跨数据库,可以使用hibernate+spring的方式。

银河使者 2009-01-31 21:05 发表评论
]]>
re: JDBC查询动态封装http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252778cccp21cccp21Sat, 31 Jan 2009 02:57:00 GMThttp://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252778我觉得这个思路不错是因为这样可以在同一个方法中建立、关闭数据库连接。之前曾经在关闭数据库连接这个问题上吃过亏。
如果在应用中直接访问ResultSet,关闭数据库连接有点麻烦——如果之前就关闭了数据库连接,那么应用在ResultSet中就访问不到数据,而不关闭的话,就要在应用完成后关闭数据库连接,这里就会有些混乱。你有什么好主意呢?

cccp21 2009-01-31 10:57 发表评论
]]>
re: JDBC查询动态封装http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252711银河使者银河使者Thu, 29 Jan 2009 11:31:00 GMThttp://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252711
结论:数据访问层直接和数据库相关,可以涉及任何的SQL语句。业务逻辑层与数据库无关,在该层直接访问数据层,不能直接在业务逻辑层编写SQL语句,但可以使用JDBC的相关对象。

银河使者 2009-01-29 19:31 发表评论
]]>
re: JDBC查询动态封装http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252710银河使者银河使者Thu, 29 Jan 2009 11:26:00 GMThttp://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252710不讨论PreparedStatement了,要想动态,一般也是采用你的方法,即动态生成带SQL参数的SQL语句,以及通过循环调用setter方法来设置参数的值,这就是动态,所有的动态基本都是这么弄的。
我是说第二个问题,在查询后,又使用Map和Vector再对数据进行封装,是不是有些耗资源。要注意哦,如果是Web程序,可不是一个用户或几个用户在访问程序啊,要是门户类型的系统,可能在一分钟之内就会有数以万计的用户来访问。这时就要建立多达数万个Map和Vector,服务器会挂的。当然,如果用户在可控范围内,这么做是没有问题的。但是可以封装得更高级一些,如返回的这些数据直接可以被某些用于显示的组件使用,如使用json格式的组件。这根据具体情况而定。
是的,使用Map和Vector可以从逻辑上将JDBC和应用进行分离。但个人认为要想分离,可以从数据层及应用逻辑层进行分离更好。也就是有数据层提供相应的访问数据的方法,如获得指定用户的保存在数据库中的密码。而应用逻辑层一般不直接访问数据库,可以访问数据层中的方法进行逻辑处理。
虽然将数据放在Map是Vector中是更抽象了,但JDBC本身就是抽象的,在业务逻辑层直接访问ResultSet并没有什么不妥,因为不管后台用的是什么数据库,从ResultSet中获得数据的方法都是一样的。如果非想要跨数据库,不如直接用hibernate。

银河使者 2009-01-29 19:26 发表评论
]]>
re: JDBC查询动态封装http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252692cccp21cccp21Thu, 29 Jan 2009 03:31:00 GMThttp://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252692请注意,是条件的个数是动态的,PreparedStatement只是让开发者设置参数值,但是参数个数还是固定的。
把每行放在一个Map中,再把结果集放在Vector中,是为了把JDBC与应用分离开,我开始的时候也和你一样,后来才听别人指出这一点的。

cccp21 2009-01-29 11:31 发表评论
]]>
re: JDBC查询动态封装http://www.blogjava.net/cccp21/archive/2009/01/26/252588.html#252589银河使者银河使者Mon, 26 Jan 2009 11:00:00 GMThttp://www.blogjava.net/cccp21/archive/2009/01/26/252588.html#252589

银河使者 2009-01-26 19:00 发表评论
]]>