﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-cccp21-最新评论</title><link>http://www.blogjava.net/cccp21/CommentsRSS.aspx</link><description /><language>zh-cn</language><pubDate>Sat, 31 Jan 2009 13:05:00 GMT</pubDate><lastBuildDate>Sat, 31 Jan 2009 13:05:00 GMT</lastBuildDate><generator>cnblogs</generator><item><title>re: JDBC查询动态封装</title><link>http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252799</link><dc:creator>银河使者</dc:creator><author>银河使者</author><pubDate>Sat, 31 Jan 2009 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252799</guid><description><![CDATA[@ cccp21<br>在使用ResultSet时当然不能关闭Connection，不知道你为什么会在使用ResultSet之间关闭Connection，这个Connection是共享的？还是用的什么其他方式。为了提高效率，可以使用连接池，一般每个Connection都是线程独享的，用完了再还给连接池。以上只针对Web应用，如果是桌面引用，建议使用Web Service方式。 <br><br>    如果想关闭ResultSet方便些，可以使用jdbc+spring的方式，也就是jdbcTemplate，这个很方便。基本原理是从连接池中获得一个Connection，执行一条或多条SQL语句，返回结果（这个结果也是封装的，和你的方法差不多，但考虑了异常处理），在返回结果之前，Connection就已经关闭了，关闭的动作是由Spring自动完成的。 而对于用户来说，只是调用了JdbcTemplate的一个方法来获得查询结果。再也不用考虑什么Connection、ResultSet，另人讨厌。不过对于小程序，用什么都行，我还是喜欢直接用jdbc，对于大一点的程序，尤其对Web程序，个人认为用jdbc +Spring比较好，如果想更高级一些，还跨数据库，可以使用hibernate+spring的方式。<img src ="http://www.blogjava.net/cccp21/aggbug/252799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cccp21/" target="_blank">银河使者</a> 2009-01-31 21:05 <a href="http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252799#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: JDBC查询动态封装</title><link>http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252778</link><dc:creator>cccp21</dc:creator><author>cccp21</author><pubDate>Sat, 31 Jan 2009 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252778</guid><description><![CDATA[@银河使者<br>我觉得这个思路不错是因为这样可以在同一个方法中建立、关闭数据库连接。之前曾经在关闭数据库连接这个问题上吃过亏。<br>如果在应用中直接访问ResultSet，关闭数据库连接有点麻烦——如果之前就关闭了数据库连接，那么应用在ResultSet中就访问不到数据，而不关闭的话，就要在应用完成后关闭数据库连接，这里就会有些混乱。你有什么好主意呢？<img src ="http://www.blogjava.net/cccp21/aggbug/252778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cccp21/" target="_blank">cccp21</a> 2009-01-31 10:57 <a href="http://www.blogjava.net/cccp21/archive/2009/01/31/252588.html#252778#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: JDBC查询动态封装</title><link>http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252711</link><dc:creator>银河使者</dc:creator><author>银河使者</author><pubDate>Thu, 29 Jan 2009 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252711</guid><description><![CDATA[封装本是面象对象最值得称道的地方，如果封装得太多有时得不偿失。个人认为在业务逻辑层，只要不直接涉及到SQL就可以，因为SQL本身是和数据库相关的，而业务逻辑层应和数据库不相关。但对于JDBC中的对象的使用上来说，一般也是和数据库不相关的（至少对于象SQL Server、oracle、db2、mysql这样的数据库来说是这样的）。<br><br>   结论：数据访问层直接和数据库相关，可以涉及任何的SQL语句。业务逻辑层与数据库无关，在该层直接访问数据层，不能直接在业务逻辑层编写SQL语句，但可以使用JDBC的相关对象。<img src ="http://www.blogjava.net/cccp21/aggbug/252711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cccp21/" target="_blank">银河使者</a> 2009-01-29 19:31 <a href="http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252711#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: JDBC查询动态封装</title><link>http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252710</link><dc:creator>银河使者</dc:creator><author>银河使者</author><pubDate>Thu, 29 Jan 2009 11:26:00 GMT</pubDate><guid>http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252710</guid><description><![CDATA[@ cccp21<br>不讨论PreparedStatement了，要想动态，一般也是采用你的方法，即动态生成带SQL参数的SQL语句，以及通过循环调用setter方法来设置参数的值，这就是动态，所有的动态基本都是这么弄的。<br>我是说第二个问题，在查询后，又使用Map和Vector再对数据进行封装，是不是有些耗资源。要注意哦，如果是Web程序，可不是一个用户或几个用户在访问程序啊，要是门户类型的系统，可能在一分钟之内就会有数以万计的用户来访问。这时就要建立多达数万个Map和Vector，服务器会挂的。当然，如果用户在可控范围内，这么做是没有问题的。但是可以封装得更高级一些，如返回的这些数据直接可以被某些用于显示的组件使用，如使用json格式的组件。这根据具体情况而定。<br>   是的，使用Map和Vector可以从逻辑上将JDBC和应用进行分离。但个人认为要想分离，可以从数据层及应用逻辑层进行分离更好。也就是有数据层提供相应的访问数据的方法，如获得指定用户的保存在数据库中的密码。而应用逻辑层一般不直接访问数据库，可以访问数据层中的方法进行逻辑处理。  <br>    虽然将数据放在Map是Vector中是更抽象了，但JDBC本身就是抽象的，在业务逻辑层直接访问ResultSet并没有什么不妥，因为不管后台用的是什么数据库，从ResultSet中获得数据的方法都是一样的。如果非想要跨数据库，不如直接用hibernate。<img src ="http://www.blogjava.net/cccp21/aggbug/252710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cccp21/" target="_blank">银河使者</a> 2009-01-29 19:26 <a href="http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252710#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: JDBC查询动态封装</title><link>http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252692</link><dc:creator>cccp21</dc:creator><author>cccp21</author><pubDate>Thu, 29 Jan 2009 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252692</guid><description><![CDATA[@银河使者<br>请注意，是条件的个数是动态的，PreparedStatement只是让开发者设置参数值，但是参数个数还是固定的。<br>把每行放在一个Map中，再把结果集放在Vector中，是为了把JDBC与应用分离开，我开始的时候也和你一样，后来才听别人指出这一点的。<img src ="http://www.blogjava.net/cccp21/aggbug/252692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cccp21/" target="_blank">cccp21</a> 2009-01-29 11:31 <a href="http://www.blogjava.net/cccp21/archive/2009/01/29/252588.html#252692#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: JDBC查询动态封装</title><link>http://www.blogjava.net/cccp21/archive/2009/01/26/252588.html#252589</link><dc:creator>银河使者</dc:creator><author>银河使者</author><pubDate>Mon, 26 Jan 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/cccp21/archive/2009/01/26/252588.html#252589</guid><description><![CDATA[条件是动态的也可以用查询参数，用java.sql.PreparedStatement就可以。楼主只是做了个封装，不过个人认为ResultSet本身也可以根据列名来定位列，而再把每行放在一个Map中，再把结果集放在Vector中，感觉有些多此一举。<img src ="http://www.blogjava.net/cccp21/aggbug/252589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cccp21/" target="_blank">银河使者</a> 2009-01-26 19:00 <a href="http://www.blogjava.net/cccp21/archive/2009/01/26/252588.html#252589#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>