`
iorit2003
  • 浏览: 138685 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

封装jdbc

阅读更多
  • 这时是数据库的表:  
  •   
  • DROP DATABASE IF EXISTS `hibernate`;  
  • CREATE DATABASE `hibernate` ;  
  • USE `hibernate`;  
  • CREATE TABLE `person` (  
  •   `id` int(32) NOT NULL DEFAULT '0',  
  •   `name` varchar(20) NOT NULL,  
  •   `password` varchar(20) NOT NULL,  
  •   PRIMARY KEY (`id`)  
  • ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  
  •   
  •   
  • 1.首先我们先做一个接口,现在先不管它,等下你就知道他有什么用啦  
  •   
  • package com.dongguoh;  
  •   
  • import java.sql.*;  
  • /* 
  •  * 用匿名类的方式去运用这个接口 
  •  */  
  • public interface IStatementCallback {  
  •     public Object doInStatement(Statement stmt) throws RuntimeException,SQLException;  
  •       
  • }  
  •   
  • 2.而这里是最关键的,就是建一个Jdbc的模板方法,把那些经常要做的try{} catch{}都写在一个类里  
  •     免得以后每次都还去写。这就成啦代码复用.  
  •   
  • package com.dongguoh;  
  •   
  • import java.sql.*;  
  • /* 
  •  * 在这里我就不用Spring的注入啦,直接写个完整的 
  •  * 如果不会Spring的,也同样的像使用Spring中的JdbcTemplate类一样的使用. 
  •  * 如果你看过Spring的书,那么这个例子也是一个Spring的入门jdbc的好例子 
  •  *  
  •  * 而在这里我们的这个JdbcTemplate就成啦一个通用的方法,以后我们要SQL语句连接数据库的 
  •  * 时候不用每次都去写try{}catch{}啦,老那样写真的很烦,一次性就把它搞定啦 
  •  */  
  • public class JdbcTemplate {  
  •       
  •   
  •     public Object execute(IStatementCallback action) {  
  •         Connection conn = null;  
  •         Statement stmt = null;  
  •         Object result = null;         
  •         try {  
  •             conn=this.getConnection();  
  •             conn.setAutoCommit(false);            
  •             stmt=conn.createStatement();  
  •               
  •             //注意这一句  
  •             result=action.doInStatement(stmt);  
  •               
  •             conn.commit();  
  •             conn.setAutoCommit(true);             
  •         } catch (SQLException e) {  
  •             transactionRollback(conn);//进行事务回滚  
  •             e.printStackTrace();  
  •             throw new RuntimeException(e);  
  •         }finally{  
  •             this.closeStatement(stmt);  
  •             this.closeConnection(conn);  
  •         }  
  •   
  •         return result;  
  •     }  
  •       
  •     /* 
  •      * 当发生异常时进行事务回滚 
  •      */  
  •     private void transactionRollback(Connection conn){  
  •         if(conn!=null){  
  •             try {  
  •                 conn.rollback();  
  •             } catch (SQLException e) {  
  •                 // TODO Auto-generated catch block  
  •                 e.printStackTrace();  
  •             }  
  •         }  
  •           
  •     }  
  •     //关闭打开的Statement  
  •     private void closeStatement(Statement stmt){  
  •         if(stmt!=null){  
  •             try {  
  •                 stmt.close();  
  •                 stmt=null;  
  •             } catch (SQLException e) {  
  •                 e.printStackTrace();  
  •             }  
  •         }  
  •     }  
  •     //关闭打开的Connection   
  •     private void closeConnection(Connection conn){  
  •         if(conn!=null){  
  •             try {  
  •                 conn.close();  
  •                 conn=null;  
  •             } catch (SQLException e) {  
  •                 e.printStackTrace();  
  •             }  
  •         }  
  •     }  
  •   
  •     //取得一个Connction  
  •     private Connection getConnection() {          
  •         String driver = "com.mysql.jdbc.Driver";  
  •         String url = "jdbc:mysql://127.0.0.1/Hibernate";          
  •         Connection conn=null;  
  •         try {  
  •             Class.forName(driver);  
  •             conn = DriverManager.getConnection(url, "root""dongguoh");  
  •         } catch (ClassNotFoundException e) {  
  •             e.printStackTrace();  
  •         } catch (SQLException e) {  
  •             e.printStackTrace();  
  •         }  
  •         return conn;  
  •     }  
  •   
  • }  
  •   
  • 下面是我们的测试方法:  
  • package com.dongguoh;  
  •   
  • import java.sql.*;  
  •   
  • import junit.framework.TestCase;  
  •   
  • public class TestTemplate extends TestCase {  
  •   
  •     public void testJdbcTemplate(){  
  •         JdbcTemplate jt=new JdbcTemplate();  
  •         /* 
  •          * 因为IStatementCallback是一个接口,所以我们在这里直接用一个匿名类来实现 
  •          * 如果已经正确的插入啦一条数据的话 ,它会正确的返回一个 整数 1  
  •          * 而我们这里的stmt是从JdbcTemplate中传过来的 
  •          */  
  •         int count=(Integer)jt.execute(new IStatementCallback(){  
  •             public Object doInStatement(Statement stmt) throws RuntimeException, SQLException {  
  •   
  •                 String sql="INSERT INTO person VALUES(1,'dongguoh','123456')";  
  •                 int result=stmt.executeUpdate(sql);  
  •                 return new Integer(result);  
  •             }             
  •         });       
  •         System.out.println("Count: "+count);  
  •           
  •         /* 
  •          * 在这里我们就把刚刚插入的数据取出一个数据,直接输出来 
  •          *  
  •          */  
  •         jt.execute(new IStatementCallback(){  
  •             public Object doInStatement(Statement stmt) throws RuntimeException, SQLException {  
  •   
  •                 String sql="SELECT name,password FROM person WHERE id=1";  
  •                 ResultSet rs=null;  
  •                 rs=stmt.executeQuery(sql);  
  •                 if(rs.next()){  
  •                     System.out.println(rs.getString("name"));  
  •                     System.out.println(rs.getString("password"));  
  •                 }  
  •                 /* 
  •                  * 在这里就直接返回一个1啦,如果你愿意的话,你可以再写一个Person类 
  •                  * 在if语句中实例化它,赋值再把它返回 
  •                  */  
  •                 return new Integer(1);  
  •             }             
  •         });       
  •     }  
  • }  
  •   
  • 测试结果:  
  • Count: 1  
  • dongguoh  
  • 123456  
  •   
  • 如果你要用 PreparedStatement 的话,想传参数的话,再写一个接口来实现,再在JdbcTemplate重载一个方法  
  •     如public Object execute(IPreparedStatementCallback action,,Object[] objArray)再多传一个你要传递的参数数组, 
  • 分享到:
    评论

    相关推荐

      SpringBoot中封装jdbc工具类

      现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...

      java封装jdbc的操作代码

      封装jdbc即是把对数据库的连接操作封装在一个类中, 外部使用无需在重新建立连接,只需写出要执行的sql语句,就可执行。 也无需关闭,所有的都封装在一个类中。

      封装jdbc,采用Map方式快速增删改数据库例子

      封装jdbc,用Map实现快速的数据库增删改例子,具体可以参考util包下的BaseDao

      spring封装jdbc查询

      spring封装jdbc查询这是一个完整的范例!!!

      java反射封装jdbc全部方法

      Java反射封装jdbc方法,查询,修改,添加,删除,查询全部,为一个方法,SQL语句自己拼接,可常用,下载可终身受益

      jdbc完全封装实现增删改查

      实现完全的对jdbc对象的封装,只需调用则可对数据库进行CRUD操作

      J2EE预览:使用XML封装JDBC语句设计

      通过XML保存JDBC相关配置(参考) 作者:13部王曦同学在学习J2EE的XML开发的小项目。 说明:做得越多,收获越多。 博文链接:https://java1573.iteye.com/blog/124704

      jdbc封装(实现对实体的增删改查[分页]).zip

      jdbc封装(实现对实体的增删改查[分页]),辅助学习Hibernate 包含三个文件夹,分别是: code-access实现 是用access实现的,本意是access方便,就一个文件,方便部署。但access有好多不支持,就写成这样.主要是可参考Dao...

      轻量级封装jdbc 实现增删改查

      轻量级jdbc 封装类,适用于不使用mybatis hibernate等轻量级场合, 无需太多配置。

      游戏服务器 数据库连接池 jdbc 简单封装

      游戏服务器 数据库连接池 jdbc 简单封装

      泛型封装JDBC

      看到很多人不知道使用泛型,所有我利用方法泛型以及类泛型,封装了几个JDBC链接Oracle的方法,可以适用增删改查任意表以及任意返回值和任意个数查询条件。可以自己改成mysql或其他数据库

      封装的jdbc的jar包

      这个jdbc的jar包里面有四个类以及一个DataSource.properties配置文件。该文件中放的是四大参数。如果你下载了这个jar包,那么在你使用的时候,你需要自己创建一个DataSource.properties文件,你需要把这个DataSource...

      自己封装的JDBC

      NULL 博文链接:https://wa491o.iteye.com/blog/1149987

      jdbc封装类

      jdbc的封装类,便于在开发时候方便,实现了数据库的加载,连接,增、删、查、改。

      反射封装jdbc

      很好,很强大,用一次,想一次,很好,很强大,用一次,想一次;下载一点不后悔

      关于Java Web的Servlet+JDBC(封装)+JSP的登录(送给入门的你)

      关于Java Web的Servlet+JDBC(封装)+JSP的登录(送给入门的你)

      JDBC封装的工具类

      JDBC封装的工具类,将所有共同的代码提取过来,形成工具类

      Oracle jdbc 单例 工具类

      Oracle jdbc 单例 工具类 以及Oracle jar包 需要的话可以自己改成其他数据库

    Global site tag (gtag.js) - Google Analytics