前言:

如果你对hibernate不是那样的推崇,但感觉jdbc的sqlr操作又不是那么OO的话,那么这篇文章可能给能带来或多或少的期望…

在很长的一段时间里,中总感觉应该对sql的操作来实现一种集成化,这种想法可能是来源于hibernate操作的思维吧,当时头脑中有一些想法:

1, 最大程度的让编程者对数据库操作实现面向对象操作,(所有的一些基本操作,程序员可以不用去记住表的字段名,完全对象化,如插值,删值,像hibernate一样查出对多和对一的结果,把结果也对象化,一些不能实现的保留sql操作,)

2, 最大程度让sql语句重用,提高数据库的效率(利用程序对一些操作sql的集成,保证相同操作sql的一致性)

3, 操作要简单,容易与项目集成,通用(约束少)

对于当时,头脑中只是有这些朦胧的定义,而对于要实现何种方法,怎样把对对象操作来实现sql的拼接(这里就是一个反的过程),心里没底,但能够实现(只是功能的强弱问题)这一点很清楚,其实当时总是考虑实现后是否有其价值,是否对编程者有所帮助,这个是我一直没有抽时间做的主要原因。

正题:

通过这几天的一些空余时间,算完成了这个东西,不管它是否有用,只当是自己一次练习,现在把一些实现及调用的方法作个简介:

此工具自动生成两种文件vo与dao,

值对象(VO),每一个表对应一个vo,

vo与普通的javabean方法相同,有get和set方法,若表A的主键作为表B的外键,那么此vo有get B表的一个list(to-many),如果表A中引用了B 表的主键作为外键,那么它有get B 表的一个vo,(to-one)

数据访问对象(DAO),此文件对编程者是透明的,可以不作了解,主要是一些访问数据的方法,由公用接口调用。

首先在你的程序中调用接口的实现

DataStore ds  =     com.piliskys.dataStore.DataManager.getInstance();

首先申明此句并未得到数据库的联接,而是当操作时才得到数据库联接的,而且在同一次会话中,此联接是相同的,具体可看ConnectionUtil此类,此类可以对数务进行设置,

在此接口中,没有定义提高和回滚操作,因为这些操作都可定义在开发框架中,正常结束就提交,捕获异常就回滚,

这两操作可直接调ConnectionUtil.currentConnection("piliskys")的操作,

那么我们开始介绍它的各个方法,在此为一个tb_person表为例:

tb_person(per_name varchar2,per_age number), per_name 为主键

1,  public  boolean delete(Object obj)

删除单个vo,需要设置主键,

程序:删一个叫 小李 的记录

DataStore ds  = com.piliskys.dataStore.DataManager.getInstance();//这里是没有跟数据库

ds.delete(new TbPerson("小李"));//有主键的表都有此构造方法

ConnectionUtil.currentConnection("piliskys").commit;

----------------------------------------------

就这么简单,以下调用DataStore 和提交略

2,  public  int deleteByVO(Object obj)//返回删除的记录数

注:如果未对obj设置任何条件将不会进行删除操作(因为个人认为这一般是不可能的,比较危险,所以加以控制)

程序:删除姓  李 的记录

TbPerson tp =new TbPerson();

tp.setPerName("李%");

ds.deleteByVO(tp);

----------------------------------------------

程序:删除年龄大于等于 19岁的记录

TbPerson tp =new TbPerson();

tp.setPerAge(new Long(19),">=");//所有双参数方法都是为一些条件选择而用,后面一参数是用来设操作符的 > < >= <= !=,这些,方便吧

ds.deleteByVO(tp);

----------------------------------------------

程序:删除年龄为空的记录

TbPerson tp =new TbPerson();

tp.setPerAge(null);

ds.deleteByVO(tp);

----------------------------------------------

3  public  int update(Object obj)

此操作必须对主键进行设置,否则报错,设置其它字段属于为更新字段,其它字段未设置也会报错,说明没有可更新的字段,

程序 略

4  public  int update(Object src,Object tar)//两对象必须同类(代表同一表)

此操作 以前一对象做为条件进行批量更新后一对象设置的值,条件如是字符串可设置带%,条件对象也可加操作符,使用所有双参数设置都相同,其它可设置null,对''字符串不处理

程序 略

5  public  boolean insert(Object obj)//未进行设置的字段为null

程序 插入一个叫 刘德华 年龄为38的记录

TbPerson tp =new TbPerson();

pt.setPerName("刘德华");

pt.setPerAge(new Long(38));//age为Long型的话

ds.insert(pt);

----------------------------------------------

程序 插入一个叫 罗拿多 的,年龄未知

TbPerson tp =new TbPerson();

pt.setPerName("罗拿多");

ds.insert(pt);

----------------------------------------------

6   public  List selectAll(Class class1)

返回所有记录(但此处为考虑程序的效率,设置了一个最大数,可参看原文件中定义的MAX_SIZE可进行更改,

程序 查出所有tb_person表的记录

List list = ds.selectAll(TbPerson.class);//也简单吧

-----------------------------------------------

7   public  void selectByPK(Object obj)

根据主键查找记录 ,这个是无返回值的,返回的就是本身的这个obj,为了省点内存,不用多new一个对象,而且实现的话主键已经设好,只要设其它字段,而且个人认为这样更好用,如果一个表无主键,那么查出来的就是数据库的第一条记录,利用 rownum=1实现,而不是查出的第一条,最大程度地提高数据库的效率,

程序  查出名叫 刘德华的记录

TbPerson tp =new TbPerson("刘德华");

ds.selectByPK(tp);

然后 这个tp就是一个与数据库主键为刘德华的记录,可以用它了

-------------------------------------------------

8  public  List selectByVO(Object obj)

此方法跟上面的deleteByVO的使用基本相同,返回值是vo的一个系列,

有一点不同的是,deleteByVO不设置任何查询条件将不会做操作,而此方法不设置任何条件的话就会查出所有的(个人认为查询是无危害性的,要查就查吧)

程序 参考 deleteByVO

9  public  List selectByVO(Object obj, int i, int j)

此方法是上一方法的扩充,主要是用于分页操作,

程序 查姓 刘 的第11条记录到20条

ds.selectByVO(new TbPerson("刘%"),11,20);//呵呵,感觉这样有点别扭

本应该 TbPerson tp =new TbPerson();

tp.setPerName("刘%");

ds.selectByVO(tp,11,20);//效果一样,

--------------------------------------------------

10  public  int sqlExcute(String s, List list)

这个是用于直接调 sql语句的操作,主要是执行一些更新,删除操作, list就是按条件顺序设置的参数集,PreparedStatement的操作

程序 略

11  public List selectBySQL(String s, List list)

这个是用于直接调 sql语句的操作,执行查询操作, list就是按条件顺序设置的参数集,PreparedStatement的操作

return  List 含map的list,key为字段全部小写

程序 略

12  public  List selectByQuery(String s, List list)

这个是用于直接调 sql语句的操作,执行查询操作, list就是按条件顺序设置的参数集,PreparedStatement的操作

return  List 含map的list,key为字段全部小写

程序 略

13  public  List selectByQuery(String s, List list,int i,int j)

同上,但主要是为了分页操作,

throws DAOException;

public   void close()throws SQLException;

数据库联接关闭

关于事物提义及回滚请使用ConnectionUtil.currentConnection("piliskys")的操作。

此程序支持在控制台显示sql语句,可以在配制文件中设置是否显示,具体操作参看包中的说明。

========================================================================

当然个人的能力是有限的,如果你认为还应该实现什么功能,程序哪方面不如人意,本人只是按照自己的观点,站在一个编程者的角度考虑问题,不足之处可能很多,希望多提见意和建议,程序只是经本人进行测试,可能不是很全面,希望共同完善。

关于如何部署于程序,包中有说明。

注意事项:不支持复合主键作为其它表的外键,下次改进吧。

最后:请尊重他人成果,谢谢您的支持,本人邮箱piliskys@itpub.net希望得到你的意见和建议。

========================================================================

此处下载原程序http://www.blogjava.net/Files/piliskys/jdbcutil.rar

oracle可以面向对象吗,Jbdc助手-数据库操作面向对象的实现(oracle)相关推荐

  1. Oracle之 dmp导入/导出、数据库操作等过程中的字符集问题

    Oracle之 dmp导入/导出.数据库操作等过程中的字符集问题 开篇:因为要定位一个 关于dmp文件导入的乱码问题, 于是乎我开始了漫长了 Oracle字符集搜索之路,网上关于讲解oracle字符集 ...

  2. 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入

     1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...

  3. oracle 一个实例创建多个数据库_创建多个Oracle数据库及相应的实例

    转 http://blog.csdn.net/luiseradl/article/details/6972217 对于使用过SQL Server数据库的用户可以会对Oracle中的数据库的实例的概念理 ...

  4. c语言转换字符编码为zhs16gbk,GitHub - veis-lzf/freecplus: freecplus开源框架,包含了数据库操作、socket、ftp服务器等。...

    一.freecplus框架介绍 freecplus框架是UNIX平台下C/C++程序开发的业务层基础框架,由C语言技术网组织开发.维护.其目的是为C/C++程序员供免费的.开源的程序库.freecpl ...

  5. oracle的操作大全,Oracle数据库操作大全(六)Oracle中操作数据

    Java连接数据库方法2,(方法1见:Oracle数据库操作大全(五)) 使用jdbc连接Oracle( 可远程连接 ) ***1.加载驱动 Class.forName("oracle.jd ...

  6. 在linux操作系统中启动oracle数据库程序,Linux系统下Oracle数据库的安装和启动关闭操作教程...

    这篇文章主要介绍了Linux系统下Oracle数据库的安装和启动关闭操作教程,并针对在sqlplus下所需执行的命令进行讲解,需要的朋友可以参考下 1.准备: df -H 查看空间剩余   一般准备最 ...

  7. 一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE

    这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...

  8. mysql数据迁移到sqlserver_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...

    这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...

  9. oracle数据库内核,深入内核:Oracle数据库里SELECT操作Hang解析

    崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 编辑手记:感谢崔华授权我们独家转载其精品文章,也欢迎大家向"Oracle"社区投稿. 我们 ...

最新文章

  1. 如何破解汽车-快速的速成课程
  2. Transformer变体为何无法应用于多种任务?谷歌:这些架构更改不能有效迁移
  3. 历史上最伟大的 12 位程序员
  4. Nginx安装手册(摘自入云龙老师教案,亲测可用)
  5. 跨模块中的分配内存问题
  6. ES6学习笔记(三)—— Set 和 Map
  7. 『初识C语言』语法入门详解
  8. php中如何使用html代码
  9. 浏览器播放rtsp流媒体解决方案
  10. python method_用实例分析Python中method的参数传递过程
  11. 怎么查看域名被墙_怎么查看域名是否被墙检测(教你一招域名被墙解决办法)...
  12. Linux电脑睡眠后黑屏打不开,电脑睡眠后黑屏打不开怎么解决
  13. OpenFPGA 环境配置及问题解决
  14. 微信聊天记录丢失后的记录
  15. Spring报错:Exception encountered during context initialization - cancelling refresh attempt: org.sprin
  16. 编写测试用例方法----因果图判定表
  17. 计算机网络名词解释www万维网,网络名词解释
  18. 关于今年执行的减肥计划
  19. 如何手动下载pip安装包?
  20. 元器件 失效分析 过程介绍

热门文章

  1. Shell特殊变量含义
  2. PAT (Advanced Level) 1014. Waiting in Line (30)
  3. 一款由css3和jquery实现的响应式设计导航
  4. Linux ALSA声卡驱动之八:ASoC架构中的Platform
  5. [转载]实现Application Tile 更新
  6. matlab7.1(ERROR STARTING DESKTOP)解决
  7. Exchange 2003 在多域环境中的部署
  8. https协议必须使用443端口吗_http、https、http2、websocket之间的关系
  9. 非计算机专业的人要如何学python?
  10. Python系列教程之学生信息管理系统