mysql - 文件存进数据库
本文介绍了mysql - 文件存进数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
例如word TXT excal 图片等,这些程序中经常会用到的文件,怎么把它们存到数据库中;
解决方案
第一种
Python
如果你是用类似sqlalchemy这样的orm数据库
def upload_blob(file_data):
fb = StringIO.StringIO()
file_data.save(fb)
filename = file_data.filename
c_blob_id = None
if filename:
blob = T_Blob()
blob.c_filename = filename
blob.c_blob = fb.getvalue()
db.session.add(blob)
db.session.flush()
c_blob_id = blob.id
return c_blob_id
调用
form = AddFileForm()
if form.validate_on_submit():
user = g.user
c_blob_id = models.upload_blob(form.c_fj.data)
第二种 java jdbc方式插入Oracle
import java.sql.*;
import java.io.*;
import oracle.sql.*;
public class IntoOracle {
public static void main(String[] args) {
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = OracleFactory.getOracle();
conn.setAutoCommit(false);
BLOB blob = null;
PreparedStatement pstmt = conn.prepareStatement("insert into blobtest(id,b) values(?,empty_blob())");
pstmt.setString(1,"50");
pstmt.executeUpdate();
pstmt.close();
pstmt = conn.prepareStatement("select b from blobtest where id= ? for update");
pstmt.setString(1,"50");
ResultSet rset = pstmt.executeQuery();
if (rset.next()) blob = (BLOB) rset.getBlob(1);
String fileName = "d:\\bjx.jpg";
File f = new File(fileName);
FileInputStream fin = new FileInputStream(f);
System.out.println("file size = " + fin.available());
pstmt = conn.prepareStatement("update blobtest set b=? where id=?");
OutputStream ut = blob.getBinaryOutputStream();
int count = -1, total = 0;
byte[] data = new byte[(int)fin.available()];
fin.read(data);
out.write(data);
fin.close();
out.close();
pstmt.setBlob(1,blob);
pstmt.setString(2,"50");
pstmt.executeUpdate();
pstmt.close();
conn.commit();
conn.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println(e.getMessage());
} catch (Exception e){
e.printStackTrace();
}
}
}
以上
这篇关于mysql - 文件存进数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文