
JDBC
文章平均质量分 55
axman
有寂寞陪着,我就不会寂寞。
展开
-
JDBC中鲜为人知的"中级应用"
在没有进入JDBC的高级应用前,我先来介绍一下一些"鲜为人知"的中级应用,说它是中级应用,因为对JDBC有所了解的人都应该知道,说它"鲜为人知",我却没有在任何人的代码中或我所见过的任何讲JDBC的书中有提到过,非常奇怪,这本来是JDBC规范啊. select * from table where datetimecol 可是在另的数据库呢? select * from tab原创 2006-07-07 08:14:00 · 2376 阅读 · 3 评论 -
JDBC基础(一)
本来不想写这部份入门级的内容,但既然栏目定为JDBC专栏,还是简单写一些吧.JDBC基础(一) 来,我们认识一下! JDBC,JAVA平台的DATABASE的连通性.白话一句,什么意思啊? 就是JAVA平台上和数据原创 2006-07-07 07:56:00 · 2515 阅读 · 0 评论 -
JDBC基础(二)
因为是基础篇,所以还是对每一步骤简单说明一下吧: 前面说是,注册驱动程序有多方法,Class.forName();是一种显式地加载.当一个驱动程序类被Classloader装载后,在溶解的过程中,DriverManager会注册这个驱动类的实例.这个调用是自动发生的,也就是说DriverManager.registerDriver()方法被自动调用了,当然我们也可以直接调用DriverMan原创 2006-07-07 07:59:00 · 2128 阅读 · 2 评论 -
JDBC基础(四)
作为基础知识的最后部分,我们来说一说结果集的处理,当然是说对一般结果集的处理.至于存储过程返回的多结果集,我们仍然放在高级应用中介绍. SQL语句如何执行的是查询操作,那就要返回一个ResultSet对象,要想把查询结果最后明白地显示给用户,必须对ResultSet进行处理.ResultSet返回的是一个表中符合条件的记录,对ResultSet的处理要逐行处理,而对于每一行的列的处理原创 2006-07-07 08:05:00 · 2229 阅读 · 0 评论 -
JDBC初级应用实例(一)
JDBC初级应用实例(一) 在了解JDBC基础知识以后,我们先来写一个数据库操作的类(Bean)以后我们会在这个类的基础上,随着介绍的深入不断提供优化的方案. 要把一个数据库操作独立到一个类(Bean)中,至少要考虑以下几个方面: 1.对于不同层次的应用,应该有不同的得到连结的方法,如果得到连结的方法要随着应用层次的不同而改变,我们就应该把他独立成一个专门的类中,而把在任何应用原创 2006-07-07 08:09:00 · 2514 阅读 · 5 评论 -
DataSource高级应用
在前面的介绍中,我们可以看出, DataSource才能提供最高性能的对数据库的并发访问,但是,对DataSource的引用,也还有很多知识要弄清楚,获取Connection的方式是数据库性能最相关的技术,而对DataSource的调用对数据库性能起着很大的决定作用。 一般对于DataSource的引用是通过以下流程来进行: Context ct = new I原创 2006-07-07 08:23:00 · 3059 阅读 · 3 评论 -
JDBC分布式事务
在没有开始JDBC分布式事务前,先来回顾一下J2EE平台的数据源的整体构加:在上面的介绍中,可能大家会过于限入理解如何实现ConnectionPoolDataSource和PooledConnection,而忘记了它的整体结构.为了帮助大家更快地理解,我从以下几点进行总结.声明:本文完全是作者根据SUN的文档从实践中总结,没有参考(事实上目前我还没有找到这方面的参考)任何文章:1. Data原创 2006-07-07 08:57:00 · 3998 阅读 · 2 评论 -
Oracle合并多行为多列
oracle 如何聚合多行函数在BEA论坛上看一位"专家"写的大作,一条SQL语句是select r.xm, substr(r.csrq,1,4)||年||substr(r.csrq,5,2)||月||substr(r.csrq,7,2)||日 csrq, (select dictvalue from zh_dictvalue where dictcode=xb and di原创 2008-07-10 15:39:00 · 5980 阅读 · 1 评论 -
Java中连结MySQL启用预编译的先决条件是useServerPstmts=true.
在Java编程中,应用代码绝大多数使用了PreparedStatement,无论你是直接使用JDBC还是使用框架。 在Java编程中,绝大多数使用了使用了PreparedStatement连接MySQL的应用代码没有启用预编译,无论你是直接使用JDBC还是使用框架。 在我所能见到的项目中,几乎没有见过启用MySQL预编译功能的。网上更有文章说MySQL不支持预编译,实在是害人不浅。原创 2011-10-28 10:47:31 · 15714 阅读 · 9 评论 -
druid发布0.2.1版,增加sql统计的merge功能。
1.增加sql统计的merge功能。 当配置druid.filters.mergeStat=com.alibaba.druid.filter.stat.MergeStatFilter属性时,可以自动把: SELECT * FROM t FROM id = 1; SELECT * FROM t FROM id = 2; 参数化为 select原创 2012-04-17 15:51:49 · 6379 阅读 · 0 评论 -
ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?
这个问题我在几年前说过,但今天再次从CSDN上看到有人问这个问题,可以看出,真正懂这个问题的人1%都不到。我再次把这个问题写在这里,希望光临我的BLOG的人能真正了解它。我们先来做一个例子,在例子中我用的是mysql-essential-5.1.30-win32版。来跟我做以下几个命令:mysql> create database axman;mysql> use axman;mysql> cre原创 2009-03-12 14:39:00 · 14166 阅读 · 17 评论 -
oracle的PreparedStatement.executeBatch为什么返回-2
PreparedStatement.executeBatch的方法在底层调用了一个void的executeForRows的方法来执行,他们很懒,为了复用这个方法,于是就失去了返回值,也就无法知道当前执行的语句到底返回了什么。但是jdbc2.0规范规定,如果执行成功但无法知道结果,则返回-2.所以oracle的PreparedStatement.executeBatch把每条语句的返回设为-2.一般原创 2013-05-20 17:26:38 · 6129 阅读 · 0 评论 -
10年以后还看到这样的代码
while(rs.next()){ count++; String ip = rs.getString("ip"); int port = rs.getInt("port"); String type = rs.getString("type");原创 2014-01-10 15:29:23 · 2333 阅读 · 6 评论 -
Spring 调用ORACLE存储过程的结果集
oracle 对于高级特性总是与众不同(我极力讨厌这一点,如果使用它的产品就要对这种产品进行特定的编程,这也是我从不看好weblogic之类的平台的原因),大对象存取一要定用它自己的LOB对象,所幸我还能通过LONG RAW来代替.以便能使程序不需要特定的编码.但对于存储过程(我是说返回结果集的存储过程),我还没有什么方法能用一个通用的程序来处理ORACLE.太多的教材或文章在讲存储过程的调用只是原创 2004-11-24 11:56:00 · 2431 阅读 · 0 评论 -
JPA中关系印射注意事项
一对一不用多说.一对多: 一A对多B.单向: (tb_a,tb_b) 代码省略必须的但和主题的内容如@Entity等标记,Setter,Getter等 class A{ private int id; ………………..其它字段 @OneToMany(cascade = CascadeType.ALL)原创 2008-07-09 10:56:00 · 1830 阅读 · 1 评论 -
JDBC高级应用一
关于数据库连结我们所说有JDBC高级应用,并不是说它的技术含量很高(也许JAVA平台上不存在什么"技术含量"的说法,因为JAVA是给大家用的而不是给某些人用的).说它是高级应用,是因为它是对于JDBC基础应用来说的扩展,也就是可以优化你的应用性能,或方便于应用的实现.所以说它是一种高级应用而不叫高级技术. JDBC中,java.sql包是基础的,也是核心的功能,javax.sql包则是高级的原创 2006-07-07 08:16:00 · 2614 阅读 · 1 评论 -
关于多结果集的存储过程的处理
对于一个存诸过程,如果返回的结果是我们预先知道的,那么可以根据存储过程定义的顺序来进行处理(事实上一般不会这样),但对于复杂的多结果集的处理,如何定义一个通用的流程?我们先看一下JDBC本身能为我们提供什么?一个存储过程执行后返回的是boolean型:boolean flag = callableStatement.execute();如果flag为true,那么说明返回了一个结果集(Result原创 2006-07-07 08:22:00 · 2863 阅读 · 1 评论 -
JDBC初级应用实例(二)
JDBC初级应用实例(二)[动态访问数据库] 上面有一位朋友问了,如果在已经连结的情况下,知道当前连结的库的表的情况呢?其实只你已经连结了,你就能知道这个库中所以情况而不仅仅上表的情况: 有时(我到目前只见到过一次),我们对一种新的数据库根本不知道它的结构或者是其中的内容,好坏么我们如何来获取数据库的情况呢? 真实的例子是这样的,我的朋友的公司接到了一个单子,对方使用的数据库是叫原创 2006-07-07 08:11:00 · 2095 阅读 · 0 评论 -
为什么要尽量使用PreparedStatement代替Statement?
在JDBC应用中,如果你已经是稍有水平开发者,你就应该尽量以PreparedStatement代替Statement.也就是说,在绝大多数时候都不要使用Statement.基于以下的原因:一.代码的可读性和可维护性.虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次:stmt.e原创 2006-07-07 08:39:00 · 5615 阅读 · 1 评论 -
mysql,sqlserver,oracle三种数据库的大对象存取
mysql 大对象存取:类型一般应该用mediumblod,blob只能存2的16次方个byte,mediumblod是24次方,一般来说够用了.longblob是32次方有些大.MYSQL默认配置只能存1M大小的文件,要修改配置,原创 2006-07-07 08:41:00 · 3118 阅读 · 1 评论 -
Best scheme of oracle multiPage
select /*+first_rows*/ * from test tinner join ( select rid from (select rownum num,rowid rid from test) where num >= start and num ) t1on t.rowid = t1.rid这个语句比原创 2006-07-07 08:42:00 · 1730 阅读 · 0 评论 -
ibatis3.0存储过存的一些细节。
1.因为支持注释和代码方式生成mapper,所以原来的 parameterMap反对使用,也就是不建议用parameter的顺序支对应"?" 方式的参数。 因为mapper的数据是一个纯xml的,而xml的元素如果没有标记为序列是没有顺序的,所以用 这样的顺序关系对应procedure(?,?)的参数是不可靠的。所以3.0直接使用#{p1},#{p2,otherAttribute.原创 2010-03-05 14:39:00 · 4306 阅读 · 4 评论 -
一个oracle从子节点向父节点查询的问题
今天部门内一个人问我,在oracle中如何从子节点记录向父节点上溯.比如有一个表:guid parentguid1 02 13 14 25 26 57 58 7我们从GUID为1根据parentguid关系可以查出该GUID下的所有子节点.现在要从某一子节点如GUID为7,查出它的父节点, 7->原创 2005-11-22 15:31:00 · 6547 阅读 · 0 评论 -
JDBC基础(三)
关于Statement对象: 前面说过,Statement对象是用来绑定要执行的操作的,在它上面有三种执行方法:即用来执行查询操作的executeQuery(),用来执行更新操作的executeUpdate()和用来执行动态的未知的操作的execute(). JDBC在编译时并不对要执行的SQL语句检测,只是把它看着一个String,只有在驱动程序执行SQL语句时才知道正确与否.原创 2006-07-07 08:03:00 · 2305 阅读 · 1 评论 -
JDBC高级应用二
JDBC高级应用(二)本来想继续谈JDBC的高级连结方式,事务模式.但发现关于大对象存储有很多人在问,所以先来插入一节关于大对象存储的内容,然后再接着原来的思路写下去.JDBC的大对象存储听起来复杂,其实如果你明白了原理以后,就非常简单,网上有关这方面的教材很少,而SUN的文档中,我从1.2开始看到一在仍然是错误的,不知道写文档的人长脑子没有,就那几行代码你试试不就知道了,这么多次重抄下来还是错误原创 2006-07-07 08:18:00 · 2716 阅读 · 3 评论 -
Spring 调用ORACLE存储过程的结果
Spring 调用ORACLE存储过程的结果oracle 对于高级特性总是与众不同(我极度力讨厌这一点,如果使用它的产品就要对这种产品进行特定的编程,这也是我从不看好weblogic之类的平台的原因),大对象存取一点要用它自己的LOB对象,所幸我还能通过LONG RAW来代替.以便能使程序不需要特定的编码.但对于存储过程(我是说返回结果集的存储过程),我还没有什么方法能用一个通用的程序来处理ORA原创 2006-07-07 08:26:00 · 4642 阅读 · 2 评论 -
常见的几个数据库insert into操作的主键返回值
这几天做管理工具,有一个操作很令人头痛. 当插入一条记录时,我们很多时候都想马当前插入的主键返回出来.作为另一个操作的条件.如果主键是自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事.可能对于一些特殊的数据库必须把in原创 2006-07-07 08:27:00 · 12436 阅读 · 1 评论 -
oracle一个该死的BUG,后来查它的文档说叫限制.
我KAO,这种限制还不叫BUG?如果你 PreparedStatement ps = conn.prepareStatement("select * from tb_test", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE原创 2006-07-07 08:45:00 · 2489 阅读 · 1 评论 -
ibatis[mybatis]的安全加固
对于mapping框架,其实预编译语句已经解决了绝大多数的sql注入。但是对mapping如果支持动态语句,就和程序拚接一样存在sql注入的可能。所以在ibatis[mybatis]中,安全加固主要针对 $ 符号拚接的动态语句select * from userinfo where name = {#name} oder by $orderColumn$ $sortMode$这是一种非常典型的场原创 2015-07-14 11:00:38 · 4519 阅读 · 0 评论