??xml version="1.0" encoding="utf-8" standalone="yes"?>
在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.
Ƣ迎来到LSNRCTLQ请键入"help"以获得信息?/p>
LSNRCTL> status
q接?DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robust)(PORT=1521)))
TNS-01103: 地址的协议专用组件指定不正确
TNS-12541: TNSQ无监听?br />TNS-12560: TNSQ协议适配器出现错?br />TNS-00511: 无监听器
32-bit Windows Error: 61: Unknown error
LSNRCTL> start
启动tnslsnrQ请E?..
Failed to start service, error 3.
TNS-12536: TNSQ可能会ȝ*?br />TNS-12560: TNSQ协议适配器出现错?br />TNS-00506: *作可能阻?br />32-bit Windows Error: 997: Unknown error
?解决Ҏ
修改 listerner.ora(..\ora92\network\admin),文g,保如下:
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中启?br />LSNRCTL> start
用JDOM处理XML文档(转蝲) 关键词:Java、JDOM、XML、JAXB Q一QJDOM的介l以及与JAXB的比较?br /> Java + XML = JDOM Q?br />q? 是JDOM设计者的目标。如果你曄使用q烦人的SAX或是DOM来处理XMLQ你׃知道Z么要有JDOM或者是JAXB。在今年Q?002Q的 JavaOne会议上JDOM的主要创始hJason Hunter有一精彩的演讲介绍了JDOM技术,题目是 JDOM Makes XML Easy。?br />在那文档里QJDOM被拿来与DOM比较Q而我更愿意拿它同JAXB比较。因为JAXB和JDOM 都是Z在Java中提供比DOM和SAX更ؓ方便的XML处理接口而开发的Qƈ且通过完全不同的途径来解册个问题。JDOM的处理方式是与DOMcM 的树操作。而JAXB通过DTD和绑定模式来生成讉KXML文档的Java代码Q将XML映射成了Java对象来操作。你可以Ҏ目的需要和个h喜好? 军_采用哪一个。?br />JDOM与JAXB的比较,从本w的特点来看Q?br />1) JDOM比JAXB更容易上手。用JAXB首先要会~写DTDQ然后还要会~写l定模式。JDOM没有q样的要求,如果你会Java和XMLQ甚臛_以说光是看JDOM的javadoc文档p够用JDOM。?br />2) JAXB~写好DTD和绑定模式以后,XML文档被映成了Java对象Q其数据是Java对象的属性,q数据类型都做好了{换,因此Q访问XML文档比JDOM要简便,可以说是一x逸。?br />3) JAXB由某个DTD和绑定模式生成的代码只能讉K该DTD所U束的文档。如果想要访问其他XML文档Q需要再~写DTD和绑定模式。JDOM可以处理MXML文档Q包括受U束的和不受U束的。?br /> ? 前JDOM和JAXB都没有正式版本。JDOM的最新版本是beta8QJAXB?.0 early accessQ其规范版本?.21。相对而言Q? JDOM更成熟一些。例如JAXB不支持名字空间、不能向XML文档写入处理指oQ有时我们需要保留的换行W和首尾I格在JAXB中自动过滤掉了,p? ?lt;![CDATA[ 和 ]]>里面也不能幸免。JDOM没有这些限制。如果说以上?Ҏ较是JDOM和JAXB本n的特Ҏ军_的, 几乎不可能改变,那么q里表明QJAXBq需要更多的工作。?br /> Q二Q获得ƈ安装JDOM 在http://jdom.org可以 下蝲JDOM的最新版本。以JDOM beta8?q制版本Z。下载后解压~,JDOM的jar文g是build目录下的文gjdom.jarQ将 之加入类路径。另外JDOMq需要lib目录下那些jar文g如xerces.jar的支持。如果在使用中出C下错误: java.lang.NoSuchMethodError 或?br />java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException 你需要保证xerces.jar文g在CLASSPATH中位于其他XMLc,如JAXP或Crimson之前Q这些类文gQ包括以前老版本的xercesQ可能不支持SAX2.0或DOM Level 2。于是导致了上面的错误。?br /> Q三Q一个简单的例子 JDOM的处理方式有些类gDOMQ但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的c,没有cd厂类的。其最重要的一个包org.jdom中主要有以下c: ? Attribute ? CDATA ? Comment ? DocType ? Document ? Element ? EntityRef ? Namespace ? ProcessingInstruction ? Text 数据输入要用到XML文档要通过org.jdom.input包,反过来需要org.jdom.output。如前面所_x看API文档p够用。?br />我们的例子读入XML文gexampleA.xmlQ加入一条处理指令,修改W一本书的h格和作者,q添加一条属性,然后写入文gexampleB.xmlQ?br />//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" ![]() //加入一条处理指?br />org.jdom.ProcessingInstruction pi = new ProcessingInstruction("xml-stylesheet","href=\"bookList.html.xsl\" type=\"text/xsl\"" ![]() //把这条处理指令,加入文档?br />doc.addContent(pi); //获得q个文档得跟元素 org.jdom.Element el=doc.getRootElement(); //获得q个跟元素,的所有子元素 java.util.List ls=el.getChildren(); //得到W一个子元素 org.jdom.Element book=(Element)ls.get(0); //l这个字元素d一条属?br />org.jdom.Attribute attr=new Attribute("hot","true" ![]() book.setAttribute(attr); //获得q个元素的子元素Q(指定Q?br />org.jdom.Element el2=book.getChild("author" ![]() //输出q个元素的?br />System.out.println(el2.getName()); //l这个元素的值改个名?br />el2.setText("cute" ![]() //再指定元素获得这个?br />org.jdom.Element el3=book.getChild("price" ![]() //l这个值换个?br />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()); } } } |
使用JDBCq行讉K数据库,首先要确保安装和q行了您选择的数据库Qƈ且驱动程序可用?可以?http://industry.java.sun.com/products/jdbc/drivers 下蝲 JDBC 驱动E序)
Java与数据库交互通常׃下几步组成:
1.装入数据库驱动程?(JDBC 驱动E序?JDBC-ODBC ? ?
2.创徏数据库的 Connection?
3.创徏一?Statement 对象。该对象实际执行 SQL 或存储过E?
4.创徏一?ResultSetQ然后用执行查询的结果填充(如果目标是检索或直接更新数据Q?
5.?ResultSet 索或更新数据?
一、实例化驱动
讉K数据库,先装?JDBC 驱动E序Q然后由 DriverManager创徏与数据库相应的驱动程序的q接来确定。用Class.forName() 直接装入Q向 DriverManager 注册
CZQ?BR>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
CZQ?BR>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.");
}
}
}
}
各种数据库用JDBCq接的方?BR>//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?;
//OracleQthin模式Q?BR>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 对象Q它们都作ؓ在给定连接上执行 SQL 语句的包容器QStatement、PreparedStatementQ它从Statement l承而来Q和 CallableStatementQ它?PreparedStatement l承而来Q。它们都专用于发送特定类型的 SQL 语句Q?Statement 对象用于执行不带参数的简单SQL 语句QPreparedStatement 对象用于执行带或不带 IN 参数的预~译 SQL 语句(当要反复执行某一特定查询ӞPreparedStatement 可能最有用)QCallableStatement 对象用于执行Ҏ据库已存储过E的调用。CallableStatement ?PreparedStatement之间的一个区别是Q除了通常创徏?ResultSet 之外QCallableStatement q可以提?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 接口提供了三U执?SQL 语句的方法:executeQuery、executeUpdate 和execute。用哪一个方法由 SQL 语句所产生的内容决定?
Ҏ executeQuery 用于产生单个l果集的语句Q例?SELECT 语句?
Ҏ executeUpdate 用于执行 INSERT、UPDATE ?DELETE 语句以及 SQL DDLQ数据定义语aQ语句,例如 CREATE TABLE ?DROP TABLE。INSERT、UPDATE 或DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整敎ͼ指示受媄响的行数Q即更新计数Q。对?CREATE TABLE ?DROP TABLE {不操作行的语句QexecuteUpdate 的返回值Mؓ零?
Ҏ execute 用于执行q回多个l果集、多个更新计数或二者组合的语句?BR>
CZQ?BR>import java.sql.ResultSet;
ResultSet Rs = null;
在生成Statement后执?BR>Rs = statement.executeQuery("SELECT * FROM test");
五、ResultSet
ResultSet 被创Z后,它就有一个引用数据集内相对位|的“指针”。在 ResultSet语句q回之后Q即使表为空Q,该指针正好位于第一行的“上面”。要到达实际数据的第一行,应用E序调用 next() Ҏ。该Ҏq回一?Boolean |指出在新位置处是否有行存在。如果没发现数据Q则 next() q回 false?BR>Getxxx()与wasNull()
ResultSet.getXXX Ҏ获取常见?JDBC 数据cd
寚w常大的行g用流
getBinaryStream q回只提供数据库原字节而不q行M转换的流?BR>getAsciiStream q回提供单字?ASCII 字符的流?BR>getUnicodeStream q回提供双字?Unicode 字符的流?BR>wasNull() Ҏ来确定是否有特定的数据片为空
while (resultset.next()) {
//Ҏ字段?BR>System.out.print(resultset.getString("id"));
//Ҏ索引
System.out.print(resultset.getString(2));
…?BR>}
通过ResultSetMetaDatac还可以获取元数?BR>...
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(" ");
}
...
不必关闭 ResultSetQ当产生它的 Statement 关闭、重新执行或用于从多l果序列中获取下一个结果时Q该 ResultSet 被 Statement 自动关闭?BR>
lLGl围巄时候不知ؓ何事与LG争辩Q一气之下告诉他Q“围巾不l你l了Q?BR>
“那你给谁织Q”LG瞪我?BR>
“管得着Q就是捐献灾Z不给你!?BR>
“捐献灾区?“LG׃q_“我一个h嫌弃你的手艺也就|了Q何必连累灾Zh民。?BR>
什么类?BR>
和LG一L电视Q广告中一出现女LG便两眼放光:“美女~~~?BR>
在他WNơ两眼放光时Q我忍不住问他:“你到底喜欢什么类型的女啊??BR>
他很努力的想。我提示他:“是不是很妩媚的那种Q你不是最喜欢COCO嘛。?BR> LG拼命点头Q“对啊对啊~~咦,不对Q我q喜Ƣ李鞍啊Q她不是妩媚型的。?BR>
“那我属于什么类型啊Q?BR>
“你啊……属于ؕ七八p型。?BR>
“你再说一ơ试试看……?BR>
“不是的Q你是属于……属于……“LG惛_十分辛苦的样子,我瞪着他?BR>
“对啦~~~你是属于--MIKE喜欢型~~嘿嘿~~?BR>
减肥?BR>
LGH然跟我_“我觉得你胖了。?BR>
吓了一大蟩Q赶紧去UC一下体重,50KGQ比以前胖了1KG。恨恨地瞪了LG一|
“TMDQ才两斤肉啊Q我都没感觉你居然就知道了。?BR>
于是军_减肥?BR>
“我要去买根l_。“我对LG宣布?BR>
LG大ؓ紧张Q“宝宝不要这么想不开啊,是胖了点,不需要寻短见吧……?BR> 一脚踹了过去:“你巴不得我dQ我只是惌l_肥!?BR>
“哦--“LG松了口气Q然后瞅瞅四周:“老婆你真打算跳啊,我怕你会把D塌了……?BR>
恶狠狠的一口咬下去Q“死子Q我?00斤,你当我是100公斤啊!Q!Q?BR> 因ؓ~少q动l胞加上懒惰Q最l决定节食,也因Z班忙,常常忘了吃早饭,有一 天胃痛,赖在床上不肯上班?BR>
LG在电话里iQ叨叨Q“老婆d院看看啊Q我是叫你运动减肥啊Q谁让你不吃饭的Q看看现在胃病都出来了,跳Ҏ把楼跛_你可以练呼啦圈啊……?BR>
q死子Q到q时候了居然q在取笑我。怒从心头P“你敢嫌我胖啊!?BR>
LGq在不知L的l游_“老婆l呼啦圈嘛~~~?BR>
“你q嫌我胖Q!Q!Q?BR>
“哦Q不嫌弃的不嫌弃的。“他l于听出我的怒气?BR>
“哼Q不嫌弃q让我减肥!现在好了Q都折腾病来了,你赔你赔你赔Q!Q?BR>
“好好好Q我赔!?BR>
“赔什么啊Q?BR>
LG想了惻I做痛下决心状Q“我׃w相许吧Q?逛街
LG喜欢逛街。这Ҏ一直觉得他有异于别的男孩子Q虽然他逛街看美女的旉比看衣服多?BR>
和LG逛街听到他说的最多的话就是:“刚才过M个美女……“(怽口水的声韻I
我通常是头也不回:“看到帅哥记得告诉我。?BR>
他马上把脸凑到我眼前Q“看吧!帅哥Q?BR>
我和LG都喜Ƣ逛礼品店Q喜Ƣ可爱或者奇异的玩意?BR>
很多店都会把很可q猫狗猪挂在店堂上方做装饰。我通常一q店门就会和LG_“你跑这么高挂上面做什么。“然后LG׃在众多小动物中仔 l搜索,直到发现一只小猪挂在上面,回头怒视我:“明明是你!“(我都觉得奇怪,q么多小动物Q他Z么一定认为我是拿那只猪形容他呢Q)
此后LG和我逛街只要看到猪造型的玩P他就会和我抢着_“这个是你。“说得比我慢了就怒目相向Q好象被我一说他真的成了那只小猪,说得比我快了得意洋z,好象我就成了那只猪?BR>
一ơ我看中一只抱qQ在柜台的最上面Q我正想叫他帮我拿,却见他指着自己前面一只超可爱的小猪扑满念忉|辞:“这个是你……?BR>
我扯扯他的衣服:“把上面那只抱抱熊拿q来。?BR>
他把抱抱熊拿l我后又指着那只猪扑满最后确认似的跟我重复了一ơ:“这个是你!?BR>
……EQ…?*$Q^&&*$##
关于“猪?BR>
我喊他小猪?BR>
他颇有意见:“我哪里象猪了??BR>
敲他的头Q“笨啊,只是q嘛,你要象猪谁要你啊。?BR>
他若有所思的看我Q“我觉得你倒蛮象小猪的Q这么懒q么能吃q这么能睡。?BR>
我恶狠狠的瞪他:“你说谁Q?Q?BR>
“没有没有,不是说你……“他W容满面?BR>
刚一转nQ听见他声嘀咕:“这q头Q说真话不保险啊……?BR>
看杂志的时候看C调查,奛_子大都喜Ƣ喊自己的爱人“小猪“?BR>
大喜Q急忙拿给他看Q“是潮流哦,原来q么多MM英雄所见略同啊。?BR>
得意中…?BR>
却见他不解的看我Q“你们女孩子都这么喜Ƣ做母猪Q?BR>
K%…?*$Q^&&*$##
他加班到很晚Q回家已是困的睁不开眹{听见我喊他猪Q他在床上开始嘀咕:“还是做猪比较幸哦Q每天可以吃了睡睡了吃,什么事都不用做。?BR>
“是呀Q最后被送到屠宰场。“我拍拍他的头?BR>
“那太惨了点Q“他H然睁开眼睛十分清醒的说Q“还是做U猪比较好!?BR>
{我反应q来他已l睡得象只死猪…?BR>
p怎么说出?BR>
“你是不是不喜欢我了Q“我问他?BR>
“谁说的。“他看杂志,头也不抬?BR>
“我说的Q?BR>
“有什么证据??BR>
“那你爱我吗Q?BR>
“恩Q?BR>
“恩是什么意思??BR>
“L-O-V-E“(每个字母分开念)
“不许说鸟语。?BR>
他想了想“W-O A-I N-I“(按英语字母的发音Ql每个字母分开念)
“听不懂Q?BR>
没辙?BR>
“爱Q?BR>
“爱谁??BR>
“你Q?BR>
“把话说完整了!?BR>
沉默…?BR>
“说不说Q不说不许吃饭不许睡觉!?BR>
妥协?BR>
“我׃Q?BR>
胜利!
“这可是你自愿说的哦Q我可没g哦。?BR>
K%…?*$Q^&&*$##
卖玫瑰的女?BR>
和LGȝ知了酒吧。在门口被一卖花的小奛_拦住?BR>
“哥哥买束玫瑰送给你的x友吧。?BR>
无视?BR>
女孩不屈不挠:“哥哥,买束玫瑰送给你的x友吧Q鲜花送美奛_。?BR>
LG马上停下脚步四下张望Q“啊Q美奻I女呢?在哪Q?/SPAN>
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=
1. 猎h打猎Q看树上有两只鸟QD枪打下一只,发现是只没毛的,正纳P另一只鸟飞下来大骂猎人:?的,老子刚哄Ҏ衣服脱光Q你把Ҏ下来了。。?BR>
2.农夫要杀公鸡却逮不着Q于是抓h鸡对公鸡_再不下来让你当光儿Q公鸡:你他妈以为我dQ我下去她就成寡妇了。。?BR>
3.一ơ军事演习中Q一颗炮弹偏dq,z֎查看的士兵发玎ͼ炮弹落在农田里,C正站着你,你衣衫破满面漆黑饱含热泪地_偷颗白菜犯得着用炮弹蘪Q?Q?BR>
4.京九铁\通RQ沿U市民\边观看,车上一奛_换卫生巾后扔出窗外,q面贴一市民怸Q市民拿下后_?**Q这车就是快Q飘张纸都能把E子打来!Q!
5.有两个造假钞的不小心造出面?5元的假钞Q两人决定拿到偏q山掉,当他们拿一?5元买?元的p葫芦后Q他们哭了,农民找了他们两张7块的(7块的!!...)
6.农民赉q城Q遇到无赖,无赖Q吃饭没Q农民说Q吃了。无赖:我问的是驴。农民一听,转n寚w扇两耛_Q妈的,城里有亲戚也不说一?/SPAN>
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q?BR>
文革串联时期Q火车异常拥挤,某君停车将屁股伸出车窗外大ѝR启动时Q列车员作最后E视时大喊Q秃头叨雪茄烟的那小子,把脑袋羃回去Q?BR>
蛔虫父子在屁眼向外看,儿子问蓝色的什么,Ӟ蓝天Q儿Q那l色的呐Q父Q大地。儿Q外面的世界真美好,Z么我们要呆在屁眼里?父庄严地_因ؓq是我们的祖国!
悬崖上一只小老鼠挥舞着短短的前爪,一ơ又一ơ蟩下去Q努力学习飞,旁边母蝙蝠看着它摔的头破血,忧心的说Q它爹,要不告诉它,它不是咱亲生的!
林里三只小动物在聊天,猪_现在行用昵Uͼ你后你们叫我小猪猪。小兔说Q好Q那我就叫做兔兔。小鸡一怸高兴_我还有事Q先CQ?BR>
有个人第一ơ在集市上卖冰棍Q不好意思叫卖,旁边有一个h正高声喊Q卖冰棍Q,他只好喊道:我也是?BR>
母蛤蟆ؓw避一q求她的公蛤蟆而躲q狗z里Q公蛤蟆耐心的守在洞口,不一会从狗洞d一只耗子Q公蛤蟆伤心的说Q难怪你不爱我了Q原来狗l你买貂皮了?BR>
拉登与萨辑֧在vҎ步,忽然有记者拍照,一见镜_拉登做了V字手形,萨达姆问Q登哥,我们胜利了吗Q拉d声曰Q胜利个屁,我是告诉国Q别怺Q就剩我们俩了啊!
一个士늻习爬树,忽然他从树上掉下来,军官问他Z么掉下来Q他说有两只N跑到他裤裆里MQ这我还忍了Q可是他们进M?׃把果子分了吧Q?BR>
你蹲在v滩上拾贝壻I见一乌龟在沙坑中卵,朋友Z拍下相片Q归来你大笔一挥写道:我、王八、蛋Q?BR>
某学校学生趁下课十分钟出校门Q买2杯奶茶和2个芋头。眼见上N快响了,情急之下就对老板_老板我要两个奶头Q?BR>
老鳖调戏沌Q河蚌很生气Q张嘴咬住老鳖Q老鳖忍痛拖着沌来回爬,青蛙见了敬佩地说Q乖乖,鳖哥混大了,出入都夹着公文包了?BR>
一人给猴喂qQ猴L往屁眼塞一下然后再吃,那h不解问管理员Q答Q它d吃了个大桃,费好大劲才把核拉出来Q所以现在它吃什么都得先量量?BR>
瘸子和瞎子同骑一辆R外出。瞎子骑Q瘸子看路。突然瘸子发现前面有一条深沟,急呼Q沟沟沟Q瞎子回唱到Q噢嘞噢嘞噢?二h一h入沟中。。。?/SPAN>
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>
*
* @authorspark 2005-8-3
* @since?.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(" // 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---------------");
// }
}
最q几ơ碰到这个问题,需求是一个文件或者文件流存储到Oracle数据库里Q?BR>Oracle8提供了Blob和Clob用来存储二进制大对象数据Q可是它和Java.sql.里面的Blob
不兼容,l常DBlob字段无法锁定或者操作失败,M我ȝ了一些经?BR>大家׃n
首先建立试数据?BR> 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;
试q程Q首先将盘文gd数据库,然后再读出到盘的另一个新文g里,原码如下Q?/P>
/**
* @author U南(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();
/**
*q里是我的数据联接Bean
*大家可以用自qq接Bean
*/
byte a[]=null;//**测试文件test.docd此字节数l?BR> java.io.FileInputStream fin=null;
java.io.FileOutputStream fout=null;
oracle.jdbc.OracleResultSet ors=nullQ?/**q里rs一定要用Oracle提供?BR> oracle.jdbc.driver.OraclePreparedStatement opst=null;//**PreparedStatement?/P>
//Oracle提供?BR>
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");//**从BLOBd的信息写
//入该?Ӟ和源文gҎ试?BR> fin=new java.io.FileInputStream(f1);
fout=new java.io.FileOutputStream(f2);
int flength=(int)f1.length();//**d文g的字节长?BR> System.out.println("file length::"+flength);
a=new byte[flength];
int i=0;int itotal=0;
/**文件读入字节数l?BR> 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()初始?nbsp;
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);/**字节数l写入BLOB字段
System.out.println("j:"+j);
db1.conn.commit();
ors.close();
}
System.out.println("insert into ok");
byte b[]=null;/**保存从BLOBd的字?BR> 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取出字节数?BR> System.out.println("b length::"+b.length);
db1.conn.commit();
}
ors.close();
/**从BLOBd的字节写入文?BR> 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
{ /**关闭所有数据联?BR> stmt.close();
db1.closeConn();
}
}
}
~译q行在TomCat下调试通过?BR> 需要注意的是Blob存取的过E,一般先存入和BLOB相关的控制数据,如文件的名字Q?BR> 然后查询定位BLOB字段Q利用OracleBlob提供的方法:
public int putBytes(long pos,byte bytes[])
public byte[] getBytes(long pos,byte bytes[])
或者利?BR> public OutputStream getBinaryOutputStream() throws SQLException
public InputStream getBinaryStream() throws SQLException
因ؓ利用输入输出dq是利用到字节数l缓冲流Q所以就不D例子了?/P>