`
BestUpon
  • 浏览: 291450 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

JDBC CRUD操作的粗略封装DEMO

    博客分类:
  • J2EE
阅读更多

 

暮然回首,看看jDBC的操作,原来很多的东西都忘记了,数据库的的语句也忘得差不多了,还的捡起来以前的东西,自己粗糙的写了一个封装JDBC的CURD的方法,回顾回顾以前的东西。

类名:BasedDaoSupport。主要功能为Dao提供一次分装的接口。

注:有几个类是工具类,获得JDBC的链接和独缺配置文件的。

package cn.edu.lzcc.orderdishes.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import cn.edu.lzcc.orderdishes.exception.ObejectIdException;
/**
 * 
 * Project: orderdishes
 * Package: cn.edu.lzcc.orderdishes.utils
 * @author  bestupon
 * Email:   bestupon@foxmail.com
 * DateTime:Oct 15, 2009 2:06:59 AM
 * JDBC的数据封装类
 * 实现了增删改查的基本操作。
 */

public class BaseDaoSupport {
	private boolean result=false;
	Connection conn = DataBaseConnection.getConnection();
	Statement stmt = DataBaseConnection.createStatement(conn);
	ResultSet rs = null;
	/**
	 * 插入增加的方法
	 * @param entityTable 要操作的表的名称
	 * @param propertys 操作的表的属性名称
	 * @param params 增加的值
	 * @return 成功与否
	 * @throws SQLException
	 */
	public  boolean  addObject(String entityTable,String []propertys,Object[]params) throws SQLException {
		StringBuffer insertSql =new StringBuffer("");
		if(null !=entityTable &&!entityTable.equals("")) {
			insertSql.append("INSERT INTO  ");
		}else {
			return result;
		}
		if(null !=propertys && propertys.length >=1) {
			insertSql.append(entityTable.toLowerCase());
			insertSql.append("  (");
			 for(int i= 0 ; i<propertys.length;i++) {
				 insertSql.append(propertys[i]);
				 insertSql.append(",");
				 if(propertys[i].trim().toLowerCase().equals(entityTable.toLowerCase()+"id") && propertys[i]!=null) {
					 ObejectIdException oie =  new ObejectIdException("增加方法中的ObjectId的值必须是‘null’值causeby:(主键不能有重复值)");
					 throw oie;
				 }
			 }
			 insertSql = new StringBuffer(insertSql.substring(0, insertSql.length()-1));
			 insertSql.append(" )");
		}
		if(null !=params) {
			insertSql.append(" VALUES (");
			 for(int i= 0 ; i<propertys.length;i++) {
				 if(params[i] != null) {
					 insertSql.append("'").append(params[i]).append("',");
				 }else {
					 insertSql.append(params[i]).append(",");
				 }
			 }
			 insertSql = new StringBuffer(insertSql.substring(0, insertSql.length()-1));
			 insertSql.append(" ) ;");
		}
		System.out.println(insertSql.toString());
		result =DataBaseConnection.executeUpdate(conn, insertSql.toString())>0 ? true :false;
		return result;
	}
	/**
	 * 删除操作
	 * @param entityTable
	 * @param objectId
	 * @return
	 * @throws SQLException
	 */
	public  boolean  delObject(String entityTable,String sqlWhere) throws SQLException {
		StringBuffer deleteSql = new StringBuffer(""); 
		deleteSql.append("DELETE FROM  ");
		deleteSql.append(entityTable.toLowerCase());
		if(null != sqlWhere && !sqlWhere.equals("") &&sqlWhere.length()>1) {
			if(sqlWhere.trim().split(" ")[0].toLowerCase().equals("where")){
				deleteSql.append(sqlWhere);
			}else {
				deleteSql.append(" WHERE " ).append(sqlWhere);
			}
		}
		System.out.println(deleteSql.toString());
		result =DataBaseConnection.executeUpdate(conn, deleteSql.toString())>0 ? true :false;
		return result;
	}
	/**
	 * 更新修改的方法
	 * @param entityTable 实体表名称
	 * @param propertys 更新的字段名称
	 * @param params 更新的值
	 * @param sqlWhere 条件语句
	 * @return 返回成功与否
	 * @throws SQLException
	 */
	public  boolean  modifyObject(String entityTable,String []propertys,Object[]params,String sqlWhere) throws SQLException {
		StringBuffer updateSql =new StringBuffer("");
		if(null !=entityTable &&!entityTable.equals("")) {
			updateSql.append("UPDATE ").append(entityTable.toLowerCase());
		}else {
			return result;
		}
		if(null !=propertys ) {
			if(null !=params) {
				if(propertys.length == params.length) {
					for(int i= 0 ; i<propertys.length;i++) {
						updateSql.append("  SET ");
						updateSql.append(propertys[i]).append("=").append("'").append(params[i]).append("',");
						 if(propertys[i].trim().toLowerCase().equals(entityTable.toLowerCase()+"id")) {
							 ObejectIdException oie =  new ObejectIdException("修改方法中的ObjectId的值不能被更新causeBy(主键唯一性)");
							 throw oie;
						 }
					}
					
					updateSql = new StringBuffer(updateSql.substring(0, updateSql.length()-1));
					
					if(null != sqlWhere && !sqlWhere.equals("") &&sqlWhere.length()>1) {
						if(sqlWhere.trim().split(" ")[0].toLowerCase().equals("where")){
							updateSql.append(sqlWhere);
						}else {
							updateSql.append(" WHERE " ).append(sqlWhere);
						}
					}
				}else{
					return result;
				}
			}
		}
		result =DataBaseConnection.executeUpdate(conn, updateSql.toString())>0 ? true :false;
		System.out.println(updateSql.toString());
		return result;
	}
	
	/**
	 * 查询方法
	 * @param entityTable 要操作的表的名称
	 * @param propertys 表中所还有的属性,字段的名称,也就是主要关心的字段的名称
	 * @param sqlWhere 是附加的查询条件,可以含有where 关键字,也可以不含有where关键字均可
	 * @return 查到的ResultSet结果集
	 * @throws SQLException
	 */
	public  ResultSet  queryObject(String entityTable,Object []propertys,String sqlWhere) throws SQLException {
		StringBuffer querySql = new StringBuffer("");
		if(null !=entityTable &&!entityTable.equals("") &&(null == propertys ||propertys.length<1)) {
			querySql.append("SELECT * FROM ").append(entityTable.toLowerCase());
		}else if(null !=entityTable &&!entityTable.equals("") &&(null != propertys ||propertys.length>=1)) {
			if(null !=propertys && propertys.length >=1) {
				querySql.append("SELECT  ");
				 for(int i= 0 ; i<propertys.length;i++) {
					 querySql.append(propertys[i]).append(",");
				 }
				 querySql = new StringBuffer(querySql.substring(0, querySql.length()-1));
			}
			querySql.append(" FROM ").append(entityTable.toLowerCase());
		}
		if(null != sqlWhere && !sqlWhere.equals("") &&sqlWhere.length()>1) {
			if(sqlWhere.trim().split(" ")[0].toLowerCase().equals("where")){
				querySql.append(sqlWhere);
			}else {
				querySql.append(" WHERE " ).append(sqlWhere);
			}
		}
		System.out.println(querySql);
		rs = DataBaseConnection.executeQuery(stmt, querySql.toString());
		return rs ;
	}
}

 

定义一个Dao接口。如下

package cn.edu.lzcc.orderdishes.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

public interface FareMenuDao {
	/**
	 * 增加
	 * @return
	 */
	public boolean addFareMenu(String entityTable,String []propertys,Object[]params) throws SQLException ;
	/**
	 * 修改
	 * @param fareMenuId
	 * @return
	 */
	public boolean modifyFareMenu(String entityTable,String []propertys,Object[]params,String sqlWhere) throws SQLException ;
	/**
	 * 删除
	 * @param fareMenuId
	 * @return
	 */
	public boolean delFareMenu(String entityTable,String sqlWhere) throws SQLException ;
	/**
	 * 
	 * @return
	 */
	public ResultSet queryFareMenu(String entityTable, String []propertys, String sqlWhere) throws SQLException;
}

 

一个Dao的实现如此简单。

package cn.edu.lzcc.orderdishes.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;

import cn.edu.lzcc.orderdishes.dao.FareMenuDao;
import cn.edu.lzcc.orderdishes.utils.BaseDaoSupport;

public class FareMenuImpl extends BaseDaoSupport implements FareMenuDao {

	public boolean addFareMenu(String entityTable,String []propertys,
			Object[] params) throws SQLException {
		return super.addObject(entityTable, propertys, params);
	}

	public boolean delFareMenu(String entityTable, String sqlWhere) throws SQLException {
		return super.delObject(entityTable, sqlWhere);
	}

	public boolean modifyFareMenu(String entityTable, String []propertys,
			Object[] params,String sqlWhere) throws SQLException {
		return super.modifyObject(entityTable, propertys, params,sqlWhere);
	}

	public ResultSet queryFareMenu(String entityTable, String []propertys, String sqlWhere) throws SQLException {
		return super.queryObject(entityTable, propertys, sqlWhere);
	}
}

 

 

附件:能直接运行的源码文件,含有测试文件

5
0
分享到:
评论
9 楼 xsjleilei 2013-05-23  
基本没有啥用,可以作为入门示例。
8 楼 BestUpon 2010-07-11  
shouzhang1_2 写道
写的可以 请问 楼主 在DataBaseConnection类中,executeQuery方法的conn在哪里释放的?

写的严格一点的话,应该每一次操作都要有关闭操作,这个程序和了好久了,也写的很粗糙,估计你没有看见关闭方法的话,就加一个final{close(...)};
7 楼 shouzhang1_2 2010-07-10  
写的可以 请问 楼主 在DataBaseConnection类中,executeQuery方法的conn在哪里释放的?
6 楼 shouzhang1_2 2010-07-06  
写的确实不错,
5 楼 BestUpon 2009-10-16  
回复:4 楼 corejava5
编程最重要的规范,没有一个良好的约定,名称都是乱起的,后来谁也不认识谁了!对于主键我采用的是自动递增形式的,名称采用的是“类名称Id“的形式。这样方便后面的数据库中的操作,要不都叫id,谁能区别是谁的id呢?每个人有自己不同的风格,你的风格不能强加到我的头上吧!所以不要妄自的评论”汗“!
4 楼 corejava5 2009-10-16  
你这个貌似对主键字段名或者主键名有限制吧,还有,不能给主键赋值,汗…………
3 楼 BestUpon 2009-10-16  
勘误:在修改方法中出现一个书写错误,今天才发现的,应该将  updateSql.append("  SET ");   ,这句代码放到for循环的外面,源代码中也有错,希望有下载参考的朋友更正下!
2 楼 BestUpon 2009-10-16  
回复"1 楼 greatghoul“问题:
关闭这些问题都封装在了DataBaseConnection这个工具类中了。每一个方法使用的完成时候都会去关闭statement等。详细信息参见DataBaseConnection工具类。
1 楼 greatghoul 2009-10-16  
这个倒是有点意思.不过这里有没有提供关闭你在里面用到的 Connection, Statement, ResultSet的方法.这样是个问题.

相关推荐

    Struts2-Crud+JdbcDemo最简单的Struts2+jdbc学习曾删改查程序

    这个"Struts2-Crud+JdbcDemo"项目是一个基础的学习示例,涵盖了如何使用Struts2和JDBC进行基本的CRUD(创建、读取、更新和删除)操作。 首先,我们来详细了解一下Struts2的核心概念: 1. **Action类**:在Struts2...

    jdbc的crud代码

    **JDBC CRUD 操作详解** 在Java编程中,JDBC(Java Database Connectivity)是用于连接数据库的标准接口,它允许开发者通过编写Java代码来执行SQL语句,实现对数据库的增删改查(CRUD)操作。本文将详细介绍如何...

    02-SqlHelper对CRUD操作的封装

    在.NET开发中,SqlHelper是经常被用于数据库操作的一个实用工具类,它为CRUD(创建、读取、更新和删除)操作提供了便利的封装。本篇将详细讲解SqlHelper如何实现对数据库的基本操作,并探讨其核心原理和使用场景。 ...

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

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

    jdbc操作Mysql数据库demo

    它允许Java应用程序连接并执行SQL语句,实现数据的CRUD(Create、Read、Update、Delete)操作。本教程将以MySQL数据库为例,介绍如何使用JDBC进行数据库操作。 首先,我们需要理解JDBC的基本步骤: 1. **加载驱动*...

    jdbc资料(数据库crud操作)

    Apache的DBUtils是一个简单的数据库工具库,它封装了JDBC的一些繁琐操作,如处理结果集、异常处理等,使代码更加简洁、易读。主要特性有: 1. QueryRunner:提供了方便的SQL执行方法,如query()和update(),支持预...

    JDBC数据操作封装

    本篇文章将详细讲解如何利用JDBC进行数据操作封装,包括增删查改(CRUD)的基本操作,以及如何对多条数据进行事务处理,并将结果返回到对象集合和List中。 首先,我们需要理解JDBC的基本步骤: 1. **加载驱动**:...

    传智播客JDBC_完成对数据库的CRUD操作.rar

    本教程“传智播客JDBC_完成对数据库的CRUD操作”主要涵盖了如何利用JDBC进行数据库的基本操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据。 一、创建(Create) 创建数据通常涉及到...

    jdbc完全封装实现增删改查

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

    Hibernate与JDBC对于数据库CRUD操作性能示例

    Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源

    AA.rar_jdbc crud_jdbc多张表项目_structs1_项目管理

    标题中的"AA.rar_jdbc crud_jdbc多张表项目_structs1_项目管理"表明这是一个基于JDBC技术,使用Structs1框架开发的项目管理应用,涵盖了数据的增删改查(CRUD)操作,并且涉及到多张数据库表的交互。这个项目的主要...

    05实现mybatis简单crud功能demo

    05实现mybatis简单crud功能demo05实现mybatis简单crud功能demo05实现mybatis简单crud功能demo05实现mybatis简单crud功能demo05实现mybatis简单crud功能demo05实现mybatis简单crud功能demo05实现mybatis简单crud功能...

    Java对数据库CRUD DEMO

    压缩包中的"Jdbc-master"可能是一个完整的项目结构,包含了JDBC CRUD操作的源代码、测试用例以及可能的配置文件。通过阅读源代码,你可以学习如何组织这些操作,以及如何处理异常和优化性能。 通过理解这些概念和...

    struts2-crud.zip_DEMO_Java web CRUD demo_struts2 CRUD_struts2 de

    本DEMO主要展示了如何使用Struts2实现CRUD操作,即创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)数据的基本功能。下面我们将详细探讨Struts2框架以及如何在Java web应用中实现CRUD操作。 首先,了解...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用...

    crud-demo_easyui增删查改_zip_

    【标题】"crud-demo_easyui增删查改_zip_" 指的是一个使用EasyUI框架实现的CRUD(Create, Read, Update, Delete)操作演示项目,被压缩为ZIP格式的文件。CRUD是数据库操作的基本功能,代表创建、读取、更新和删除...

    Dubbo+Springboot远程服务CRUD操作demo

    Dubbo+Springboot远程服务CRUD操作demo,maven创建pom聚合工程将服务调用和服务提供分离(即服务消费者和服务提供者),zookeeper作为注册中心,dubbo实现服务的提供和调用。

    easyui-crud-demo

    "easyui-crud-demo" 是一个使用 jQuery EasyUI 实现的CRUD(创建、读取、更新、删除)操作的示例项目。这个项目涵盖了从数据获取、展示到用户交互的核心功能,下面我们将详细解析其关键知识点。 1. **jQuery EasyUI...

    java jdbc 连接数据库 crud操作

    本教程将深入探讨如何使用Java JDBC进行数据库的CRUD(创建、读取、更新和删除)操作。 首先,要进行JDBC连接,我们需要引入对应的数据库驱动。例如,如果我们使用的是MySQL数据库,需要在项目中添加MySQL的JDBC...

Global site tag (gtag.js) - Google Analytics