我也遇到过和楼主一样的问题,但最后没管它,它自己又好了,不知道怎么回事。我用的是weblogic。
帮楼主顶一下。
帮楼主顶一下。
解决方案 »
- 关于Struts2 <s:select headerKey="" headerValue="">的问题
- 【绝对菜鸟】关于SSH联合主键的问题,如何根据联合主键中的一个字段查找到另一个字段的值
- 今天的面试题目
- 点击submit按钮提交表单的同时如何调用一个script函数?
- 为什么Hibernate数据库连接没有释放?
- 用了ibatis,还需要用连接池吗?
- 请不要吝啬口水?!!~~~
- 关于 netscape.javascript.*;
- 求助啊!!请高手帮忙看下 Weblogic 的错误信息?郁闷了很多天了,谢谢谢谢
- 请问:在启动DEPLOYTOOL后,想打开一个WAR的文件,……
- 问一个tomcat的入门问题,希望大家帮我看一下
- webwork2中的Resource Bundle怎么配置?
if(ctx == null ) throw new Exception("Boom - No Context");
javax.sql.DataSource ds=(javax.sql.DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("select * from yuyu.test");
<Resource name="szf" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="szf">
<parameter>
<name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@192.168.70.111:1521:mydb</value> </parameter> <parameter> <name>username</name> <value>zgsx</value> </parameter> <parameter> <name>password</name> <value>zgsx</value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>10</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams>
ps = conn.prepareStatement(sSql);
ps.setString(1, test_id);
ps.executeUpdate();
ps.close();
ps = null;String selectSql = "SELECT CLOBCOL FROM TEST_CLOB WHERE TEST_ID=? FOR UPDATE";
ps = conn.prepareStatement(selectSql);
ps.setString(1,test_id);
rs = ps.executeQuery();
Clob clob = null;
if (rs.next()) {
//oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBCOL");
clob = (Clob) rs.getClob("CLOBCOL"); Writer wr = ((oracle.sql.CLOB)clob).getCharacterOutputStream();
wr.write("aaa");
wr.flush();
wr.close();
}用jdbc连没问题,一用tomcat连接池,就出java.lang.ClassCastException: oracle.sql.CLOB错误
<!-- properties -->
<property name="dialect">net.sf.hibernate.dialect.OracleDialect</property>
<property name="show_sql">false</property>
<property name="connection.datasource">java:comp/env/sdsbbDS</property>
<property name="hibernate.jdbc.batch_size">0</property>
<!-- mapping files -->
</session-factory>
2 import java.io.*;
3 import oracle.sql.*;
4 public class WriteBlob {
...}
5
6 public static void main(String[] args) {
...}
7
8 try {
...}
9 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
10 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","fankai","fankai");
11 conn.setAutoCommit(false);
12
13 BLOB blob = null;
14
15 PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,content) values(?,empty_blob())");
16 pstmt.setString(1,"fankai");
17 pstmt.executeUpdate();
18 pstmt.close();
19
20 pstmt = conn.prepareStatement("select content from javatest where name= ? for update");
21 pstmt.setString(1,"fankai");
22 ResultSet rset = pstmt.executeQuery();
23 if (rset.next()) blob = (BLOB) rset.getBlob(1);
24
25 String fileName = "oraclejdbc.jar";
26 File f = new File(fileName);
27 FileInputStream fin = new FileInputStream(f);
28 System.out.println("file size = " + fin.available());
29
30 pstmt = conn.prepareStatement("update javatest set content=? where name=?");
31
32 OutputStream out = blob.getBinaryOutputStream();
33
34 int count = -1, total = 0;
35 byte[] data = new byte[(int)fin.available()];
36 fin.read(data);
37 out.write(data);
38 /*
39 byte[] data = new byte[blob.getBufferSize()]; 另一种实现方法,节省内存
40 while ((count = fin.read(data)) != -1) {
41 total += count;
42 out.write(data, 0, count);
43 }
44 */
45
46 fin.close();
47 out.close();
48
49 pstmt.setBlob(1,blob);
50 pstmt.setString(2,"fankai");
51
52 pstmt.executeUpdate();
53 pstmt.close();
54
55 conn.commit();
56 conn.close();
57 } catch (SQLException e) {
58 System.err.println(e.getMessage());
59 e.printStackTrace();
60 } catch (IOException e) {
61 System.err.println(e.getMessage());
62 }
63 }
64
65 }
仔细看上例,分三步: 1、插入空blob
into javatest(name,content) values(?,empty_blob()); 2、获得blob的cursor
select content from javatest where name= ? for update; 注意!!!必须加for update,这将锁定该行,直至该行被修改完毕,保证不产生并发冲突。 3、update javatest set content=? where name= 用cursor往数据库写数据 这里面还有一点要提醒大家: JDK1.3带的JDBC2.0规范是不完善的,只有读Blob的接口,而没有写Blob的接口,JDK1.4带的JDBC3.0加入了写Blob的接口。你可以使用JDBC3.0的接口,也可以直接使用Oracle的JDBC的API,上例中使用了Oracle的JDBC的API。 另外要注意的是: java.sql.Blob
oracle.sql.BLOB 注意看blob的大小写,是不一样的。写程序的时候不要搞混了。
你的连接池里面要有一个接受数据容器的temp的文件夹
在那个要放在哪个文件夹下啊我是在TOMCAT的控制台下配的.环境是window2003+tomcat5.0.28+jdk1.42下面是我的源代高手帮忙,谢了
package cn.huang;
import oracle.sql.*;
import java.sql.*;
import oracle.jdbc.OraclePreparedStatement;
import oracle.sql.DATE;
import oracle.jdbc.*;
import java.io.*;
import java.util.*;
import javax.naming.*;
import javax.sql.DataSource;public class Intimage{
private String error="";//用来接收出错信息
private Connection conn=null;//连接对象
oracle.jdbc.OracleResultSet rs=null;//oracle专用记录集对象
oracle.jdbc.driver.OraclePreparedStatement stmt=null;//oracle专用处理带参的sql对象
private Statement st=null;
public Intimage(){//构造函数产生数据库连接
getconn();
}
public String getError(){//返回出错信息
return this.error;
}
private void getconn(){
try{
/* String user="testuser";
String password="password";
String url="jdbc:oracle:thin:@192.168.0.60:1521:ORACLEDB";
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
conn=DriverManager.getConnection(url,user,password);*/
//jdbc连接本在这里没有用到
InitialContext ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/myoracle");
conn = ds.getConnection();
//以上是连接池同时产生连接对象
st=conn.createStatement();
conn.setAutoCommit(false);
}catch(Exception e){
conn=null;
error=String.valueOf(e);
}
}
/*
***参数说明 fin 二进制图片流
***参数说明 path 原始文件名
***参数说明 len 文件大小
*/
public boolean opentable(InputStream fin,String path,String classid,String id,String title,int len,int fty){
try{
byte a[]=null;
a=new byte[len];
int i=0;int itotal=0;
for (;itotal<len;itotal=i+itotal ){
i=fin.read(a,itotal,len-itotal);
}
fin.close();
String filename=path;
int ftype=fty;
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyyMMddHHmmss");
java.util.Date currentTime_1 = new java.util.Date();
String fileid=id+formatter.format(currentTime_1);
String sql="insert into vs_userupload (classid,content,uptime,title,fileid,fsize,ftype,userid,filename) values( ?,empty_blob(),?,?,?,?,?,?,?)";
stmt=(oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(sql);
stmt.setString(1,classid);
stmt.setDate(2,new java.sql.Date(System.currentTimeMillis()));
if(title.equals(null)||title=="")//判断传进来的参数是否为空值
stmt.setNull(3,java.sql.Types.VARCHAR);
else
stmt.setString(3,title);
stmt.setString(4,fileid);
stmt.setInt(5,len);
stmt.setInt(6,ftype);
stmt.setLong(7, Long.parseLong(id));
stmt.setString(8,filename);//以上为参数传入
//error=classid+String.valueOf(new java.sql.Date(System.currentTimeMillis()))+title+filename+fileid+String.valueOf(len)+String.valueOf(ftype)+"路径"+filename+String.valueOf(userid);
stmt.executeUpdate();//执行sql语句
stmt.clearParameters();
sql="update vs_userupload set uptime=sysdate where fileid='"+fileid+"'";
int h=st.executeUpdate(sql);
if (ftype==2){
sql="update vs_class set pic_size="+fsize+" where classid='"+classid+"'";
h=st.executeUpdate(sql);
}
sql="Select content from vs_userupload where fileid=? for update";
stmt=(oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(sql);
stmt.setString(1,fileid);
rs=(oracle.jdbc.OracleResultSet)stmt.executeQuery();
if(rs.next());
{
BLOB blob=rs.getBLOB(1);
int j=((oracle.sql.BLOB)blob).putBytes(1,a);//将字节数组写入BLOB字段
conn.commit();
rs.close();
return true;
}
}catch(Exception e){
error=error+String.valueOf(e);
conn.rollback();
return false;
}finally{
try{
if(!conn.isClosed())
conn.close();
}catch(Exception x){
}
}
}
}
代码有点乱,我改了N次了还是不行代码也越来越乱了