Java+Oracle应用开发的几个常见问题解答

  问题一:如保加载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自己支持的,就是说结果集要在内存中高度缓存,很多很多的开发者都错误地认为是数据库支持的。只是他们没有真正查询大量行,假如真的查询大量行的话肯定是死定了!!!!!!对于超大量行的数据,情愿返回到它的笨方法也不要使用可滚动结果集。

时间: 2024-09-20 15:51:40

Java+Oracle应用开发的几个常见问题解答的相关文章

Java+Oracle应用开发的几个问题

问题一:如保加载JDBC驱动程序: 正常我们加载驱动程序有三个途径: 1)Class.forName(String)这想当于classLoader一个String指定的类,在装载时把该驱动程序的静态内容都初始化,其实这时驱动程序类调用了DriverManager.registerDriver(driver)方法 2)使用系统属性:System.getProperty().load(new FileInputStream("属性文件")); 在属性文件中指定jdbc.driver=dri

java servlet结合Oracle搭建java的web开发环境_java

最近公司领导告诉接下去接的一个产品,可能会涉及到oracle数据库,以前用得最多的是mssql,前些时间学了下mysql也算少许用过.oracle没接触过.应为我之前做过.net开发,所以数据访问接口这块,涉及到的ashx wcf webserver这些,学了下servlet感觉 这些技术比较像 ashx编写的接口. 一. 首先在电脑上安装了 oracle数据库, 安装ORACLE数据库按常理说,直接下载安装就行了,但是中途是遇到了问题的,原因就是我的系统是Win7 64 oracle的clie

Java Web十条开发实用小知识_java

 1.${ctx}与 ${pageContext.request.contextPath}这两个为一个意思,都是获取当前根目录. 不同的是${ctx}为${pageContext.request.contextPath}的简写版,经查证之后果真如此,发现在项目的一个文件内有这样一段话 的配置 复制代码 代码如下: <c:setvar="ctx"value="${pageContext.request.contextPath}"/> 注意在使用${ctx的

tomcat启动报错-SSH + Oracle 整合开发 启动服务报错,运行查询操作,没影响

问题描述 SSH + Oracle 整合开发 启动服务报错,运行查询操作,没影响 信息: Initializing Spring root WebApplicationContextlog4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).log4j:WARN Please initialize the log4j system properly.2013-1

《Java和Android开发实战详解》——1.1节编程语言基础知识

1.1编程语言基础知识 Java和Android开发实战详解 "编程语言"(Programming Language)是人类告诉计算机如何工作的一款语言,如同人与人之间沟通使用自然语言,编程语言被设计用于人类与计算机之间进行沟通.从技术角度来说,编程语言就是一款将执行指令传达给计算机的标准通信技术. 1.1.1 程序.软件与应用程序 在说明编程语言之前,我们需要了解什么是程序.软件与应用程序.简单地说来,编程语言提供了语法,可以让我们编写程序代码来建立程序,程序经编译建立成应用程序后,

java微信企业号开发之开发模式的开启_java

首先说微信企业号的开发模式分为:编辑模式(普通模式)和开发模式(回调模式) ,在编辑模式下,只能做简单的自定义菜单和自动回复消息,要想实现其他功能还得开启开发者模式. 一.编辑模式和开发模式对消息的处理流程  1.编辑模式下,所有的业务流程都配置在微信服务器上,由它处理   2.开发模式,消息通过第三方服务器处理,最后经过微信服务器把消息发送给用户   开发模式能处理的消息比编辑模式多,所以要先开启开发模式才能开发更多功能. 二.开发模式的开启      在回调模式下,企业不仅可以主动调用企业号

《Java和Android开发学习指南(第2版)》—— 第1章 Java基础 1.1 下载和安装Java

第1章 Java基础 要使用Java编程,需要Java SE开发工具包(Java SE Development Kit,JDK).因此,本章的第1节将介绍如何下载和安装JDK.开发Java程序,涉及编写代码,将其编译为字节码,以及运行字节码.在Java程序员的职业生涯中,这是一个一次又一次重复的过程,并且,它对于你适应这个职业至关重要.因此,本章的主要目标是让你体验用Java进行软件开发的过程. 编写的代码不仅要能够工作,还要容易阅读又便于维护,这一点很重要,因此本章将向你介绍Java编码惯例.

《Java和Android开发实战详解》——1.2节Java基础知识

1.2 Java基础知识 Java和Android开发实战详解 Java语言类似于C++是一种编译型语言,不过两者并不完全相同,严格说来,Java是结合编译和解释优点的一种编程语言. 1.2.1 Java平台 "平台"(Platform)是一种结合硬件和软件的执行环境.Java既是一种高级的面向对象的编程语言,也是一个平台.Java平台是一种纯软件平台,它可以在各种基于硬件的平台上运行,与硬件无关,主要是由JVM和Java API两个部分组成. 1.JVM虚拟机 JVM(Java Vi

《Java和Android开发实战详解》——1.3节Java语言的开发环境

1.3 Java语言的开发环境 Java和Android开发实战详解 编程语言的"开发环境"(Development Environment)指的是一组工具程序,可用来创建.编译和维护编程语言所构建的应用程序.一般来说,我们可以使用两种Java开发环境来创建Java应用程序. 1.终端机模式的开发环境 或称为"命令行模式",对于传统MS-DOS或UNIX.Linux系统的用户,程序执行时的输入数据和输出数据都是使用"命令行界面"(Command-