javaoracle:谈谈在ORACLE下开发JAVA程序的问题来源: 发布时间:星期六, 2008年12月27日 浏览:2次 评论:0
="t18">
问题:如保加载JDBC驱动: 正常我们加载驱动有 3个途径: 1)Class.forName(String)这想当于Loader个String指定类在装载时把该驱动静态内容都化其实这时驱动类了DriverManager.registerDriver(driver);思路方法 2)使用系统属性:.getProperty.load( FileInputStream("属性文件")); 在属性文件中指定jdbc.driver=drivername 这样好处是可以同时加载多个JDBC换数据库时不用访问Java源代码只是修改属性文件 3)直接registerDriver(driver)这种思路方法最可靠可以在任何环境下使用 1)思路方法简单但MSJVM不能正确化比如使用IE时在APPLET中就不能使用应该用3)思路方法但3)思路方法在灵活性方面不如2)可以根据环境综合考虑 问题 2:大对象存储 般来说大对象存储是把文件存到数据库中当然也可以内存中超大串对于象图片这样文件当然是用 2进制存储这里有很多误区网络上教程99%都是行不通连SUN自己文档都直虽然很小按说 2进制文件应该存为BLOB类型但JBDC2并不能直接对BLOB存入 2进制文件假如你这样做会得到个IO而不是SQL异常为此花了我近两个小时才弄清楚 假如要把个 2制文件存入Oracle用标准JDBC你就要用LONG ROW类型: create table tb_file(name varchar(20),detail long row); 然后 File file = File("aaa.g"); fileLength =() file.length; InputStream fin = FileInputStream(file); PreparedStatement pstmt = con.prepareStatement("insert o tb_file values(´aaa.g´,?)"); pstmt.BinaryStream (1, fin, fileLength); pstmt.executeUpdate; 假如你定要用BLOB存储你就必须用ORACLE自己思路方法: create table tb_file(name varchar(20),detail BLOB); con.AutoCommit(false); stmt.executeUpdate("insert o tb_file values(´aaa.g´,empty_blob)"); 下面必须SELECT得到BLOB对象再向里写: rs = stmt.executeQuery("select detail from tb_file where name=´aaa.g´ for upfdate" ); (rs.next) { Blob blob = rs.getBlob(1); BinaryOutputStream out = ((oracle.sql.BLOB)blob).getBinaryOutputStream; b = [((oracle.sql.BLOB)blob).getBufferSize]; InputStream fin = FileInputStream(file); 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; 问题 3:可滚动结果集 ORACLE 明确介绍说明不支持结果集滚动那么我们用JDBC2得到个可滚动结果集就是同JDBC自己支持就是说结果集要在内在中高度缓存Cache很多很多开发者都地认为是数据库支持只是他们没有真正查询大量行假如真查询大量行话肯定是死定了!!!!!!对于超大量行数据情愿返回到它笨思路方法也不要使用可滚动结果集 0
相关文章
读者评论
发表评论 |