oracle上传blob
1. oracle BLOB上传文件
1.首先你需要保证插入的字段是一个BLOB空值
如果是存在的请初始化成 empty_blob();
update yourtablename t set t.yourcol = empty_blob()
where xxx = xxx ;
如果是不存在的请
insert 的时候插入一个empty_blob()空值。
2.然后查询出这条FOR UPDATE
select t.yourcol
into b_content
from yourtablename t
where XXX = XXX for update;
3.引用dbms_lob编辑大字段,c_content是你的文件内容
DBMS_LOB.OPEN(b_content, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.WRITE(b_content, n_length, 1, UTL_RAW.cast_to_raw(c_content));
DBMS_LOB.CLOSE(b_content);
4.最后
commit;
2. oracle 如何将图片批量插入或者上传到数据库里(blob类型)
准备用什么语言写?可以用C写的,OCI编程。DEMO中有的。
3. oracle数据库中我采用blob 字段类型
blob 是存储大数据处理的,一般语句网上都有,存储blob一般采用的是上传的方式,比如说,一条记录要插入数据库,最后一个字段是blob型的,插入的时候必需注意的是(创建一个空的blob空间),如果不这样做的话,基本上很难实现存储。
4. 如何往oracle中的blob字段写入照片数据
往oracle里面类型为blob写入时,必须先插入一个empty_blob,实行update……
具体java里面写入blob的代码如下:
public class applyPhotoBLOB {
final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection connSDC = null;
Connection conn = null;
String sConnStr = "jdbc:oracle:thin:@127 0.0 1 1521:sle";
String sConnStrSDC = "jdbc:oracle:thin:@10 10 8.12:1521:rac2";
String sDBUid = "test";
String sDBPwd = "test";
String sDBUidSDC = "sdcmanager";
String sDBPwdSdc = "sdcmanager_888";
try
{
applyPhotoBLOB apply = new applyPhotoBLOB();
connSDC = apply.getConn(sConnStrSDC,sDBUidSDC,sDBPwdSdc);
if(connSDC!=null)
{
apply.testBOLB(connSDC);
}
System.out.println("处理完成!");
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
finally
{
try
{
if(conn!=null) conn.close();
if(connSDC!=null) connSDC.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
public void testBOLB(Connection conn) throws Exception
{
String strsql = "Insert Into BKS_XSZPXX(XH,ZPLXM,ZP) Values('3071801040','1',empty_blob())";
updateTable1(strSQL,conn);
conn.setAutoCommit(false);
strSQL = "Select ZP from BKS_XSZPXX where XH='3071801040' For Update";
Statement stmt = null;
ResultSet rs = null;
stmt = conn.createStatement();
rs = stmt.executeQuery(strSQL);
rs.next();
BLOB blob = (BLOB) rs.getBlob("ZP");
OutputStream os = blob.getBinaryOutputStream();// 建立输出流
BufferedOutputStream output = new BufferedOutputStream(os);
BufferedInputStream input = new BufferedInputStream(new File("F:/3071801040.jpg").toURL().openStream());
byte[] buff = new byte[2048000]; //用做文件写入的缓冲
int bytesRead;
while(-1 != (bytesRead = input.read(buff, 0, buff.length)))
{
output.write(buff, 0, bytesRead);
//System.out.println(bytesRead);
}
output.close();
input.close();
rs.close();
conn.commit();
conn.setAutoCommit(true);
stmt.close();
}
private int updateTable1(String strSQL,Connection conn) throws Exception
{
PreparedStatement stmt = null;
int result = 0;
try
{
stmt = conn.prepareStatement(strSQL);
result = stmt.executeUpdate();
}
catch(Exception e)
{
throw new Exception(e.getMessage());
}
finally
{
stmt.close();
}
return result ;
}
public Connection getConn(String StrConn,String uid,String pwd) throws Exception
{
Connection conn = null;
try
{
Class.forName(sDBDriver);
conn = DriverManager.getConnection(StrConn,uid,pwd);
}
catch (Exception e)
{
throw new Exception(e.getMessage());
}
return conn;
}
}
另外:放入business里面的时候,其zp最好定义为InputStream
转载,仅供参考。
5. 怎么在oracle中存放blob类型
BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。
6. 如何把 上传的文件 转成二进制存入oracle中的BLOB字段上,恳请高手们指导一下
更新数据的时候,写insert语句的时候,不更新blob字段,blob字段对应的数据用 empty_blob() 代替就行。
(注意:在执行上面那个 sql 之前,一定要把 connection 设置成不自动提交: conn.setAutoCommit(false); )
最后单独出来blob字段:
//把 blob 字段取出来
String sql = "select ANNEX from market_info_collect_t where info_id='"
+ infoId + "' for update ";
Statement stt=null;
stt = conn.createStatement();
rs = stt.executeQuery(sql);
if (rs.next()) {
blob = (oracle.sql.BLOB) rs.getBlob("ANNEX");
outStream = blob.getBinaryOutputStream();
instream = myFile.getContentStream();
byte[] data = new byte[instream.available()];
instream.read(data);
outStream.write(data, 0, data.length);
}
instream.close();
outStream.flush();
outStream.close();
上面这段是我以前写过的代码中的一部分,你看一下,希望对你能有帮助。。。
7. 给oracle中的存储过程传递一个Blob类型的字段,java代码怎么写
现在 在看到你的问题 。 我把代码贴给你
条件准备
Oracle数据库中有表如下
CREATE TABLE BOOK(
ID NUMBER PRIMARY KEY,
F BLOB
);
ConnectionManager类不解释。
package org.db;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 此类掩饰java操作Oracle BLOB类型
* @author wanghao
*
*/
public class SaveFile {
private final static String PSQL = "insert into BOOK(ID,F) " + "values(?,EMPTY_BLOB())";
private final static String SSQL = "select F from BOOK where ID = ? for update";
private final static String USQL = "update BOOK set F = ? where ID = ?";
/**
* 将文件存入数据库
* @param file 要存入数据库的文件
* @param id 为了掩饰方便,手动输入 ID
* @throws Exception
*/
public void save(File file,int id) throws Exception {
Connection conn = ConnectionManager.getConnection();
conn.setAutoCommit(false);
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
try {
pstmt = conn.prepareStatement(PSQL);
pstmt2 = conn.prepareStatement(USQL);
pstmt.setInt(1, id);
try {
pstmt.executeUpdate();// 在数据库中插入空对象
} catch (SQLException ex) {
ex.printStackTrace();
}
pstmt = conn.prepareStatement(SSQL);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();// 查询新插入的记录
oracle.sql.BLOB pc = null;
while (rs.next()) {
pc = (oracle.sql.BLOB) rs.getBlob(1);
}
byte[] data = file2Byte(file);
pc.putBytes(1, data);
pstmt2.setBlob(1, pc);
pstmt2.setInt(2, id);
pstmt2.executeUpdate();
conn.commit();
} finally {
try {
pstmt.close();
pstmt2.close();
} catch (Exception EE) {
}
}
}
/**
* 将文件转成byte数组
* @param file 被转成 byte数组的file
* @return
* @throws Exception
*/
public byte[] file2Byte(File file) throws Exception{
FileInputStream fin = new FileInputStream(file);
byte[] b = new byte[(int) file.length()];
fin.read(b);
fin.close();
return b;
}
/**
* 从数据库中将文件写入到本地硬盘
* @param id
* @throws Exception
*/
public void readFile(int id) throws Exception{
byte[] b = new byte[1024];
Connection conn = ConnectionManager.getConnection();
PreparedStatement pstmt = null;
String sql = "select F from BOOK where ID = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();// 查询新插入的记录
oracle.sql.BLOB pc = null;
while (rs.next()) {
pc = (oracle.sql.BLOB) rs.getBlob(1);
}
InputStream in = pc.getBinaryStream();
OutputStream os = new FileOutputStream(new File("T:\\io\\java_temp.pdf"));
int len = 0;
while((len=in.read(b))!=-1){
os.write(b,0,len);
}
os.flush();
os.close();
in.close();
rs.close();
pstmt.close();
conn.close();
}
public static void main(String[] args) throws Exception{
SaveFile sf = new SaveFile();
// File file = new File("T:\\io\\java.pdf");
int id = 2;
// sf.save(file, id);
sf.readFile(id);
}
}
这是我根据网络上的例子改写的,比较清晰,希望对你有帮助!