`
lianxiangbus
  • 浏览: 529687 次
文章分类
社区版块
存档分类
最新评论
文章列表
select/*+first_rows*/*fromtesttinnerjoin(selectridfrom(selectrownumnum,rowidridfromtest)wherenum>=startandnum<=end)t1ont.rowid=t1.rid这个语句比hibernete中那个三层嵌套的方便在于orderby可以让你自己控制.因为hibernete那个在第二层中为了取最后几条而先排倒序取最上面几条.然后再排倒序回头这样排序就非常复杂.
mysql大对象存取:类型一般应该用mediumblod,blob只能存2的16次方个byte,mediumblod是24次方,一般来说够用了.longblob是32次方有些大.MYSQL默认配置只能存1M大小的文件,要修改配置,WIN版本的在mysql.ini文件中修改max_allowed_packet,net_buffer_length等几个参数,或直接SETGLOBALvarName=value.linux版本可以在启动参数后加-max_allowed_packet=xxM等几个参数.MYSQL存大对象最好直接就setBinaryStream,又快又方便.而不要先插入空再造型成BL ...
在JDBC应用中,如果你已经是稍有水平开发者,你就应该尽量以PreparedStatement代替Statement.也就是说,在绝大多数时候都不要使用Statement.基于以下的原因:一.代码的可读性和可维护性.虽然用PreparedStatement来代替Statement会使代码多出几行, ...
JDBC高级应用三再谈JDBC连结为什么要反复谈JDBC连结,因为所以JDBC的性能,最主要的就是JDBC连结,而SQL语句的优化,和JAVA编程无关,你的一个查询语句的效率,是你对于SQL语法的使用技巧,这一方面你就可请教DBA,而不是来看我这种程序设 ...
这几天做管理工具,有一个操作很令人头痛.当插入一条记录时,我们很多时候都想马当前插入的主键返回出来.作为另一个操作的条件.如果主键是自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事.可能对于一些特殊的数据库必须把insertinto和selectmax(key)或什么序列当前值作为一个事务的原子来操作,但很多数据库(以及数据库操作环境)并不能为你提供事务并发控制.所以如果多人同时操作,那么selectmax(key)很可能就不是你刚才insert的那条记录.在JDBC3.0中,已经可以直接返回insert语句的主KEY和其它值,但目前只有mysql支持.oracl和sqlse ...
Spring调用ORACLE存储过程的结果oracle对于高级特性总是与众不同(我极度力讨厌这一点,如果使用它的产品就要对这种产品进行特定的编程,这也是我从不看好weblogic之类的平台的原因),大对象存取一点要用它自己的LOB对象,所幸我还能通过LONGRAW来代替.以便能使程序不需要特定的编码.但对于存储过程(我是说返回结果集的存储过程),我还没有什么方法能用一个通用的程序来处理ORACLE.太多的教材或文章在讲存储过程的调用只是不负责任地简单执行一些涵数或无结果返回的存储过程,使大多数读者根本不知道到底如何调用存储过程的结果集.而在Spring中,根本就没有真正完全地介绍对存储过程的结果 ...
在前面的介绍中,我们可以看出,DataSource才能提供最高性能的对数据库的并发访问,但是,对DataSource的引用,也还有很多知识要弄清楚,获取Connection的方式是数据库性能最相关的技术,而对DataSource的调用对数据库性能起着很大的决定作用。一般对于DataSource的引用是通过以下流程来进行:Contextct=newInitialContext();DataSourceds=(DataSource)ct.lookup(sourceUrl);就这么简单的两行,但其调用条件不同却可以产生性能上巨大的差别。因为一个取得Connect的封装类(Bean)要对DataSour ...
对于一个存诸过程,如果返回的结果是我们预先知道的,那么可以根据存储过程定义的顺序来进行处理(事实上一般不会这样),但对于复杂的多结果集的处理,如何定义一个通用的流程?我们先看一下JDBC本身能为我们提供什么?一个存储过程执行后返回的是boolean型:booleanflag=callableStatement.execute();如果flag为true,那么说明返回了一个结果集(ResultSet)类型,你可以用getResultSet()得到当前行所在的结果,而如果返回为flase,说明什么呢?如果你不进行处理,什么也不能说明,只能说明当前指针不是ResultSet,有可能是更新计数(upda ...
JDBC高级应用(二)本来想继续谈JDBC的高级连结方式,事务模式.但发现关于大对象存储有很多人在问,所以先来插入一节关于大对象存储的内容,然后再接着原来的思路写下去.JDBC的大对象存储听起来复杂,其实如果你明白了原理以后,就非常简单,网上有关这方面的教材很少,而SUN的文档中,我从1.2开始看到一在仍然是错误的,不知道写文档的人长脑子没有,就那几行代码你试试不就知道了,这么多次重抄下来还是错误的.大对象分类:一般来说,大对象分为:大的文本对象,比如一个很长的文本(请你要注意什么是文本文件,什么是二进制文件)文件,或者是你定义的一个长字符串,比如你定义了:Strings="我们要去吃 ...
关于数据库连结我们所说有JDBC高级应用,并不是说它的技术含量很高(也许JAVA平台上不存在什么"技术含量"的说法,因为JAVA是给大家用的而不是给某些人用的).说它是高级应用,是因为它是对于JDBC基础应用来说的扩展,也就是可以优化你的应用性能,或方便于应用的实现.所以说它是一种高级应用而不叫高级技术.JDBC中,java.sql包是基础的,也是核心的功能,javax.sql包则是高级的,扩展的功能.所以为了交流的方便,我们把它们区分为coreAPI和optionalAPI.但是仍然然有一些coreAPI中的功能,我把它归纳到高级应用中.象存储过程的调用,多结果集的处理,我 ...
在没有进入JDBC的高级应用前,我先来介绍一下一些"鲜为人知"的中级应用,说它是中级应用,因为对JDBC有所了解的人都应该知道,说它"鲜为人知",我却没有在任何人的代码中或我所见过的任何讲JDBC的书中有提到过,非常奇怪,这本来是JDBC规范啊.select*fromtablewheredatetimecol<now();这在mysql中可以正确运行.可是在另的数据库呢?select*fromtablewheredatatimecol<TO_DATE('yyyyMMMdd');这在oracle中可以,在mysql中可以吗?是什么让这些SQL语句 ...
JDBC初级应用实例(二)[动态访问数据库]上面有一位朋友问了,如果在已经连结的情况下,知道当前连结的库的表的情况呢?其实只你已经连结了,你就能知道这个库中所以情况而不仅仅上表的情况:有时(我到目前只见到过一次),我们对一种新的数据库根本不知道它的结构或者是其中的内容,好坏么我们如何来获取数据库的情况呢?真实的例子是这样的,我的朋友的公司接到了一个单子,对方使用的数据库是叫什么"titanium"的,说实话由于本人的孤陋寡闻,在此之前从来不知道还有这种数据库,更别说如何访问了,现在朋友要看里面有什么"东西",当然是一筹莫展.所以只好找我.接到电话后,我先问 ...
JDBC初级应用实例(一)在了解JDBC基础知识以后,我们先来写一个数据库操作的类(Bean)以后我们会在这个类的基础上,随着介绍的深入不断提供优化的方案.要把一个数据库操作独立到一个类(Bean)中,至少要考虑以下几个方面:1.对于不同 ...
作为基础知识的最后部分,我们来说一说结果集的处理,当然是说对一般结果集的处理.至于存储过程返回的多结果集,我们仍然放在高级应用中介绍.SQL语句如何执行的是查询操作,那就要返回一个ResultSet对象,要想把查询结果最后明白地显示给用户,必须对ResultSet进行处理.ResultSet返回的是一个表中符合条件的记录,对ResultSet的处理要逐行处理,而对于每一行的列的处理,则可以按任意顺序(注意,这只是JDBC规范的要求,有些JDBC实现时对于列的处理仍然要求用户按顺序处理,但这是极少数的).事实上,虽然你可以在处理列的时候可以按任意顺序,但如果你按从左到右的顺序则可以得到较高的性能. ...
关于Statement对象:前面说过,Statement对象是用来绑定要执行的操作的,在它上面有三种执行方法:即用来执行查询操作的executeQuery(),用来执行更新操作的executeUpdate()和用来执行动态的未知的操作的execute().JDBC在编译时并不对要执行的SQL语句检测,只是把它看着一个String,只有在驱动程序执行SQL语句时才知道正确与否.一个Statement对象默认同时只能有一个结果集在活动.这是宽容性的,就是说即使没有调用ResultSet的close()方法,只要打开第二个结果集就隐含着对上一个结果集的关闭.所以如果你想同时对多个结果集操作,就要创建多 ...
Global site tag (gtag.js) - Google Analytics