天天看点

JDBC总结4.1 - DBHelp中加入查询

JDBC总结4中,我们的查询依然是放在每个DAO中,而不是DBHelp类中,这样还是不够简化的!下面简化一下:

在util包中建立一个接口:

<code>package</code> <code>com.hanchao.util;</code>

<code>import</code> <code>java.sql.ResultSet;</code>

<code>import</code> <code>java.sql.SQLException;</code>

<code>/***********************</code>

<code> </code><code>* @author:han    </code>

<code> </code><code>* @version:1.0        </code>

<code> </code><code>* @created:2015-10-11    </code>

<code> </code><code>***********************</code>

<code> </code><code>*/</code>

<code>public</code> <code>interface</code> <code>RowMapper {</code>

<code>    </code><code>public</code> <code>Object mapRow(ResultSet rs) </code><code>throws</code> <code>SQLException;</code>

<code>}</code>

3.在dao包中,

<code>package</code> <code>com.hanchao.dao;</code>

<code>import</code> <code>java.util.List;</code>

<code>import</code> <code>com.hanchao.entity.Account;</code>

<code>import</code> <code>com.hanchao.util.DBHelp;</code>

<code>public</code> <code>class</code> <code>AccountDao {</code>

<code>    </code> 

<code>    </code><code>private</code> <code>DBHelp dbHelp = </code><code>new</code> <code>DBHelp();</code>

<code>    </code><code>/**</code>

<code>     </code><code>* 保存</code>

<code>     </code><code>* *******************</code>

<code>     </code><code>* @param accout</code>

<code>     </code><code>* @return</code>

<code>     </code><code>* @author:wind</code>

<code>     </code><code>* 2015-10-11 下午9:31:28</code>

<code>     </code><code>*/</code>

<code>    </code><code>public</code> <code>int</code> <code>save(Account accout) {</code>

<code>        </code><code>String sql = </code><code>"insert into t_account(username,password,money,enable) value(?,?,?,?)"</code><code>;</code>

<code>        </code><code>return</code> <code>dbHelp.executeSQL(sql, accout.getUsername(),accout.getMoney(),accout.getMoney(),accout.isEnable());</code>

<code>    </code><code>}</code>

<code>     </code><code>* update</code>

<code>     </code><code>* @param account</code>

<code>     </code><code>* 2015-10-11 下午9:37:53</code>

<code>    </code><code>public</code> <code>int</code> <code>update(Account account) {</code>

<code>        </code><code>String sql = </code><code>"update t_account set username=?,password=?,money=?,enable=? where id = ?"</code><code>;</code>

<code>        </code><code>return</code> <code>dbHelp.executeSQL(sql, account.getUsername(),account.getPassword(),account.getMoney(),account.isEnable(),account.getId());</code>

<code>     </code><code>* detele</code>

<code>     </code><code>* @param id</code>

<code>     </code><code>* 2015-10-11 下午9:56:24</code>

<code>    </code><code>public</code> <code>int</code> <code>delete(</code><code>int</code> <code>id) {</code>

<code>        </code><code>String sql = </code><code>"delete from t_account where id = ?"</code><code>;</code>

<code>        </code><code>return</code> <code>dbHelp.executeSQL(sql, id);</code>

<code>     </code><code>* 根据ID查找对象</code>

<code>     </code><code>* 2015-10-11 下午10:05:46</code>

<code>    </code><code>public</code> <code>Account findById(</code><code>int</code> <code>id) {</code>

<code>        </code><code>String sql = </code><code>"select id,username,password,money,enable from t_account where id = ?"</code><code>;</code>

<code>        </code><code>return</code> <code>(Account) dbHelp.executeQueryForObject(</code><code>new</code> <code>AccountMapper(), sql, id);</code>

<code>     </code><code>* 查找所有</code>

<code>     </code><code>* 2015-10-11 下午10:17:03</code>

<code>    </code><code>public</code> <code>List&lt;Account&gt; findAll() {</code>

<code>        </code><code>String sql = </code><code>"select id,username,password,money,enable from t_account"</code><code>;</code>

<code>        </code><code>return</code> <code>dbHelp.executeQueryForList(</code><code>new</code> <code>AccountMapper(), sql);</code>

实现类:实现接口的方法

<code>import</code> <code>com.hanchao.util.RowMapper;</code>

<code>public</code> <code>class</code> <code>AccountMapper </code><code>implements</code> <code>RowMapper{</code>

<code>    </code><code>@Override</code>

<code>    </code><code>public</code> <code>Object mapRow(ResultSet rs) </code><code>throws</code> <code>SQLException {</code>

<code>        </code><code>Account account = </code><code>new</code> <code>Account();</code>

<code>        </code><code>account.setId(rs.getInt(</code><code>"id"</code><code>));</code>

<code>        </code><code>account.setUsername(rs.getString(</code><code>"username"</code><code>));</code>

<code>        </code><code>account.setPassword(rs.getString(</code><code>"password"</code><code>));</code>

<code>        </code><code>account.setMoney(rs.getFloat(</code><code>"money"</code><code>));</code>

<code>        </code><code>account.setEnable(rs.getBoolean(</code><code>"enable"</code><code>));</code>

<code>        </code><code>return</code> <code>account;</code>

4.那我们的DBhelp如何写呢?

<code>import</code> <code>java.sql.Connection;</code>

<code>import</code> <code>java.sql.DriverManager;</code>

<code>import</code> <code>java.sql.PreparedStatement;</code>

<code>import</code> <code>java.util.ArrayList;</code>

<code> </code><code>* 帮助类</code>

<code>public</code> <code>class</code> <code>DBHelp {</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>String DRIVER = </code><code>"com.mysql.jdbc.Driver"</code><code>;</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>String URL = </code><code>"jdbc:mysql:///mydb"</code><code>;</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>String DB_NAME = </code><code>"root"</code><code>;</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>String DB_PASSWORD = </code><code>"root"</code><code>;</code>

<code>    </code><code>public</code> <code>Connection getConnection() </code><code>throws</code> <code>SQLException, ClassNotFoundException {</code>

<code>        </code><code>Class.forName(DRIVER);</code>

<code>        </code><code>Connection conn = DriverManager.getConnection(URL,DB_NAME,DB_PASSWORD);</code>

<code>        </code><code>return</code> <code>conn;</code>

<code>    </code><code>public</code> <code>int</code> <code>executeSQL(String sql ,Object...args) {</code>

<code>        </code><code>Connection conn = </code><code>null</code><code>;</code>

<code>        </code><code>PreparedStatement stat = </code><code>null</code><code>;</code>

<code>        </code><code>int</code> <code>rows = </code><code>0</code><code>;</code>

<code>        </code> 

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>conn = getConnection();</code>

<code>            </code><code>stat = conn.prepareStatement(sql);</code>

<code>            </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; args.length; i++) {</code>

<code>                </code><code>stat.setObject(i+</code><code>1</code><code>, args[i]);</code>

<code>            </code><code>}</code>

<code>            </code><code>rows = stat.executeUpdate();</code>

<code>            </code><code>if</code> <code>(rows &gt; </code><code>0</code><code>) {</code>

<code>                </code><code>System.out.println(</code><code>"operate successfully!"</code><code>);</code>

<code>            </code> 

<code>        </code><code>} </code><code>catch</code> <code>(ClassNotFoundException e) {</code>

<code>            </code><code>e.printStackTrace();</code>

<code>        </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>

<code>        </code><code>} </code><code>finally</code> <code>{</code>

<code>            </code><code>this</code><code>.close(conn, stat);</code>

<code>        </code><code>}</code>

<code>        </code><code>return</code> <code>rows;</code>

<code>    </code><code>public</code> <code>void</code> <code>close(ResultSet rs,Connection conn , PreparedStatement stat) {</code>

<code>            </code><code>if</code> <code>(rs != </code><code>null</code><code>) {</code>

<code>                </code><code>rs.close();</code>

<code>            </code><code>try</code> <code>{</code>

<code>                </code><code>if</code> <code>(stat != </code><code>null</code><code>) {</code>

<code>                    </code><code>stat.close();</code>

<code>                </code><code>}</code>

<code>            </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>

<code>                </code><code>e.printStackTrace();</code>

<code>            </code><code>} </code><code>finally</code> <code>{</code>

<code>                </code><code>try</code> <code>{</code>

<code>                    </code><code>if</code> <code>(conn != </code><code>null</code><code>) {</code>

<code>                        </code><code>conn.close();</code>

<code>                    </code><code>}</code>

<code>                </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>

<code>                    </code><code>e.printStackTrace();</code>

<code>                </code><code>} </code>

<code>    </code><code>public</code> <code>void</code> <code>close(Connection conn , PreparedStatement stat) {</code>

<code>        </code><code>this</code><code>.close(</code><code>null</code><code>,conn, stat);</code>

<code>     </code><code>* @param rm</code>

<code>     </code><code>* @param sql</code>

<code>     </code><code>* @param args</code>

<code>     </code><code>* 2015-10-11 下午11:05:58</code>

<code>    </code><code>public</code> <code>Object executeQueryForObject(RowMapper rm,String sql ,Object...args) {</code>

<code>        </code><code>Object result = </code><code>null</code><code>;</code>

<code>        </code><code>ResultSet rs = </code><code>null</code><code>;</code>

<code>                </code><code>stat.setObject(i+</code><code>1</code><code>,args[i]);</code>

<code>            </code><code>rs = stat.executeQuery();</code>

<code>            </code><code>if</code> <code>(rs.next()) {</code>

<code>                </code><code>result = (Account) rm.mapRow(rs);</code>

<code>            </code><code>close(rs, conn, stat);</code>

<code>        </code><code>return</code> <code>result;</code>

<code>     </code><code>* 查找集合</code>

<code>     </code><code>* 2015-10-11 下午11:12:49</code>

<code>    </code><code>public</code> <code>List executeQueryForList(RowMapper rm,String sql,Object...args) {</code>

<code>        </code><code>List list = </code><code>new</code> <code>ArrayList();</code>

<code>            </code><code>while</code> <code>(rs.next()) {</code>

<code>                </code><code>Object obj = rm.mapRow(rs);</code>

<code>                </code><code>list.add(obj);</code>

<code>            </code><code>this</code><code>.close(rs,conn, stat);</code>

<code>        </code><code>return</code> <code>list;</code>

5.测试一下:

<code>package</code> <code>com.hanchao.test;</code>

<code>import</code> <code>com.hanchao.dao.AccountDao;</code>

<code>public</code> <code>class</code> <code>Test {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>        </code><code>//增</code>

<code>/*      Account account = new Account();</code>

<code>        </code><code>account.setEnable(true);</code>

<code>        </code><code>account.setMoney(20f);</code>

<code>        </code><code>account.setUsername("hanchao1");</code>

<code>        </code><code>account.setPassword("1234561");</code>

<code>        </code><code>AccountDao accountDao = new AccountDao();</code>

<code>        </code><code>accountDao.save(account);*/</code>

<code>        </code><code>//改</code>

<code>        </code><code>account.setId(8);</code>

<code>        </code><code>account.setMoney(21f);</code>

<code>        </code><code>account.setUsername("hanchao2dd1");</code>

<code>        </code><code>account.setPassword("1234562dsds2");</code>

<code>        </code><code>accountDao.update(account);*/</code>

<code>        </code><code>//删</code>

<code>/*      AccountDao accountDao = new AccountDao();</code>

<code>        </code><code>accountDao.delete(2);*/</code>

<code>        </code><code>//查询</code>

<code>        </code><code>Account account = accountDao.findById(8);</code>

<code>        </code><code>if (account != null) {</code>

<code>            </code><code>System.out.println("id:" + account.getId() + ",name:" + account.getUsername());</code>

<code>        </code><code>} else {</code>

<code>            </code><code>System.out.println("not exist!");</code>

<code>        </code><code>}*/</code>

<code>        </code><code>AccountDao accountDao = </code><code>new</code> <code>AccountDao();</code>

<code>        </code><code>List&lt;Account&gt; list = accountDao.findAll();</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; list.size(); i++) {</code>

<code>            </code><code>System.out.println(</code><code>"id:"</code> <code>+ list.get(i).getId() + </code><code>"  ,name:"</code> <code>+  list.get(i).getUsername());</code>

这样,我们的DBhelp类就是一个彻底的工具类了,虽然不够优化,但是,可以实现基本的工具类的功能了!

     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1701978,如需转载请自行联系原作者