关于在ORACLE下开发JAVA的几个问题

转载 2004年07月10日 17:26:00

关于在ORACLE下开发JAVA的几个问题

 
作者:超级菜鸟  [2002-05-27] 返 回 | 关 闭
 
 


    我本来不再想写一些类似教程的文章,因为既然叫教程就要能历经历史的考验,而对于我这种菜鸟级的程序设计者来说仅喜欢随心所欲地交流一些自己的经验。可以不成方法,无关条理地想到哪说到哪。但是有些问题我又不能不出来说明白,因为目前网上的很多“教程”都在把初学者引向错误,有些是作者个人理解的错误,有些作者自己从来没有做过开发却能写出一篇软件开发的文章。他们只会做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(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 明确说明不支持结果集滚动,那么我们用JDBC2得到一个可滚动的结果集就是同JDBC自己支持的,就是说结果集要在内在中高度缓存,很多很多的开发者都错误地认为是数据库支持的。只是他们没有真正查询大量行,如果真的查询大量行的话肯定是死定了!!!!!!对于超大量行的数据,情愿返回到它的笨方法也不要使用可滚动结果集。

 

汇总oracle的几个问题及解决方案

ora-12514的错误的原因有很多。但无外乎这几种: 1)、 ORA-12541: TNS: 没有监听器   显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确。启动监...
  • rong_wz
  • rong_wz
  • 2013年04月09日 15:51
  • 529

2018 最具就业前景的 7 大编程语言,Java、Python 和 JavaScript 前三无悬念?

点击上方“程序员大咖”,选择“置顶公众号”关键时刻,第一时间送达!2018 年即将到来,Coding Dojo近期发布了 2018 最具就业前景的 7 大编程语言。该公司分析了来自 Indeed 的 ...
  • Px01Ih8
  • Px01Ih8
  • 2017年12月20日 00:00
  • 159

Java大牛养成记(11)----Oracle安装教程

背景:在DRP中用到了Oracle数据库,那么安装Oracle数据库就成了首要的事情,寻找软件,查询安装教程,最后终于搞定。安装的过程中遇到了很多问题,一边查询,一边安装,既学习了安装教程,又积累了解...
  • u013043341
  • u013043341
  • 2016年06月18日 11:44
  • 950

关于Java的几个问题

由于本人java学的b 1、&和&&的区别:
  • codemelody
  • codemelody
  • 2014年11月07日 22:24
  • 271

关于Oracle的几个问题及解决方案

本文转载自: Oracle启动服务报错 Windows无法启动OracleOraDb10g_home1TNSListener服务,错误1067 SQL/PLUS登录 本部分转载自:Oracle启...
  • gongxifacai_believe
  • gongxifacai_believe
  • 2016年05月27日 00:07
  • 370

java几个问题

对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。...
  • a236209186
  • a236209186
  • 2016年06月15日 11:42
  • 105

oracle 数据库开发面试题

最近参加了4、5场面试,总结一下竞聘oracle 开发岗位最长问到哪些问题: 1、delete 与 truncate 区别? 1)truncate 是DDL语句,delete 是DML语句; 2)...
  • IndexMan
  • IndexMan
  • 2014年05月15日 20:41
  • 14211

Widget开发心得及几个问题

在Launcher中增加一个widget,需要以下几个步骤:
  • galaxysailor
  • galaxysailor
  • 2014年08月26日 11:10
  • 159

怎么实现用java远程访问oracle数据库?

1、新建JAVA项目时在库中添加“%oracle_home%jdbc.lib.classes.zip”也可在Eclipse->项目->属性->Java构建路径->库添加“%oracle_home%jd...
  • vs_the_old_boy
  • vs_the_old_boy
  • 2016年08月30日 10:40
  • 1503

oracle报表开发方案

多点新闻 2017-01-11 17:52 PL/SQL也是一门语言,后台开发经常会用到。 目前做要到一个功能,关于“报表任务调度”,说明白了就是做几张报表,每天统计一次新数据,用于在PC页面...
  • u011277123
  • u011277123
  • 2017年01月12日 08:44
  • 324
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于在ORACLE下开发JAVA的几个问题
举报原因:
原因补充:

(最多只允许输入30个字)