关于java和oracle的问题,long raw字段的处理(100分)

  • 主题发起人 主题发起人 babysheep
  • 开始时间 开始时间
B

babysheep

Unregistered / Unconfirmed
GUEST, unregistred user!
关于java和oracle的问题,long raw字段的处理
我用的是jsp,数据库是oracle8i,遇到一个问题不知道该如何处理.
我的库表中有一个字段设计成long raw类型,这是一个二进制类型.
请问在jsp中如何写语句把页面该部分的内容存入库表中呢?该如何转成二进制流文件存入呢?
 
这个应该不难!你参考下面的代码进行修改就可以了!其实就是一个输入流的问题
File file = new File("1.jpg");
//打开一个文件输入流
FileInputStream fis = new FileInputStream(file);
//准备插入语句
PreparedStatement ps = conn.prepareStatement("INSERT INTO images(filename,img) VALUES (?, ?)");
//写参数值
ps.setString(1, file.getName());
ps.setBinaryStream(2, fis, file.length());
//提交更新
ps.executeUpdate();
//关闭流,一定要注意这里要关闭
ps.close();
fis.close();
 
上面的代码没有解决大的jpg文件上传的问题。
ps.setBinaryStream(2, fis, file.length());
最后一个参数是整数类型,所以限制了文件上传d大小
 
import java.io.*;
import java.util.*;
import java.sql.*;
import oracle.jdbc.driver.*;
import java.text.*;
以下为读取
public class test
{
public static void main(String args[]) throws java.io.IOException,java.sql.SQLException
{
int bytesRead = 0;
int byteSum = 0;
byte[] buffer = new byte[8 * 1924];
FileOutputStream fis2 = new FileOutputStream("c://xxxx.jpg");
PreparedStatement ps2 = conn.prepareStatement("select data from bin_data");
ResultSet rs = ps2.executeQuery();
if (rs != null)
{
while(rs.next())
{
InputStream is = rs.getBinaryStream(1);
while ((bytesRead = is.read(buffer)) != -1)
{
byteSum += bytesRead;
fis2.write(buffer, 0, bytesRead);
}
fis2.close( );
}
rs.close( );
}
ps2.close( );
}
catch(Exception e)
{
System.out.println("errror :"+e.toString() );
e.printStackTrace();
}
}
}
 
>>GisErp
这种方法存入的文件已经够大了!是2G啊,如果你的文件再大会严重影响数据库的使用效率。并且在实际使用过程中怎么会出现这么大的文件呀?光上传这么个大文件就的2个小时。
 
本人才疏学浅,现在给我的例子都试了一下,除了打开文件,如果我想把页面上的text框的内容转成二进制流,该怎么转呢?
 
文本框里的东西为什么要当流来存呀 有什么意义呀
 
第一步,把text框中的内容取为String
String text=request.getParameter("txtContent");
第二步,将String对象转换为byte[],
byte[] buff= text.getBytes();//注意此处可能要指定编码格式
第三步,将byte[]读入倒ByteArrayInputStream中
ByteArrayInputStream in =new ByteArrayInputStream(buff);
剩下的步骤就和上面的差不多了!
 
接受答案了.
 
后退
顶部