0734w-月下竹音

0734是来自家乡的声音

常用链接

统计

最新评论

2006年5月28日 #

ORACLE没有监听器错误

一、运行监听器
在CMD中输入以下内容.
C:\>lsnrctl
LSNRCTL for 32-bit Windows: Version 8.1.6.0.0 - Production on 14-3月 -2003 14:17
:51(c) Copyright 1998, 1999, Oracle Corporation. All rights reserved.

欢迎来到LSNRCTL,请键入"help"以获得信息。

LSNRCTL> status
连接至(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robust)(PORT=1521)))
TNS-01103: 地址的协议专用组件指定不正确
TNS-12541: TNS:无监听器
TNS-12560: TNS:协议适配器出现错误
TNS-00511: 无监听器
32-bit Windows Error: 61: Unknown error

LSNRCTL> start
启动tnslsnr:请稍候...

Failed to start service, error 3.
TNS-12536: TNS:可能会阻碍*作
TNS-12560: TNS:协议适配器出现错误
TNS-00506: *作可能阻塞
32-bit Windows Error: 997: Unknown error

二,解决方案


修改 listerner.ora(..\ora92\network\admin),文件,确保如下:
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = tiger)(PORT = 1521))
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = E:\oracle\ora92)
      (SID_NAME = ORCL)
    )
  )

最后回到CMD中启动
LSNRCTL> start

posted @ 2006-05-28 15:26 sparkwu 阅读(2960) | 评论 (3)编辑 收藏

2006年5月12日 #

HP-unix最基本操作

1. telnet 10.202.10.1   连接主机
2. pwd                  查看当前目录
3. ls                   查看当前文件
4. get filename.zip     从FTP中拷贝filename.zip到本地
5. mkdir  test2         建立test2目录
6. quit:               同bye,退出ftp会话。
7. mkdir                建立文件夹
8. rmdir dir-name:     删除目录。
9. put local-file[remote-file]:              将本地文件local-file传送至远程主机
10. cp /etc/passwd.txt   /etc/passwd.bak.txt   复制 (copy) 之指令
11. cdup                                       进入远程主机目录的父目录

posted @ 2006-05-12 10:45 sparkwu 阅读(295) | 评论 (0)编辑 收藏

2006年5月11日 #

hp-unix 操作命令!

操作命令
1-1.处理目录
pwd: 显示当前工作目录&&
cd directory_path: 更改目录&&
cd: 更改为主目录&&
mkdir directory_name: 创建目录&&
rmdir directory_name: 删除空目录&& 

1-2.处理文件
elm: 阅读邮件&&
ls: 列举当前目录下的文件和目录&&
ls -a: 列举所有文件或目录包括隐藏点文件&
lsf: 列举文件并用/ 标记目录名&
compress filename: 压缩文件
uncompress filename: 解压缩文件
vi file_name: 创建或编辑文件
more file_name: 显示文件内容 (按q 退出)
head file_name: 显示文件的前10 行
tail file_name: 显示文件的后10 行
cp file_name file_copy: 复制文件
mv old_file new_file: 将文件重命名为新文件名
cat file1 >> file2: 将file1 附加到file2 的结尾处
rm file: 删除file&
rm -rf dir_name: 删除目录dir_name 及其所有文件
spell file_name: 在文件中检查拼写

1-3.打印
lp file_name: 打印文件
lpstat -t: 确定打印机的状态
cancel request_id: 取消打印请求

1-4.查找和组织
find .-name 'x*': 在当前目录和子目录中查找以x 开头的文件
grep word *: 在当前目录下的所有文件中查找word 一词的所有匹配
sort listfile: 按字母顺序对listfile 进行排序
date: 显示日期和时间
alias: 列举所有命令的别名
man command_name: 查找HP-UX 命令信息
echo $PATH: 确定PATH 设置
echo $SHELL: 确定所用的shell 

1-5.安全操作
passwd: 创建或更改口令
ll file_name: 显示文件的权限
ll -d directory_name: 显示目录的权限
chmod class=permissions name: 更改文件或目录权限
chown user name: 更改文件或目录的所有权

1-6.系统操作
clear: 清除屏幕
set -o editor_name: 设置命令行编辑器
TERM=term_type: 设置终端类型(从/usr/lib/terminfo 中选择term_type)&
ps -ef: 列举当前进程状态和PID&
kill PID: 终止进程
passwd: 创建或更改口令
command < infile: 将输入从文件重定向到命令
command1 | command2: 使用管道连接两个进程

posted @ 2006-05-11 17:16 sparkwu 阅读(649) | 评论 (0)编辑 收藏

2006年4月6日 #

(转)Java + XML = JDOM

Java + XML = JDOM ! 
这就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML,你就会知道为什么 要有JDOM或者是JAXB。在今年(2002)的JavaOne会议上JDOM的主要创始人Jason Hunter有一篇精彩的演讲介绍了JDOM技 术,题目就是JDOM Makes XML Easy。 
获得并安装JDOM 
在http://jdom.org可以下载JDOM的最新 版本。以JDOM beta8的2进制版本为例。下载后解压缩,JDOM的jar文件就是build目录下的文件jdom.jar,将之加入类路径。另外 JDOM还需要lib目录下那些jar文件如xerces.jar,jaxp.jar的支持。如果在使用中出现以下错误: 
java.lang.NoSuchMethodError 
或 
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException 
你需要保证xerces.jar文件在CLASSPATH中位于其他XML类,如JAXP或Crimson之前,这些类文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM Level 2。于是导致了上面的错误。 

一个简单的例子 
JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的类,没有类工厂类的。

下面是实例用的XML文件:

<?xml version="1.0" encoding="GBK"?>
<书库>
<书>
<书名>Java编程入门</书名>
<作者>张三</作者>
<出版社>电子出版社</出版社>
<价格>35.0</价格>
<出版日期>2002-10-07</出版日期>
</书>
<书>
<书名>XML在Java中的应用</书名>
<作者>李四</作者>
<出版社>希望出版社</出版社>
<价格>92.0</价格>
<出版日期>2002-10-07</出版日期>
</书>
</书库>

下面是操作XML文件的Bean:
package xml;
/**
* XML的读写操作Bean
*/
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class XmlBean{
private String bookname,author,pub,price,pubdate;
public String getbookname() { return bookname;}
public String getauthor() { return author;}
public String getpub() { return pub;}
public String getprice() { return price;}
public String getpubdate() { return pubdate;}
public void setbookname(String bookname) { this.bookname =bookname ; }
public void setauthor(String author) { this.author =author; }
public void setpub(String pub) { this.pub =pub ; }
public void setprice(String price) { this.price =price ; }
public void setpubdate(String pubdate) { this.pubdate =pubdate ; }
public XmlBean(){}
/**
* 读取XML文件所有信息
*/
public Vector LoadXML(String path)throws Exception{
Vector xmlVector = null;
FileInputStream fi = null;
try{
fi = new FileInputStream(path);
xmlVector = new Vector();
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); //得到根元素
List books = root.getChildren(); //得到根元素所有子元素的集合
Element book =null;
XmlBean xml =null;
for(int i=0;i<books.size();i++){
xml = new XmlBean();
book = (Element)books.get(i ); //得到第一本书元素
xml.setbookname(book.getChild("书名").getText());
xml.setauthor(book.getChild("作者").getText());
xml.setpub(book.getChild("出版社").getText());
xml.setprice(book.getChild("价格").getText());
xml.setpubdate(book.getChild("出版日期").getText());
xmlVector.add(xml);
}
}
catch(Exception e){
System.err.println(e+"error");
}
finally{
try{
fi.close();
}
catch(Exception e){
e.printStackTrace();
}
}
return xmlVector;
}
/**
* 删除XML文件指定信息
*/
public static void DelXML(HttpServletRequest request)throws Exception{
FileInputStream fi = null;
FileOutputStream fo = null;
try{
String path=request.getParameter("path");
int xmlid=Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); //得到根元素
List books = root.getChildren(); //得到根元素所有子元素的集合
books.remove(xmlid);//删除指定位置的子元素
String indent = " ";
boolean newLines = true;
XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
fo=new FileOutputStream(path);
outp.output(doc,fo);
}
catch(Exception e){
System.err.println(e+"error");
}
finally{
try{
fi.close();
fo.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
/**
* 添加XML文件指定信息
*/
public static void AddXML(HttpServletRequest request)throws Exception{
FileInputStream fi = null;
FileOutputStream fo = null;
try{
String path=request.getParameter("path");
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); //得到根元素
List books = root.getChildren(); //得到根元素所有子元素的集合
String bookname=request.getParameter("bookname");
String author=request.getParameter("author");
String price=request.getParameter("price");
String pub=request.getParameter("pub");
String pubdate=request.getParameter("pubdate");
Text newtext;
Element newbook= new Element("书");
Element newname= new Element("书名");
newname.setText(bookname);
newbook.addContent(newname);
Element newauthor= new Element("作者");
newauthor.setText(author);
newbook.addContent(newauthor);
Element newpub= new Element("出版社");
newpub.setText(pub);
newbook.addContent(newpub);
Element newprice= new Element("价格");
newprice.setText(price);
newbook.addContent(newprice);
Element newdate= new Element("出版日期");
newdate.setText(pubdate);
newbook.addContent(newdate);
books.add(newbook);//增加子元素
String indent = " ";
boolean newLines = true;
XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
fo=new FileOutputStream(path);
outp.output(doc,fo);
}
catch(Exception e){
System.err.println(e+"error");
}
finally{
try{
fi.close();
fo.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
/**
* 修改XML文件指定信息
*/
public static void EditXML(HttpServletRequest request)throws Exception{
FileInputStream fi = null;
FileOutputStream fo = null;
try{
String path=request.getParameter("path");
int xmlid=Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); //得到根元素
List books = root.getChildren(); //得到根元素所有子元素的集合
Element book=(Element)books.get(xmlid);
String bookname=request.getParameter("bookname");
String author=request.getParameter("author");
String price=request.getParameter("price");
String pub=request.getParameter("pub");
String pubdate=request.getParameter("pubdate");
Text newtext;
Element newname= book.getChild("书名");
newname.setText(bookname);//修改书名为新的书名
Element newauthor= book.getChild("作者");
newauthor.setText(author);
Element newpub= book.getChild("出版社");
newpub.setText(pub);
Element newprice= book.getChild("价格");
newprice.setText(price);
Element newdate= book.getChild("出版日期");
newdate.setText(pubdate);
//books.set(xmlid,book);//修改子元素
String indent = " ";
boolean newLines = true;
XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
fo=new FileOutputStream(path);
outp.output(doc,fo);
}
catch(Exception e){
System.err.println(e+"error");
}
finally{
try{
fi.close();
fo.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
}

下面是操作的jsp文件:
<%@ page contentType="text/html;charset=GBK" %>
<%@ page language="java" import="java.util.*,xml.*"%>
<html>
<head>
<title>读取XML文件资料</title>
</head>
<body>
<h3 align="center">JDOM操作XML文件</h3>
<p align="center">读取XML文件中的所有资料</p>
<center>
<table border="1" cellpadding="0" cellspacing="1" style="border-collapse: collapse" width="80%" id="AutoNumber1">
<tr>
<td align="center" width="92">书名</td>
<td align="center" width="92">作者</td>
<td align="center" width="92">出版社</td>
<td align="center" width="92">价格</td>
<td align="center" width="92">出版日期</td>
<td align="center" width="94">操作</td>
</tr>
</table>
<%
String path = application.getRealPath("/test/xml/")+"testC.xml";
XmlBean xml=new XmlBean();
Vector xmlall=xml.LoadXML(path);
for(int i=0;i<xmlall.size();i++){
xml=(XmlBean)xmlall.elementAt(i );
/**out.println("书名:"+xml.getbookname()+"<br>");
out.println("作者:"+xml.getauthor()+"<br>");
out.println("出版社:"+xml.getpub()+"<br>");
out.println("价格:"+xml.getprice()+"<br>");
out.println("出版日期:"+xml.getpubdate()+"<br><br>");
*/
%>
<table border="1" cellpadding="0" cellspacing="1" style="border-collapse: collapse" width="80%" id="AutoNumber2">
<tr>
<td align="center" width="92"><%=xml.getbookname()%></td>
<td align="center" width="92"><%=xml.getauthor()%></td>
<td align="center" width="92"><%=xml.getpub()%></td>
<td align="center" width="92"><%=xml.getprice()%></td>
<td align="center" width="92"><%=xml.getpubdate()%></td>
< td align="center" width="94"><a href="xmlok.jsp?act=del&id=< %=i%>&path=<%=path%>">删除</a></td>
</tr>
</table>
<%}%>
</center>
<form method="POST" action="xmlok.jsp">
<p align="center">
<input type="radio" value="add" checked name="act">添加资料 <input type="radio" value="edit" name="act">编辑资料
序 号:<select size="1" name="id">
<%for(int i=0;i<xmlall.size();i++){%>
<option value="<%=i%>">第<%=i+1%>条</option>
<%}%>
</select><br>
书 名:<input type="text" name="bookname" size="20"><br>
作 者:<input type="text" name="author" size="20"><br>
出版社:<input type="text" name="pub" size="20"><br>
价 格:<input type="text" name="price" size="20"><br>
日 期:<input type="text" name="pubdate" size="20"></p>
<input type="hidden" name="path" value="<%=path%>">
< p align="center"><input type="submit" value="提交" name="B1">< input type="reset" value="重置" name="B2"></p>
</form>
</body>
</html>

下面是处理上一文件提交的jsp文件:
<%@ page contentType="text/html;charset=GBK" %>
<%@ page language="java" import="xml.*"%>
<%if(request.getParameter("act")!=null && request.getParameter("act").equals("add")){
XmlBean.AddXML(request);
out.println("<p align='center'><br><br>添加成功<br><br><a href=''>返回</a>");
}
else if(request.getParameter("act")!=null && request.getParameter("act").equals("del")){
XmlBean.DelXML(request);
out.println("<p align='center'><br><br>删除成功<br><br><a href=''>返回</a>");
}
else if(request.getParameter("act")!=null && request.getParameter("act").equals("edit")){
XmlBean.EditXML(request);
out.println("<p align='center'><br><br>修改成功<br><br><a href=''>返回</a>");
}
else{out.print("<p align='center'><br><br>非法操作<br><br><a href=''>返回</a>");}

posted @ 2006-04-06 18:19 sparkwu 阅读(495) | 评论 (0)编辑 收藏

(收藏)用JDOM处理XML文档

用JDOM处理XML文档


 用JDOM处理XML文档(转载)
关键词:Java、JDOM、XML、JAXB 

(一)JDOM的介绍以及与JAXB的比较 

Java + XML = JDOM ! 
这 就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML,你就会知道为什么要有JDOM或者是JAXB。在今年(2002)的 JavaOne会议上JDOM的主要创始人Jason Hunter有一篇精彩的演讲介绍了JDOM技术,题目就是 JDOM Makes XML Easy。 
在那篇文档里,JDOM被拿来与DOM比较,而我更愿意拿它同JAXB比较。因为JAXB和JDOM 都是为了在Java中提供比DOM和SAX更为方便的XML处理接口而开发的,并且通过完全不同的途径来解决这个问题。JDOM的处理方式是与DOM类似 的树操作。而JAXB通过DTD和绑定模式来生成访问XML文档的Java代码,将XML映射成了Java对象来操作。你可以根据项目的需要和个人喜好来 决定采用哪一个。 
JDOM与JAXB的比较,从本身的特点来看: 
1) JDOM比JAXB更容易上手。使用JAXB首先要会编写DTD,然后还要会编写绑定模式。JDOM没有这样的要求,如果你会Java和XML,甚至可以说光是看JDOM的javadoc文档就能够使用JDOM。 
2) JAXB编写好DTD和绑定模式以后,XML文档被映射成了Java对象,其数据就是Java对象的属性,连数据类型都做好了转换,因此,访问XML文档比JDOM要简便,可以说是一劳永逸。 
3) JAXB由某个DTD和绑定模式生成的代码只能访问该DTD所约束的文档。如果想要访问其他XML文档,需要再编写DTD和绑定模式。JDOM可以处理任何XML文档,包括受约束的和不受约束的。 

目 前JDOM和JAXB都没有正式版本。JDOM的最新版本是beta8,JAXB是1.0 early access,其规范版本是0.21。相对而言, JDOM更成熟一些。例如JAXB不支持名字空间、不能向XML文档写入处理指令,有时我们需要保留的换行符和首尾空格在JAXB中自动过滤掉了,就连放 在<![CDATA[ 和 ]]>里面也不能幸免。JDOM就没有这些限制。如果说以上的3点比较是JDOM和JAXB本身的特点所决定的, 几乎不可能改变,那么这里表明,JAXB还需要更多的工作。 

(二)获得并安装JDOM 
在http://jdom.org可以 下载JDOM的最新版本。以JDOM beta8的2进制版本为例。下载后解压缩,JDOM的jar文件就是build目录下的文件jdom.jar,将 之加入类路径。另外JDOM还需要lib目录下那些jar文件如xerces.jar的支持。如果在使用中出现以下错误: 
java.lang.NoSuchMethodError 
或 
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException 
你需要保证xerces.jar文件在CLASSPATH中位于其他XML类,如JAXP或Crimson之前,这些类文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM Level 2。于是导致了上面的错误。 

(三)一个简单的例子 
JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的类,没有类工厂类的。其最重要的一个包org.jdom中主要有以下类: 
? Attribute 
? CDATA 
? Comment 
? DocType 
? Document 
? Element 
? EntityRef 
? Namespace 
? ProcessingInstruction 
? Text 
数据输入要用到XML文档要通过org.jdom.input包,反过来需要org.jdom.output。如前面所说,关是看API文档就能够使用。 
我们的例子读入XML文件exampleA.xml,加入一条处理指令,修改第一本书的价格和作者,并添加一条属性,然后写入文件exampleB.xml: 
//exampleA.xml 
<?xml version="1.0" encoding="GBK"?> 
<bookList> 
   <book> 
       <name>Java编程入门</name> 
       <author>张三</author> 
       <publishDate>2002-6-6</publishDate> 
       <price>35.0</price> 
   </book> 
   <book> 
       <name>XML在Java中的应用</name> 
       <author>李四</author> 
       <publishDate>2002-9-16</publishDate> 
       <price>92.0</price> 
   </book> 
</bookList> 

 
 
---------------------------------------------------
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.io.*;
public class cute{

public static void main(String args[]){
try{

org.jdom.input.SAXBuilder sb=new org.jdom.input.SAXBuilder();
//创建文档
org.jdom.Document    doc=sb.build(new FileInputStream("c:\\example.xml");
//加入一条处理指令
org.jdom.ProcessingInstruction pi = new ProcessingInstruction("xml-stylesheet","href=\"bookList.html.xsl\" type=\"text/xsl\"";
//把这条处理指令,加入文档中
doc.addContent(pi);
//获得这个文档得跟元素
org.jdom.Element el=doc.getRootElement();
//获得这个跟元素,的所有子元素
java.util.List ls=el.getChildren();
//得到第一个子元素
org.jdom.Element book=(Element)ls.get(0);
//给这个字元素添加一条属性
org.jdom.Attribute attr=new Attribute("hot","true";
book.setAttribute(attr);

//获得这个元素的子元素,(指定)
org.jdom.Element el2=book.getChild("author";
//输出这个元素的值
System.out.println(el2.getName());
//给这个元素的值改个名字
el2.setText("cute";

//再指定元素获得这个值
org.jdom.Element el3=book.getChild("price";
//给这个值换个值
el3.setText(Float.toString(50.0f));
String a="";
boolean bool=true;

org.jdom.output.XMLOutputter xml= new org.jdom.output.XMLOutputter(a,bool,"gb2312";
xml.output(doc,new FileOutputStream("c:\\cute.xml");

}catch(Exception e){
System.out.println(e.getMessage());

}



}
}

posted @ 2006-04-06 18:18 sparkwu 阅读(736) | 评论 (0)编辑 收藏

(转)应用JDOM处理数据库到XML转换的JSP实现

     摘要: 一、 JDOM 介绍 我们知道 DOM 是用于与平台和语言无关的方式表示 XML ...  阅读全文

posted @ 2006-04-06 10:18 sparkwu 阅读(493) | 评论 (0)编辑 收藏

2006年3月11日 #

(转)JDBC应用

使用JDBC进行访问数据库,首先要确保安装和运行了您选择的数据库,并且驱动程序可用。(可以从 http://industry.java.sun.com/products/jdbc/drivers 下载 JDBC 驱动程序)
Java与数据库交互通常由以下几步组成:
     1.装入数据库驱动程序 (JDBC 驱动程序或 JDBC-ODBC 桥) 。
     2.创建数据库的 Connection。
     3.创建一个 Statement 对象。该对象实际执行 SQL 或存储过程。
     4.创建一个 ResultSet,然后用执行查询的结果填充(如果目标是检索或直接更新数据)。
     5.从 ResultSet 检索或更新数据。

一、实例化驱动

访问数据库,先装入 JDBC 驱动程序,然后由 DriverManager创建与数据库相应的驱动程序的连接来确定。使用Class.forName() 直接装入,向 DriverManager 注册
示例:
public class Pricing extends Object {

   public static void main (String args[]){

       String driverName = "JData2_0.sql.$Driver";

      try {
         Class.forName(driverName);
      } catch (ClassNotFoundException e) {
         System.out.println("Error creating class: "+e.getMessage());
      }
   }
}

二、创建Connection

示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Pricing extends Object {
   public static void main (String args[]){
      String driverName = "JData2_0.sql.$Driver";
      String connectURL = 
      "jdbc:JDataConnect://127.0.0.1/pricing";
      Connection conn = null;   
      try
      {
         Class.forName(driverName);
         conn = DriverManager.getConnection(connectURL);
      } catch (ClassNotFoundException e) {
         System.out.println("Error creating class: "+e.getMessage());
      } catch (SQLException e) {
          System.out.println("Error creating connection:"+e.getMessage());
      }
      finally {
         System.out.println("Closing connections...");
         try {
            conn.close();
         } catch (SQLException e) {
            System.out.println("Can't close connection.");
         }
      }

   }
}
各种数据库使用JDBC连接的方式
//DB2
String driverName = "com.ibm.db2.jcc.DB2Driver";
String connectURL = "jdbc:db2://localhost:5000/sample";
Class.forName(driverName);
Connection conn = DriverManager.getConnection(connectURL,”user”,”password”);

//Oracle(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);

//SQL
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

//Sybase
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);

//MySQL
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" Connection conn= DriverManager.getConnection(url);

//ACCESS
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver(*.mdb)};DBQ="+application.getRealPath("/Data/MyDb.mdb");
Connection conn = DriverManager.getConnection(url,"","");
Statement stmtNew=conn.createStatement() ;

三、创建 Statement 对象

Statement 对象用于将 SQL 语句发送到数据库中。有三种 Statement 对象,它们都作为在给定连接上执行 SQL 语句的包容器:Statement、PreparedStatement(它从Statement 继承而来)和 CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句(当要反复执行某一特定查询时,PreparedStatement 可能最有用);CallableStatement 对象用于执行对数据库已存储过程的调用。CallableStatement 和 PreparedStatement之间的一个区别是:除了通常创建的 ResultSet 之外,CallableStatement 还可以提供 OUT 参数

Statement实例:
在程序中增加
import java.sql.Statement;
在程序生成Connection对象后,利用该对象生成Statement 对象
Statement statement = null;
      try {
         statement = conn.createStatement();
      } catch (SQLException e) {
         System.out.println("SQL Error: "+e.getMessage());
      }

PreparedStatement实例
...
 statement = conn.prepareStatement("select * from test where "+ "id < ? and id > ?");
 statement.setInt(1, 5);
 statement.setInt(2, 10);
 resultset = statement.executeQuery(); 
...
CallableStatement实例

四、执行Statement

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和execute。使用哪一个方法由 SQL 语句所产生的内容决定。

  方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。
  方法 executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
  方法 execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。

示例:
import java.sql.ResultSet;
ResultSet Rs = null;
在生成Statement后执行
Rs = statement.executeQuery("SELECT * FROM test");

五、ResultSet

ResultSet 被创建之后,它就有一个引用数据集内相对位置的“指针”。在 ResultSet语句返回之后(即使表为空),该指针正好位于第一行的“上面”。要到达实际数据的第一行,应用程序调用 next() 方法。该方法返回一个 Boolean 值,指出在新位置处是否有行存在。如果没发现数据,则 next() 返回 false。
Getxxx()与wasNull()
ResultSet.getXXX 方法获取常见的 JDBC 数据类型
对非常大的行值使用流
getBinaryStream 返回只提供数据库原字节而不进行任何转换的流。
getAsciiStream 返回提供单字节 ASCII 字符的流。
getUnicodeStream 返回提供双字节 Unicode 字符的流。
wasNull() 方法来确定是否有特定的数据片为空
while (resultset.next()) {
//根据字段名
System.out.print(resultset.getString("id"));
//根据索引
System.out.print(resultset.getString(2));
……
}
通过ResultSetMetaData类还可以获取元数据
...
import java.sql.ResultSetMetaData;
public class Pricing extends Object {
...
      Statement statement = null;
      ResultSet resultset = null;
      ResultSetMetaData resultmetadata = null;
      try {
         statement = conn.createStatement();
         resultset = statement.executeQuery("select * from products"); 
  
         //Get the ResultSet information
         resultmetadata = resultset.getMetaData();
         //Determine the number of columns in the ResultSet
         int numCols = resultmetadata.getColumnCount();
  
         while (resultset.next()) {
            for (int i=1; i <= numCols; i++) {
               //For each column index, determine the column name
               String colName = resultmetadata.getColumnName(i);
               //Get the column value
               String colVal = resultset.getString(i);
               //Output the name and value
               System.out.println(colName+"="+colVal);
            }
            //Output a line feed at the end of the row
            System.out.println(" ");
         }
...
不必关闭 ResultSet;当产生它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该 ResultSet 将被 Statement 自动关闭。

posted @ 2006-03-11 17:47 sparkwu 阅读(610) | 评论 (0)编辑 收藏

2006年2月5日 #

工作之余.不忘记贴一些笑话

一个MM和他男朋友的情话


给LG织围巾的时候不知为何事与LG争辩,一气之下告诉他:“围巾不给你织了!”

    “那你给谁织?”LG瞪我。

    “管得着!就是捐献灾区也不给你!”

    “捐献灾区?“LG皱了皱眉头:“我一个人嫌弃你的手艺也就罢了,何必连累灾区人民。”

什么类型

    和LG一起看电视,广告中一出现美女LG便两眼放光:“美女~~~”

    在他第N次两眼放光时,我忍不住问他:“你到底喜欢什么类型的美女啊?“

    他很努力的想。我提示他:“是不是很妩媚的那种?你不是最喜欢COCO嘛。“
   LG拼命点头:“对啊对啊~~咦,不对,我还喜欢李鞍啊,她不是妩媚型的。“

    “那我属于什么类型啊?“

    “你啊……属于乱七八糟型。“

    “你再说一次试试看……“

    “不是的,你是属于……属于……“LG想得十分辛苦的样子,我瞪着他。

    “对啦~~~你是属于--MIKE喜欢型~~嘿嘿~~“





  减肥记


    LG突然跟我说:“我觉得你胖了。“

    吓了一大跳,赶紧去称了一下体重,50KG,比以前胖了1KG。恨恨地瞪了LG一眼:

    “TMD,才两斤肉啊,我都没感觉你居然就知道了。“

    于是决定减肥。

    “我要去买根绳子。“我对LG宣布。

    LG大为紧张:“宝宝不要这么想不开啊,就是胖了点,不需要寻短见吧……“
    一脚踹了过去:“你巴不得我死啊,我只是想跳绳减肥!“

    “哦--“LG松了口气,然后瞅瞅四周:“老婆你真打算跳绳啊,我怕你会把楼跳塌了……“

    恶狠狠的一口咬下去:“死小子,我是100斤,你当我是100公斤啊!!!!“
    因为缺少运动细胞加上懒惰,最终决定节食,也因为上班忙碌,常常忘了吃早饭,有一 天胃痛,赖在床上不肯上班。

    LG在电话里絮絮叨叨:“老婆去医院看看啊,我是叫你运动减肥啊,谁让你不吃饭的,看看现在胃病都出来了,跳绳容易把楼跳塌你可以练呼啦圈啊……“

   这死小子,到这时候了居然还在取笑我。怒从心头起:“你敢嫌我胖啊!“

    LG还在不知死活的继续游说:“老婆练呼啦圈嘛~~~“

    “你还嫌我胖!!!!!“

    “哦,不嫌弃的不嫌弃的。“他终于听出我的怒气。

    “哼,不嫌弃还让我减肥!现在好了,都折腾出胃病来了,你赔你赔你赔!!!“

    “好好好,我赔!“

    “赔什么啊?“

    LG想了想,做痛下决心状:“我就以身相许吧!“ 逛街


    LG喜欢逛街。这点我一直觉得他有异于别的男孩子,虽然他逛街看美女的时间比看衣服多。

    和LG逛街听到他说的最多的话就是:“刚才过去一个美女……“(吸住口水的声音)

    我通常是头也不回:“看到帅哥记得告诉我。“

    他马上把脸凑到我眼前:“看吧!帅哥!“

    我和LG都喜欢逛礼品店,喜欢可爱或者奇异的小玩意。

    很多店都会把很可爱的小猫小狗小猪挂在店堂上方做装饰。我通常一进店门就会和LG说:“你跑这么高挂上面做什么。“然后LG就会在众多小动物中仔 细搜索,直到发现一只小猪挂在上面,就回头怒视我:“明明是你!“(我都觉得奇怪,这么多小动物,他为什么一定认为我是拿那只小猪形容他呢?)

    此后LG和我逛街只要看到小猪造型的玩具,他就会和我抢着说:“这个是你。“说得比我慢了就怒目相向,好象被我一说他真的就成了那只小猪,说得比我快了就得意洋洋,好象我就成了那只小猪。

    一次我看中一只抱抱熊,在柜台的最上面,我正想叫他帮我拿,却见他指着自己前面一只超可爱的小猪扑满念念有辞:“这个是你……“

    我扯扯他的衣服:“把上面那只抱抱熊拿过来。“

    他把抱抱熊拿给我后又指着那只小猪扑满最后确认似的跟我重复了一次:“这个是你!“

    ……¥%……-*$%^&&*$##


  关于“猪“



    我喊他小猪。

    他颇有意见:“我哪里象猪了?“

    敲他的头:“笨啊,只是爱称嘛,你要象猪谁要你啊。“

    他若有所思的看我:“我觉得你倒蛮象小猪的,这么懒这么能吃还这么能睡。“

    我恶狠狠的瞪他:“你说谁???“

    “没有没有,不是说你……“他笑容满面。

    刚一转身,听见他小声嘀咕:“这年头,说真话不保险啊……“

    看杂志的时候看到一项调查,女孩子大都喜欢喊自己的爱人“小猪“。

    大喜,急忙拿给他看:“是潮流哦,原来这么多MM英雄所见略同啊。“

    得意中……

    却见他不解的看我:“你们女孩子都这么喜欢做母猪?“

    ¥%……-*$%^&&*$##

    他加班到很晚,回家已是困的睁不开眼。听见我喊他小猪,他趴在床上开始嘀咕:“还是做猪比较幸福哦,每天可以吃了睡睡了吃,什么事都不用做。“

    “是呀,最后被送到屠宰场。“我拍拍他的头。

    “那太惨了点!“他突然睁开眼睛十分清醒的说:“还是做种猪比较好!“

    等我反应过来他已经睡得象只死猪……


  爱要怎么说出口



    “你是不是不喜欢我了?“我问他。

    “谁说的。“他看杂志,头也不抬。

    “我说的!“

    “有什么证据?“

    “那你爱我吗?“

    “恩!“

    “恩是什么意思?“

    “L-O-V-E“(每个字母分开念)

    “不许说鸟语。“

    他想了想“W-O A-I N-I“(按英语字母的发音,继续每个字母分开念)

    “听不懂!“

    没辙。

    “爱!“

    “爱谁?“

    “你!“

    “把话说完整了!“

    沉默……

    “说不说?不说不许吃饭不许睡觉!“

    妥协。

    “我爱你!“

    胜利!

    “这可是你自愿说的哦,我可没逼你哦。“

    ¥%……-*$%^&&*$##


  卖玫瑰的小女孩



    和LG去火知了酒吧。在门口被一卖花的小女孩拦住。

    “哥哥买束玫瑰送给你的女朋友吧。“

    无视。

    小女孩不屈不挠:“哥哥,买束玫瑰送给你的女朋友吧,鲜花送美女呀。“

    LG马上停下脚步四下张望:“啊?美女?美女呢?在哪?“


====================================

1. 猎人打猎,看树上有两只鸟,举枪打下一只,发现是只没毛的,正纳闷,另一只鸟飞下来大骂猎人:他*的,老子刚哄她把衣服脱光,你就把她打下来了。。。

2.农夫要杀公鸡却逮不着,于是抓起母鸡对公鸡说:再不下来让你当光棍儿!公鸡:你他妈以为我傻呀,我下去她就成寡妇了。。。

3.一次军事演习中,一颗炮弹偏离很远,派去查看的士兵发现:炮弹落在农田里,田中正站着你,你衣衫破碎满面漆黑饱含热泪地说:偷颗白菜犯得着用炮弹轰???

4.京九铁路通车,沿线市民路边观看,车上一女客换卫生巾后扔出窗外,迎面贴一市民脸上,市民拿下后说:我***!这车就是快,飘张纸都能把鼻子打出血来!!!

5.有两个造假钞的不小心造出面值15元的假钞,两人决定拿到偏远山区花掉,当他们拿一张15元买了1元的糖葫芦后,他们哭了,农民找了他们两张7块的(7块的!!...)

6.农民赶驴进城,遇到无赖,无赖:吃饭没?农民说:吃了。无赖:我问的是驴。农民一听,转身对驴扇两耳光:妈的,城里有亲戚也不说一声

=======================

文革串联时期,火车异常拥挤,某君趁停车将屁股伸出车窗外大便。车将启动时,列车员作最后巡视时大喊:秃头叨雪茄烟的那小子,把脑袋缩回去!

蛔虫父子趴在屁眼向外看,儿子问蓝色的什么,父:蓝天,儿:那绿色的呐?父:大地。儿:外面的世界真美好,为什么我们要呆在屁眼里?父庄严地说:因为这是我们的祖国!


悬崖上一只小老鼠挥舞着短短的前爪,一次又一次跳下去,努力学习飞翔,旁边母蝙蝠看着它摔的头破血流,忧心的说:它爹,要不告诉它,它不是咱亲生的!

森林里三只小动物在聊天,小猪说:现在流行用昵称,你后你们就叫我小猪猪。小兔说:好,那我就叫做小兔兔。小鸡一脸不高兴说:我还有事,先走了!

有个人第一次在集市上卖冰棍,不好意思叫卖,旁边有一个人正高声喊:卖冰棍!,他只好喊道:我也是。

母蛤蟆为躲避一追求她的公蛤蟆而躲进狗洞里,公蛤蟆耐心的守在洞口,不一会从狗洞钻出一只耗子,公蛤蟆伤心的说:难怪你不爱我了,原来狗给你买貂皮了。

拉登与萨达姆在海边散步,忽然有记者拍照,一见镜头,拉登做了V字手形,萨达姆问:登哥,我们胜利了吗?拉登小声曰:胜利个屁,我是告诉美国,别炸了,就剩我们俩了啊!

一个士兵练习爬树,忽然他从树上掉下来,军官问他为什么掉下来,他说有两只松鼠跑到他裤裆里去了,这我还忍了,可是他们进去了说:咱们把果子分了吧!


你蹲在海滩上拾贝壳,见一乌龟趴在沙坑中产卵,朋友为你拍下相片,归来你大笔一挥写道:我、王八、蛋!

某学校学生趁下课十分钟出校门,买2杯奶茶和2个芋头。眼见上课钟快响了,情急之下就对老板说:老板我要两个奶头!

老鳖调戏河蚌,河蚌很生气,张嘴咬住老鳖,老鳖忍痛拖着河蚌来回爬,青蛙见了敬佩地说:乖乖,鳖哥混大了,出入都夹着公文包了。

一人给猴喂花生,猴总是往屁眼塞一下然后再吃,那人不解问管理员,答:它去年吃了个大桃,费好大劲才把核拉出来,所以现在它吃什么都得先量量。

瘸子和瞎子同骑一辆车外出。瞎子骑,瘸子看路。突然瘸子发现前面有一条深沟,急呼:沟沟沟!瞎子回唱到:噢嘞噢嘞噢嘞!二人一起掉入沟中。。。。


posted @ 2006-02-05 15:08 sparkwu 阅读(353) | 评论 (0)编辑 收藏

2005年10月21日 #

多对多测试

package com.dsii.eservice.creationservice.dao.test;

import junit.framework.TestCase;
import net.sf.hibernate.HibernateException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.dsii.eservice.creationservice.dao.ArtDAO;
import com.dsii.eservice.creationservice.po.ArtPO;
import com.dsii.eservice.creatorservice.po.CreatorPO;

public class ArtDAOTests extends TestCase {


 private Log log = LogFactory.getLog(ArtDAOTests.class);

 private static Integer pInsertKey1;
 private static Integer pInsertKey2;
 private static Integer pInsertKey3;
 private static Integer pInsertKey4;
 private static Integer pInsertKey5;
 private static Integer pInsertKey6;

 public ArtDAOTests(String arg0) {
  super(arg0);
 }

 /*
  * @see TestCase#setUp()
  */
 protected void setUp() throws Exception {
  super.setUp();
 }

 /*
  * @see TestCase#tearDown()
  */
 protected void tearDown() throws Exception {
  super.tearDown();
 }

 /**
  *
  * <p><code>testInsertObject</code></p>
  *
  * @authorspark 2005-8-3
  * @since1.0
  */
 public void testInsertObject() throws HibernateException {

  log.debug("----------testInsertObject start-------------");
  ArtPO artPO1 = new ArtPO();
  artPO1.setArtId(new Integer(1));
  artPO1.setArtTypeId(new Integer(6));
  artPO1.setArtName("spark");
  
  ArtPO artPO2 = new ArtPO();
  artPO2.setArtId(new Integer(2));
  artPO2.setArtTypeId(new Integer(7));
  artPO2.setArtName("spark2");
  
  ArtPO artPO3 = new ArtPO();
  artPO3.setArtId(new Integer(3));
  artPO3.setArtTypeId(new Integer(8));
  artPO3.setArtName("spark3");

  CreatorPO creatorPO1 = new CreatorPO();
  creatorPO1.setArtCreatorId(new Integer(31));
  CreatorPO creatorPO2 = new CreatorPO();
  creatorPO2.setArtCreatorId(new Integer(32));
  CreatorPO creatorPO3 = new CreatorPO();
  creatorPO3.setArtCreatorId(new Integer(37));
  //artPO1
  artPO1.getCreatorSet().add(creatorPO1);
  artPO1.getCreatorSet().add(creatorPO2);
  artPO2.getCreatorSet().add(creatorPO2);
  artPO2.getCreatorSet().add(creatorPO3);
  artPO3.getCreatorSet().add(creatorPO1);
  artPO3.getCreatorSet().add(creatorPO3);
  //creatorPO1
  creatorPO1.getArtSet().add(artPO1);
  creatorPO1.getArtSet().add(artPO2);
  creatorPO2.getArtSet().add(artPO2);
  creatorPO2.getArtSet().add(artPO3);
  creatorPO3.getArtSet().add(artPO1);
  creatorPO3.getArtSet().add(artPO3);

  //  artPO.setArtsize("big");
  //  artPO.setArtCreatedYear("CreatedYear1");
  //  artPO.setArtDrawedBird("DrawedBird1");
  //  artPO.setOriginal("original1");
  //  artPO.setDepostion("top");
  //  artPO.setIntroduction("china1");
  //  artPO.setArtFileURL("www.dsii.net");
  //  artPO.setCreator("sparkwu");
  //  artPO.setCreateDate(TimeUtils.getCurrentTimestamp());
  //  artPO.setModifier("inModify");
  //  artPO.setModifyDate(TimeUtils.getCurrentTimestamp());
    try {
     log.info("----------pInsertKey1 insertObject(artPO1) start-------------");
     pInsertKey1 = (Integer) ArtDAO.getInstance().insertObject(artPO1);
     pInsertKey2 = (Integer) ArtDAO.getInstance().insertObject(artPO2);
     pInsertKey3 = (Integer) ArtDAO.getInstance().insertObject(artPO3);
     pInsertKey4 = (Integer) ArtDAO.getInstance().insertObject(creatorPO1);
     pInsertKey5 = (Integer) ArtDAO.getInstance().insertObject(creatorPO2);
     pInsertKey6 = (Integer) ArtDAO.getInstance().insertObject(creatorPO3);
     log.debug("--------pInsertKey ==---------------" + pInsertKey1);
    } catch (Exception e) {
     e.printStackTrace();
    }
 }

 /**
  * <p><code>testFindByPrimeryKey</code></p>
  */
 // public void testFindByPrimeryKey() {
 //  log.debug("--------testFindByPrimeryKey start---------------");
 //
 //  Integer pk = pInsertKey;
 //  try {
 //   ArtPO po = (ArtPO) ArtDAO.getInstance()
 //     .findByPrimeryKey(new Integer(1));
 //   assertEquals("1", po.getArtId());
 //   assertEquals("inCreator", po.getCreator());
 //   log.debug("--------BirdsPO==---------------" + po);
 //  } catch (Exception e) {
 //   e.printStackTrace();
 //  }
 //  log.debug("--------testFindByPrimeryKey end---------------");
 // }

}

posted @ 2005-10-21 09:45 sparkwu 阅读(359) | 评论 (0)编辑 收藏

2005年9月1日 #

Blob字段

 从CSDN上看到的感觉挺有用的

      最近几次碰到这个问题,需求是将一个文件或者文件流存储到Oracle数据库里,
Oracle8提供了Blob和Clob用来存储二进制大对象数据,可是它和Java.sql.里面的Blob
不兼容,经常导致Blob字段无法锁定或者操作失败,总之我总结了一些经验
大家共享
首先建立测试数据表
 drop table filelist;
 commit;
 
 CREATE TABLE SYSTEM.FILELIST (
 "FILENAME" VARCHAR2(50) NOT NULL,
 "FILESIZE" NUMBER(20)  NULL,
 "FILEBODY" BLOB  NULL, 
 PRIMARY KEY("FILENAME"), UNIQUE("FILENAME")) ;
 commit;


       测试过程,首先将硬盘文件读入数据库,然后再读出到硬盘的另一个新文件里,原码如下:


/**
* @author 秋南(Ryan)
* @email  guoyf@sinosoft.com.cn
* @version 2002 1 14
*/
import java.io.*;
import java.util.*;
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
import java.text.*;

public class test
{
 public static void main(String args[]) throws java.io.IOException,java.sql.SQLException
 {
  dbBean db1=new dbBean();
  /**
  *这里是我的数据联接Bean
  *大家可以用自己的连接Bean
  */
  byte a[]=null;//**将测试文件test.doc读入此字节数组
  java.io.FileInputStream fin=null;
  java.io.FileOutputStream fout=null;
  oracle.jdbc.OracleResultSet ors=null;//**这里rs一定要用Oracle提供的
  oracle.jdbc.driver.OraclePreparedStatement opst=null;//**PreparedStatement用

                                                                              //Oracle提供的
   
  try
  {
   
   java.io.File f1=new java.io.File("c:/temp/test.doc");
   java.io.File f2=new java.io.File("c:/temp/testout.doc");//**从BLOB读出的信息写

                                                                 //入该文 件,和源文件对比测试用
   fin=new java.io.FileInputStream(f1);
   fout=new java.io.FileOutputStream(f2);
   
   
   int flength=(int)f1.length();//**读入文件的字节长度
   System.out.println("file length::"+flength);
   a=new byte[flength];
   
   int i=0;int itotal=0;
   /**将文件读入字节数组
   for (;itotal<flength;itotal=i+itotal )
   {
    
    i=fin.read(a,itotal,flength-itotal);
    
   }
   fin.close();
   
   System.out.println("read itotal::"+itotal);
  /**注意Oracle的 BLOB一定要用EMPTY_BLOB()初始化 
  String mysql="insert into filelist (FileName,FileSize,FileBody) values (?,?,EMPTY_BLOB())";
  opst=(oracle.jdbc.driver.OraclePreparedStatement)db1.conn.prepareStatement(mysql);
         opst.setString(1,"wordtemplate");
           opst.setInt (2,flength);
         opst.executeUpdate();
         opst.clearParameters();
         /**插入其它数据后,定位BLOB字段
           mysql="select filebody from filelist where filename=?";
           opst=(oracle.jdbc.driver.OraclePreparedStatement)db1.conn.prepareStatement(mysql);
           opst.setString(1,"wordtemplate");
           ors=(oracle.jdbc.OracleResultSet)opst.executeQuery();
           if (ors.next())
           {
          
           oracle.sql.BLOB blob=ors.getBLOB(1);/**得到BLOB字段          
           int j=blob.putBytes(1,a);/**将字节数组写入BLOB字段
           System.out.println("j:"+j);
                     
           db1.conn.commit();
           ors.close();
           }        
          
     System.out.println("insert into ok");
    
    byte b[]=null;/**保存从BLOB读出的字节
    opst.clearParameters();
           mysql="select filebody from filelist where filename=?";
           opst=(oracle.jdbc.driver.OraclePreparedStatement)db1.conn.prepareStatement(mysql);
           opst.setString(1,"wordtemplate");
           ors=(oracle.jdbc.OracleResultSet)opst.executeQuery();
           if (ors.next())
           {
           oracle.sql.BLOB blob2=ors.getBLOB(1); 
          
           System.out.println("blob2 length:"+blob2.length());
           b=blob2.getBytes(1,flength);/**从BLOB取出字节流数据
           System.out.println("b length::"+b.length);
           db1.conn.commit();
           } 
           ors.close();
           /**将从BLOB读出的字节写入文件
           fout.write(b,0,b.length);
           fout.close();  
    
     System.out.println("write itotal::"+b.length);
                
   
  }
  catch(Exception e)
  {
   System.out.println("errror :"+e.toString() );
   e.printStackTrace();
   
  }
  finally
  { /**关闭所有数据联接
   stmt.close();
   db1.closeConn();
  }
  

  
 }
}
    编译运行在TomCat下调试通过。
    需要注意的是Blob存取的过程,一般先存入和BLOB相关的控制数据,如文件的名字,
    然后查询定位BLOB字段,利用OracleBlob提供的方法:
    public int putBytes(long pos,byte bytes[])
    public byte[]  getBytes(long pos,byte bytes[])
    或者利用
    public OutputStream getBinaryOutputStream() throws SQLException
    public InputStream  getBinaryStream() throws SQLException
   因为利用输入输出流总归还是利用到字节数组缓冲流,所以就不举例子了。

posted @ 2005-09-01 21:57 sparkwu 阅读(497) | 评论 (0)编辑 收藏

仅列出标题  下一页