JavaWeb-JDBC-2-不仅仅只是连接
来源:互联网 发布:sql授权语句 revoke 编辑:程序博客网 时间:2024/06/06 19:39
话说
在JavaWeb-JDBC-1-不仅仅只是连接里面,我们做了CURD的操作,不过我们重复写了好多遍,就会想到如何去做优化,难道每次都这么写?这只能算是操作工,没有思想的操作工罢了。
今天,在上次基础上做优化。
先看下JavaWeb结构:
一、我们今天升级的第一个版本是daov1.
发现,在1里面,在加载驱动、获取连接、关闭资源方面,代码都相同,故而做个封装。封装成BaseDaoV1,代码如下:
package com.hmc.jdbc.daov1;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * @Author Meice * @Date 2017年8月5日 */public class BaseDaoV1 { // 把加载驱动这部分放在静态语句块里,随着类的加载而加载 static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //把获取连接这一CURD都共有的操作封装成getConn()方法。 public Connection getConn() { Connection conn = null; String url = "jdbc:mysql://localhost:3306/news_db"; String user = "root"; String password = "119913"; try { conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } // 定义关闭资源方法close() public void close(ResultSet rs, PreparedStatement ps, Connection conn) { try { if(rs != null) rs.close(); if(ps != null) ps.close(); if(conn != null) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
总结:
1 重复性的的代码,就封装成方法,直接调用。如同我们给自己确定的一
些原则和底线一样,遇到类似的事情,我们直接选择,不用纠结。我会
固定买一些品牌的服装,买的时候直接买,很省事省力,选择是很费精
力的事情。
2 创建方法的时候,考虑好是否有返回值,方法修饰符以及是否带参。
3 我们有4中选择可以利用已有的方法
1)new这个类,调用方法;
2)设置为静态语句块,不用调兵遣将,直接随着类的加载而加载;
3)把这个方法也定义为静态的,不用new,直接调用。
4)extends这个类,也就继承了类的方法和属性(除private),用this调用。
二、测试版,测试CURD
package com.hmc.jdbc.daov1;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * @Author Meice * @Date 2017年8月5日 */public class TestBaseDaoV1CURD extends BaseDaoV1{ //定义为全局变量,方便多个方法调用。 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; // 1 测试Select public void select() { //调用BaseDaoV1封装好的getConn()方法获取连接 conn = this.getConn(); String sql = "select * from t_news"; // 预编译 try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(); //遍历结果集 while(rs.next()) { //可以根据.getInt( int columnIndex)或者.getInt(String columnLabel)来获取集合中的具体值。 System.out.println(rs.getInt("id")+"--"+rs.getString("title")+rs.getString("author")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //调用关闭资源方法close() this.close(rs, ps, conn); } } //2 测试Insert public void add() { conn = this.getConn(); String sql = "insert into t_news (title,author) values (?,?)"; try { ps = conn.prepareStatement(sql); ps.setString(1, "我是V1版本新增的新闻1"); ps.setString(2, "admin3"); int result = ps.executeUpdate(); if(result>0) { System.out.println("恭喜你,增加新闻成功!"); }else { System.out.println("遗憾,增加新闻失败!"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { /** * 这里要注意,我们executeUpdate()方法,是没有返回结果集ResultSet的。 * 所以用null来替代,如果没有就不关闭。 */ this.close(null, ps, conn); } } // 3 测试update public void update() { conn = this.getConn(); String sql = "update t_news set title = ?,author = ? where id = ? "; try { ps = conn.prepareStatement(sql); //这只参数。第一个参数代表第几个?,第二个参数代表值 ps.setString(1, "我是DaoV1修改后的新闻"); ps.setString(2, "admin5"); ps.setInt(3, 6); int result = ps.executeUpdate(); if(result>0) { System.out.println("DaoV1修改新闻成功!"); }else { System.out.println("遗憾,DaoV1修改新闻失败!"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { this.close(null, ps, conn); } } //4 测试delete public void Del() { conn = this.getConn(); String sql = "delete from t_news where id = ?"; try { ps = conn.prepareStatement(sql); //注意设置参数的位置,应该在执行之前,预编译之后。如果在预编译之前,汇报NullPointException ps.setInt(1, 6); int result = ps.executeUpdate(); if(result>0) { System.out.println("DaoV1执行删除成功!可喜可贺!"); } else { System.out.println("DaoV1执行删除失败!再接再厉!"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { this.close(null, ps, conn); } } public static void main(String[] args) { // new TestBaseDaoV1CURD().select(); // new TestBaseDaoV1CURD().add(); // new TestBaseDaoV1CURD().update(); new TestBaseDaoV1CURD().Del(); }}
总结
1 除了Select与众不同之外,发现还是写了大量重复性代码,如何继续优化?
2 优化insert update delete,怎么优化?看来只能在sql和传参上想办法了;
3 这里会发现main方法测试的一个弊端,我只想执行一个方法,但是main()总是不由分辨的从头执行到尾。所以得注释掉测试。因此,世界上就诞生了Junit测试,想测试哪个就测试哪个。
预知后事如何,请听下回分解。
- JavaWeb-JDBC-2-不仅仅只是连接
- JavaWeb-JDBC-1-不仅仅只是连接
- JavaWeb-JDBC-3-不仅仅只是连接
- JavaWeb-JDBC连接数据库
- [世界杯]世界杯不仅仅只是足球
- JavaWeb入门:JDBC连接数据库
- javaweb通过jdbc连接数据库
- javaweb—JDBC连接数据库
- JavaWeb-JDBC-数据连接池
- JavaWeb-JDBC连接池、JDBC框架
- 虚拟化不仅仅只是一种技术?
- 数字货币,不仅仅只是比特币
- 开始,希望不仅仅只是个开始
- Java8 Lambda不仅仅只是语法糖
- JavaWeb JDBC初步连接和JDBC连接规范化
- idea下javaWeb jdbc连接sqlite数据库
- JavaWeb JDBC连接MySql数据库小项目
- 用Excel获取数据——不仅仅只是打开表格
- 数据结构笔记——线性表
- Pixhawk学习起步篇
- linux 文件操作及chmod权限
- c#垃圾回收机制
- python学习之路-基础篇-day04
- JavaWeb-JDBC-2-不仅仅只是连接
- 2017百度之星 资格赛 1003 度度熊与邪恶大魔王(dp)
- Python,PyCharm2017安装教程,包含注册码
- 【字符串】旋转字符串(左旋或右旋k个字符)
- 爱奇艺2017秋招c++开发工程师笔试卷
- 集合的同步和不同步
- Linux USB总线架构
- JAVA 使用Comparator接口实现自定义排序
- geometryEngine中geodesicBuffer()方法分析