当前位置:首页 » 文件管理 » oracle上传blob

oracle上传blob

发布时间: 2022-07-26 12:23:06

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);
}
}
这是我根据网络上的例子改写的,比较清晰,希望对你有帮助!

热点内容
服务器和路由器属于什么设备 发布:2025-04-03 12:25:43 浏览:873
新手学java7编程 发布:2025-04-03 12:17:27 浏览:871
某宝算法 发布:2025-04-03 12:12:26 浏览:284
脚本模拟鼠标点击 发布:2025-04-03 12:06:19 浏览:317
老安卓接口是什么 发布:2025-04-03 11:57:31 浏览:762
nginx资源服务器搭建 发布:2025-04-03 11:44:52 浏览:406
安卓开发和嵌入式哪个难 发布:2025-04-03 11:25:09 浏览:318
ftp链接本地虚拟机 发布:2025-04-03 11:25:02 浏览:793
手机扣扣怎么找回密码 发布:2025-04-03 11:24:17 浏览:223
安卓平板上做记事本哪个好用 发布:2025-04-03 11:21:27 浏览:865