问题一:如何加载JDBC驱动:通常我们有三种加载驱动的方式:1)Class.forName(String)这个相当于classLoader中一个String指定的类,加载时初始化驱动的静态内容。实际上,驱动类此时调用了DriverManager.registerDriver(driver)方法。2)使用系统属性:System.getProperty().load(newFileInputStream("propertyfile"));在属性文件中指定jdbc.driver=drivername。这样做的好处是可以同时加载多个JDBC,更改数据库JAVA源码时无需访问,只需修改properties文件即可。3)直接registerDriver(驱动)这种方式最靠谱,任何环境都可以使用。1)方法简单,但无法正确初始化MS的JVM。比如在使用IE的时候,不能在APPLET中使用,应该使用3)的方法。但是3)方法不如2)灵活,可以根据环境综合考虑。问题2:大对象存储一般来说,大对象存储就是在数据库中存储文件,当然也可以是内存中非常大的字符串。对于图片之类的文件,当然是以二进制存储的。这里有很多误解。网上99%的教程都不行。连SUN自己的文档也总是有错,虽然错误很小。据说二进制文件应该存储为BLOB类型,但是JBDC2不能直接将BLOB存储为二进制文件。如果这样做,您将得到一个IO而不是SQL异常。我花了将近两个小时才弄明白。如果要在ORACLE中存储二进制文件,则需要使用标准JDBC的LONGROW类型:createtabletb_file(namevarchar(20),detaillongrow);然后Filefile=newFile("aaa.gif"); int文件长度=(int)file.length(); InputStreamfin=newFileInputStream(文件); 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.gif'forupfdate"); if(rs.next()){Blobblob=rs.getBlob(1); BinaryOutputStreamout= ((oracle.sql.BLOB)blob).getBinaryOutputStream(); byte[]b=newbyte[((oracle.sql.BLOB)blob).getBufferSize]; InputStreamfin=newFileInputStream(文件); intlen=0;while((len=fin.read(b))!=-1)out.write(b,0,len); fin.close();关闭();提交();}同样,您不能读取像LONGROWInputStreamin=rs.getBinaryInputStream("detail");这样的数据。但是Blobblob=rs.getBlob("detail");in=blob.getBinaryStream();问题3:可滚动结果集ORACLE明确表示不支持结果集的滚动,所以我们使用JDBC得到一个JDBC本身支持的可滚动结果集,也就是说结果集高度缓存在内存中,许多开发人员错误地认为它是数据库支持的。只是他们并没有真正查询大量的行,如果他们确实查询了大量的行,他们肯定做不到!对于行数较多的数据,与其使用可滚动的结果集,不如还其笨办法。【编辑推荐】Oracle数据库文件恢复与备份思路数据库管理使用存储过程的5大好处Oracle数据库管理脚本解析
