JAVA语言写文件存取,存到ORACLE数据库里怎么写?

JAVA语言写文件存取,存到ORACLE数据库里怎么写?,第1张

package com.jspdev.ch13

import com.jspdev.util.*

import java.sql.*

import javax.sql.*

import java.io.*

import oracle.jdbc.driver.OracleResultSet

import oracle.sql.BLOB

public class BlobBean

{

Connection conn

/**

*构造方法,创建Connection对象,并且在数据库中添加一个表。

*/

public BlobBean()throws Exception

{

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())

conn = DriverManager.getConnection("jdbc:oracle:thin:system@127.0.0.1:1521:hellking", "system", "manager")

// conn.createStatement().execute("create table blobtable(blobvalue blob)")

}

/**

*写入Blob数据到数据库

*/

public void addBlob(String fileName)throws Exception

{

conn.setAutoCommit(false)

Statement stmt = conn.createStatement()

stmt.execute("insert into blobtable values (empty_blob())")

ResultSet rset = stmt.executeQuery("SELECT blobvalue FROM blobtable FOR UPDATE")

BLOB blob = null

while (rset.next()) {

blob = ((OracleResultSet) rset).getBLOB(1)

System.out.println(blob.length())

}

File binaryFile = new File(fileName)

System.out.println(fileName+"'s length = " + binaryFile.length())

FileInputStream instream = new FileInputStream(binaryFile)

OutputStream outstream = blob.getBinaryOutputStream()

int chunk = blob.getChunkSize()

System.out.println("chunk size = " + chunk)

byte[] buffer = new byte[chunk]

int length = -1

while ((length = instream.read(buffer)) != -1)

outstream.write(buffer, 0, length)

instream.close()

outstream.close()

conn.commit()

}

参考代码如下:

public class InsertBlobData {

Connection con = null

/**

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

InsertBlobData data = new InsertBlobData()

data.insertBlogInfo("002jpg", "sdsdfdf", "2007-02-12", "002.jpg")

}

public void insertBlogInfo(String jmzh, String xm, String smsj,

String fileName) throws Exception {

// try {

con = ConnectionPoliceFactory.getFactory().getConnection()

// } catch (ClassNotFoundException e) {

// // TODO Auto-generated catch block

// e.printStackTrace()

// }

// 处理事务

boolean defaultCommit = con.getAutoCommit()

con.setAutoCommit(false)

Statement st = con.createStatement()

// 插入一个空对象

st.executeUpdate("insert into ksren_txxx(jmzh,xm,smsj,txsj) values('"

+ jmzh + "','" + xm + "',to_date('" + smsj

+ "','yyyy-mm-dd'),empty_blob())")

// 用for update方式锁定数据行

ResultSet rs = st

.executeQuery("select txsj from ksren_txxx where jmzh='"

+ jmzh + "' and xm='" + xm + "' for update")

if (rs.next()) {

// 得到java.sql.Blob对象,然后Cast为oracle.sql.BLOB

oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1)

// 到数据库的输出流

OutputStream outStream = blob.getBinaryOutputStream()

// 这里用一个文件模拟输入流

InputStream fin = new FileInputStream(new File(fileName))

// 将输入流写到输出流

byte[] b = new byte[blob.getBufferSize()]

int len = 0

while ((len = fin.read(b)) != -1) {

outStream.write(b, 0, len)

// blob.putBytes(1,b)

}

// 依次关闭(注意顺序)

fin.close()

outStream.flush()

outStream.close()

con.commit()

/* 恢复原提交状态 */

con.setAutoCommit(defaultCommit)

con.close()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6704585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存