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()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)