问题一:如保加载jdbc驱动程序:
正常我们加载驱动程序有三个途径:
1)class.forname(string)这想当于classloader一个string指定的类,在装载时把该驱动程序的静态内容都初始化,其实这时驱动程序类调用了drivermanager.registerdriver(driver)方法
2)使用系统属性:system.getproperty().load(new fileinputstream("属性文件"));
在属性文件中指定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你就要用long row类型:
create table tb_file(name varchar(20),detail long row);
然后
file file = new file("aaa.gif");
int filelength =(int) file.length();
inputstream fin = new fileinputstream(file);
preparedstatement pstmt = con.preparestatement("insert into tb_file values('aaa.gif',?)");
pstmt.setbinarystream (1, fin, filelength);
pstmt.executeupdate();
如果你一定要用blob存储,你就必须用oracle自己的方法:
create table tb_file(name varchar(20),detail blob);
con.setautocommit(false);
stmt.executeupdate("insert into tb_file values('aaa.gif',empty_blob())");
下面必须select得到blob的对象再向里写:
rs = stmt.executequery("select detail from tb_file where name='aaa.gif' for upfdate" );
if(rs.next())
{
blob blob = rs.getblob(1);
binaryoutputstream out = ((oracle.sql.blob)blob).getbinaryoutputstream();
byte[] b = new byte[((oracle.sql.blob)blob).getbuffersize];
inputstream fin = new fileinputstream(file);
int len = 0;
while( (len = fin.read(b)) != -1)
out.write(b,0,len);
fin.close();
out.close();
con.commit();
}
同样读取数据你并不能象long row那样
inputstream in = rs.getbinaryinputstream("detail");
而要
blob blob = rs.getblob("detail");
in = blob.getbinarystream();
问题三:可滚动结果集
oracle 明确说明不支持结果集滚动,那么我们用jdbc得到一个可滚动的结果集就是同jdbc自己支持的,就是说结果集要在内存中高度缓存,很多很多的开发者都错误地认为是数据库支持的。只是他们没有真正查询大量行,如果真的查询大量行的话肯定是死定了!!!!!!对于超大量行的数据,情愿返回到它的笨方法也不要使用可滚动结果集。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器