|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。oracle|成绩我原本不再想写一些相似教程的文章,由于既然叫教程就要能历履历史的磨练,而关于我这类菜鸟级的程序计划者来讲仅喜好为所欲为地交换一些本人的履历。能够不成办法,有关层次地想到哪说到哪。可是有些成绩我又不克不及不出来讲分明,由于今朝网上的良多“教程”都在把初学者引向毛病,有些是作者团体了解的毛病,有些作者本人历来没有做过开辟却能写出一篇软件开辟的文章。他们只会做TRANSLATE,COPY,CUT这些操纵,最复杂的例子就是sun的JDK开辟文档中到今朝为止先容年夜对象(文件)存储的办法都是毛病的,但是说经由N(N>100)次的重写都没有人改正,由于厥后的人都只是COPY了一下,基本没有真的往做,只是把原作者换成本人的名字罢了。
(尊敬声明:凡以AXMAN,超等菜鸟,诗剑墨客署名的文章除在CNJSP网站公布回绝任何网站转贴)
成绩一:如保加载JDBC驱动程序:
一般我们加载驱动程序有三个路子:
1)Class.forName(String)这想当于classLoader一个String指定的类,在装载时把该驱动程序的静态内容都初始化,实在这时候驱动程序类挪用了DriverManager.registerDriver(driver);办法
2)利用体系属性:System.getProperty().load(newFileInputStream("属性文件"));
在属性文件中指定jdbc.driver=drivername如许的优点是能够同时加载多个JDBC,换数据库时不必会见JAVA源代码,只是修正属性文件
3)间接registerDriver(driver)这类办法最牢靠,能够在任何情况下利用。
1)办法复杂,但MS的JVM不克不及准确初始化。好比利用IE时在APPLET中就不克不及利用,应当用3)的办法。但3)办法在天真性方面不如2),能够依据情况综合思索。
成绩二:年夜对象存储
一样平常来讲,年夜对象存储是把文件存到数据库中,固然也能够内存中的超年夜字符串。关于象图片如许的文件固然是用二进制存储,这里有良多误区,收集上的教程99%都是行欠亨的,连SUN本人的文档都一向毛病,固然毛病很小。按说二进制文件应当存为BLOB范例,但JBDC2其实不能间接对BLOB存进二进制文件,假如你如许做,会失掉一个IO而不是SQL非常,为此花了我近两个小时才弄分明。
假如要把一个二制文件存进ORACLE,用尺度的JDBC你就要用LONGROW范例:
createtabletb_file(namevarchar(20),detaillongrow);
然后
Filefile=newFile("aaa.gif");
intfileLength=(int)file.length();
InputStreamfin=newFileInputStream(file);
PreparedStatementpstmt=con.prepareStatement("insertintotb_filevalues(aaa.gif,?)");
pstmt.setBinaryStream(1,fin,fileLength);
pstmt.executeUpdate();
假如你必定要用BLOB存储,你就必需用ORACLE本人的办法:
createtabletb_file(namevarchar(20),detailBLOB);
con.setAutoCommit(false);
stmt.executeUpdate("insertintotb_filevalues(aaa.gif,empty_blob())");
上面必需SELECT失掉BLOB的对象再向里写:
rs=stmt.executeQuery("selectdetailfromtb_filewherename=aaa.gifforupfdate");
if(rs.next())
{
Blobblob=rs.getBlob(1);
BinaryOutputStreamout=((oracle.sql.BLOB)blob).getBinaryOutputStream();
byte[]b=newbyte[((oracle.sql.BLOB)blob).getBufferSize];
InputStreamfin=newFileInputStream(file);
intlen=0;
while((len=fin.read(b))!=-1)
out.write(b,0,len);
fin.close();
out.close();
con.commit();
}
一样读取数据你其实不能象LONGROW那样
InputStreamin=rs.getBinaryInputStream("detail");
而要
Blobblob=rs.getBlob("detail");
in=blob.getBinaryStream();
成绩三:可转动了局集
ORACLE明白申明不撑持了局集转动,那末我们用JDBC2失掉一个可转动的了局集就是同JDBC本人撑持的,就是说了局集要在内存中高度缓存,良多良多的开辟者都毛病地以为是数据库撑持的。只是他们没有真正查询大批行,假如真的查询大批行的话一定是逝世定了!!!!!!关于超大批行的数据,宁愿前往到它的笨办法也不要利用可转动了局集。
-------------------------------------
注:应作者请求,本文回绝任何网站转贴!
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 |
|