当前位置:  技术问答>java相关

如何可以将一个大文件存入数据库?

    来源: 互联网  发布时间:2015-09-01

    本文导语:  如何可以将一个大文件存入数据库? 有没有具体可参考的代码? | 给你一个例子: 插入: /* * This class is used to INSERT data into a BLOB datatype column in an Oracle8i database.  * This class has...

如何可以将一个大文件存入数据库?

有没有具体可参考的代码?

|
给你一个例子:

插入:
/*
* This class is used to INSERT data into a BLOB datatype column in an Oracle8i database. 
* This class has a method called insertBlobData which takes three input parameters:
* 1) The name of the file to be added to the database
* 2) The description of the file to be added to the database
* 3) The physical path to the file, to be added to the database
* For further suggestions/improvements/help please feel free to contact me at mjauhar@usa.net
*/

/*
* Import the required Java classes
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
/*
* Import the required Oracle classes
*/
import oracle.jdbc.driver.OracleDriver;
import oracle.jdbc.OracleResultSet;
import oracle.sql.BLOB;

public class InsertBlob {

public InsertBlob() {
}
public static void main(String[] args) {
InsertBlob insertBlob1 = new InsertBlob();
if(args.length != 3) {
System.out.println("Usage: java InsertBlob FileName FileDescription FilePath");
System.out.println("Example: java InsertBlob myImage.jpg "File description text comes here." "C:\\MyFolder\\myImage.jpg"");
}
else {
try {
/*
* The variable output will return one of the following values:
* 0 ----- Indicates success.
* 1 ----- Indicates that the SELECT statement with the FOR UPDATE clause could not find a record.
* 2 ----- Indicates that file with the same name and description already exists in the database.
* 3 ----- Indicates a SQLException has occurred.
* 4 ----- Indicates a FileNotException has occurred.
* 5 ----- Indicates a some other Exception has occurred.
* 6 ----- Indicates an error has occurred in the finally block.
*/
final int output = insertBlob1.insertBlobData(args[0], args[1], args[2]);
System.out.println(output);
}
catch(Exception e) {
e.printStackTrace();
}
finally {
insertBlob1 = null;
}
}
}

private static int insertBlobData(final String fileName, final String fileDescription, final String filePath) {
/*
*  Initialize the necessary parameters
*/
int returnValue = 0;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
String query = null;
try {
 /* 
* Register the Oracle driver 
*/
DriverManager.registerDriver(new OracleDriver());
/*
* Establish a connection to the Oracle database. I have used the Oracle Thin driver.
* jdbc:oracle:thin@host:port:sid, "user name", "password"
*/
conn = DriverManager.getConnection("jdbc:oracle:thin:@visions-bwckzjd:1521:o8i", "internal", "oracle");
/*
* Set auto commit to false, it helps to speed up things, by default JDBC's auto commit feature is on.
* This means that each SQL statement is commited as it is executed.
*/
conn.setAutoCommit(false);
stmt = conn.createStatement();
/*
* First execute a query to see if a file with the same name and description already exists.
*/
query = "SELECT FileId FROM tblBlobDemo WHERE FileName='" + fileName + "' AND FileDescription='" + fileDescription + "' ORDER BY FileId DESC";
rs = stmt.executeQuery(query);
if(!rs.next()) {
/*
* Insert all the data, for the BLOB column we use the function empty_blob(), which creates a locator for the BLOB datatype.
* A locator is an object that ponts to the actual location of the BLOB data in the database. A locator is essential to manipulate BLOB data. 
*/
query = "INSERT INTO tblBlobDemo VALUES(seqFileId.NextVal,  sysdate, '" + fileName + "', empty_blob(), '" + fileDescription + "')";
stmt.execute(query);
/*
* Once the locator has been inserted, we retrieve the locator by executing a SELECT statement with the FOR UPDATE clause to manually lock the row.
*/
query =  "SELECT FileData FROM tblBlobDemo WHERE FileName='" + fileName + "' AND FileDescription='" + fileDescription + 
 "' ORDER BY FileId DESC FOR UPDATE";
rs = stmt.executeQuery(query);
if(rs.next()) {
/*
* Once a locator has been retrieved we can use it to insert the binary data into the database.
*/
BLOB blob = ((OracleResultSet)rs).getBLOB("FileData");
os = blob.getBinaryOutputStream();
final File f = new File(filePath);
is = new FileInputStream(f);
final byte[] buffer = new byte[blob.getBufferSize()];
int bytesRead = 0;
while((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
blob = null;
}
else {
returnValue = 1;
}
}
else {
returnValue = 2;
}
}
catch(SQLException e) {
returnValue = 3;
e.printStackTrace();
}
catch(FileNotFoundException e) {
returnValue = 4;
e.printStackTrace();
}
catch(Exception e) {
returnValue = 5;
e.printStackTrace();
}
finally {
/*
* Clean up.
*/
try {
if(is != null) {
is.close();
}
if(os != null) {
os.flush();
os.close();
}
if(stmt != null) {
stmt.close();
}
if(rs != null) {
rs.close();
}
if(conn != null) {
conn.commit();
conn.close();
}
is = null;
os = null;
stmt = null;
rs = null;
conn = null;
query = null;
}
catch(Exception e) {
returnValue = 6;
e.printStackTrace();
}
}
return returnValue;
}
}

|
更新:

/*
* This class is used to UPDATE a BLOB datatype in an Oracle8i database. 
* This class has a method called updateBlobData which takes four input parameters:
* 1) The file-id of the file to be updated in the database
* 2) The name of the new file to be added to the database
* 3) The description of the new file to be added to the database
* 4) The physical path to the new file, to be added to the database
* For further suggestions/improvements/help please feel free to contact me at mjauhar@usa.net
*/

/*
* Import the required Java classes
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
/*
* Import the required Oracle classes
*/
import oracle.jdbc.driver.OracleDriver;
import oracle.jdbc.OracleResultSet;
import oracle.sql.BLOB;

public class UpdateBlob {

public UpdateBlob() {
}
public static void main(String[] args) {
UpdateBlob updateBlob1 = new UpdateBlob();
if(args.length != 4) {
System.out.println("Usage: java UpdateBlob FileId NewFileName NewFileDescription NewFilePath");
System.out.println("Example: java UpdateBlob 1 myNewImage.jpg "New file description text comes here." "C:\\MyFolder\\myNewImage.jpg"");
}
else {
try {
/*
* The variable output will return one of the following values:
* 0 ----- Indicates success.
* 1 ----- Indicates that the SELECT statement with the FOR UPDATE clause could not find a record.
* 2 ----- Indicates that the FileName and FileDescription columns could not be updated.
* 3 ----- Indicates a SQLException has occurred.
* 4 ----- Indicates a FileNotException has occurred.
* 5 ----- Indicates a some other Exception has occurred.
* 6 ----- Indicates an error has occurred in the finally block.
*/
final int output = updateBlob1.updateBlobData(args[0], args[1], args[2], args[3]);
System.out.println(output);
}
catch(Exception e) {
e.printStackTrace();
}
finally {
updateBlob1 = null;
}
}
}

private static int updateBlobData(final String fileId, final String fileName, final String fileDescription, final String filePath) {
/*
*  Initialize the necessary parameters
*/
int returnValue = 0;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
String query = null;
try {
 /* 
* Register the Oracle driver 
*/
DriverManager.registerDriver(new OracleDriver());
/*
* Establish a connection to the Oracle database. I have used the Oracle Thin driver.
* jdbc:oracle:thin@host:port:sid, "user name", "password"
*/
conn = DriverManager.getConnection("jdbc:oracle:thin:@visions-bwckzjd:1521:o8i", "internal", "oracle");
/*
* Set auto commit to false, it helps to speed up things, by default JDBC's auto commit feature is on.
* This means that each SQL statement is commited as it is executed.
*/
conn.setAutoCommit(false);
stmt = conn.createStatement();
/*
* First execute a query to update the FileName, FileDescription and the FileData columns.
*/
query = "UPDATE tblBlobDemo SET FileName='" + fileName + "', FileDescription='" + fileDescription + "', FileData=empty_blob() WHERE FileId=" + fileId;
final int numberOfRecordsUpdated = stmt.executeUpdate(query);
if(numberOfRecordsUpdated == 1) {
/*
* Updating a BLOB datatype in a database involves replacing an entire BLOB and not modifying it in place.
* Since a locator has already been inserted for the BLOB datatype using the InsertBlob class.
* We retrieve the locator by executing a SELECT statement with the FOR UPDATE clause to manually lock the row.
*/
query =  "SELECT FileData FROM tblBlobDemo WHERE FileId="  + fileId + " FOR UPDATE";
rs = stmt.executeQuery(query);
if(rs.next()) {
/*
* Once a locator has been retrieved we can use it to insert the binary data into the database.
*/
BLOB blob = ((OracleResultSet)rs).getBLOB("FileData");
os = blob.getBinaryOutputStream();
final File f = new File(filePath);
is = new FileInputStream(f);
final byte[] buffer = new byte[blob.getBufferSize()];
int bytesRead = 0;
while((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
blob = null;
}
else {
returnValue = 1;
}
}
else {
returnValue = 2;
}
}
catch(SQLException e) {
returnValue = 3;
e.printStackTrace();
}
catch(FileNotFoundException e) {
returnValue = 4;
e.printStackTrace();
}
catch(Exception e) {
returnValue = 5;
e.printStackTrace();
}
finally {
/*
* Clean up.
*/
try {
if(is != null) {
is.close();
}
if(os != null) {
os.flush();
os.close();
}
if(stmt != null) {
stmt.close();
}
if(rs != null) {
rs.close();
}
if(conn != null) {
conn.commit();
conn.close();
}
is = null;
os = null;
stmt = null;
rs = null;
conn = null;
query = null;
}
catch(Exception e) {
returnValue = 6;
e.printStackTrace();
}
}
return returnValue;
}
}

|
取出:

/*
* This class is used to select a BLOB datatype from an Oracle8i database onto the file system. 
* This class has a method called selectBlobData which takes two input parameters:
* 1) The file-id of the file to be extracted from the database
* 2) The physical path to which the file must be extracted. 
* For further suggestions/improvements/help please feel free to contact me at mjauhar@usa.net
*/

/*
* Import the required Java classes
*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
/*
* Import the required Oracle classes
*/
import oracle.jdbc.driver.OracleDriver;
import oracle.jdbc.OracleResultSet;
import oracle.sql.BLOB;

public class SelectBlob {

public SelectBlob() {
}

public static void main(String[] args) {
SelectBlob selectBlob1 = new SelectBlob();
if(args.length != 2) {
System.out.println("Usage: java SelectBlob FileId FilePath");
System.out.println("Example: java SelectBlob 1 "C:\\MyFolder\\"");
}
else {
try {
/*
* The variable output will return one of the following values:
* 0 ----- Indicates success.
* 1 ----- Indicates that the SELECT statement could not find a record.
* 2 ----- Indicates a SQLException has occurred.
* 3 ----- Indicates a FileNotException has occurred.
* 4 ----- Indicates a some other Exception has occurred.
* 5 ----- Indicates an error has occurred in the finally block.
*/
final int output = selectBlob1.selectBlobData(args[0], args[1]);
System.out.println(output);
}
catch(Exception e) {
e.printStackTrace();
}
finally {
selectBlob1 = null;
}
}
}

private static int selectBlobData(final String fileId, final String path) {
/*
*  Initialize the necessary parameters
*/
int returnValue = 0;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
BLOB blob = null;
try {
final String query = "SELECT FileName, FileData FROM tblBlobDemo WHERE FileId = " + fileId;
 /* 
* Register the Oracle driver 
*/
DriverManager.registerDriver(new OracleDriver());
/*
* Establish a connection to the Oracle database. I have used the Oracle Thin driver.
* jdbc:oracle:thin@host:port:sid, "user name", "password"
*/
conn = DriverManager.getConnection("jdbc:oracle:thin:@visions-bwckzjd:1521:o8i", "internal", "oracle");
/*
* Set auto commit to false, it helps to speed up things, by default JDBC's auto commit feature is on.
* This means that each SQL statement is commited as it is executed.
*/
conn.setAutoCommit(false);
stmt = conn.createStatement();
/*
* Execute the SELECT statement
*/
rs = stmt.executeQuery(query);
if(rs.next()) {
/*
* Extract the BLOB data to a file on the local file system.
*/
blob = ((OracleResultSet)rs).getBLOB("FileData");
is = blob.getBinaryStream();
final String fileName = rs.getString("FileName");
final String filePath = path + fileName;
os = new FileOutputStream(filePath);
final int bufferSize = blob.getBufferSize();
final byte[] buffer = new byte[bufferSize];
int bytesRead = 0;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
}
else {
returnValue = 1;
}
}
catch(SQLException e) {
returnValue = 2;
e.printStackTrace();
}
catch(FileNotFoundException e) {
returnValue = 3;
e.printStackTrace();
}
catch(Exception e) {
returnValue = 4;
e.printStackTrace();
}
finally {
/*
* Clean up.
*/
try {
if(is != null) {
is.close();
}
if(os != null) {
os.flush();
os.close();
}
if(stmt != null) {
stmt.close();
}
if(rs != null) {
rs.close();
}
if(conn != null) {
conn.commit();
conn.close();
}
is = null;
os = null;
stmt = null;
rs = null;
conn = null;
blob = null;
}
catch(Exception e) {
returnValue = 5;
e.printStackTrace();
}
}
return returnValue;
}
}

    
 
 

您可能感兴趣的文章:

  • java中的数据库结果集可以被赋值吗,可以通过结果集的方法来更新数据库字段吗?
  • 在linux下可以使用dao方式连接数据库吗?可以连接musql吗?回答就给分!急
  • 有谁可以告诉我..在UNIX下可以用什么数据库啊 ...
  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • 数据在页面写不进数据库,也不可以从数据库中读出是什么原因?
  • 怎样可以在WINDOWS下连到UNIX下的SYBASE数据库进行编程?
  • 可以在程序中创建临时表吗?(用的是mysql数据库)
  • java可以管理数据库吗
  • Linux shell 可以实现连接数据库吗?
  • 请教,从数据库查看图片地,是否可以不下载到本地?
  • JSP连接数据库时不用DSN可以吗?还有什么方法
  • linux开机自启动程序可以访问数据库吗?
  • linux下可以安装哪些数据库?到哪儿下载免费的?
  • 紧急求助,我的程序连接数据库时,用localhost完全正常,而外部可以访问,但不能访问连接数据的那部分
  • 我是root,请问我如何设置用户aaa的权限,使它也可以创建属于自己的数据库文。。
  • 用什么方法可以将EXCELL表数据导入数据库?
  • 请问微软的SQLServer数据库可以在Linux系统环境中使用吗?
  • 问一个幼稚的问题:jsp能象asp那样不建立odbc数据源却可以连接access数据库吗?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 要做显示数据库内容的柱状图,有意者可以提意见大家进行探讨
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问高手,有没有办法可以控制文件的下载?下载文件,一般通过地址链直接链接过去就可以下载,但有些文件是要某种条件下才可以让客户下载,如
  • 怎样让一个.SH文件在任何目录下都可以直接敲入文件名*.SH就可以运行?
  • 为什么我上传文件的时候,如果遇到文件名是中文的,虽然可以上传,但不可以下载,怎么解决?
  • shell里可不可以操纵文件指针读取文件中的内容?如果可以能否给一个例子,100分送上!
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • Redhat Linux下用c怎么可以知道一个文件是文件夹还是真的文件?
  • 怎样写一个shell,可以查看一个文件的内容,并且有翻页的内容,并可以打印的
  • linux下文件可以看到但不可以使用
  • 求救:谁有从服务器下载文件(一次下载一个文件就可以)的class 文件或着着方面的信息吗?90分必送
  • 不让用户选择文件,程序指定本地文件,Java可以实现上传到服务器吗?
  • linux下,文件和文件夹不能同名?如果主菜单打开时候,屏幕抓图就不可以?
  • 子进程关闭父进程打开的文件,父进程可以访问该文件吗
  • 请问,有什么办法可以把html文件生成pdf/excel格式的文件
  • red hat 9那些文件是临时文件可以删除的,
  • 可以把.a文件转化成.so文件吗?
  • 在redhat7.2中只有root权限才可以直接读写声卡文件吗?怎样设置普通用户的权限使其可以直接访问声卡?
  • 后缀名是wdl的文件可以用什么工具打开,它是什么文件
  • JAVA编译的CLASS文件可以反编译为JAVA文件吗?
  • 怎样使文件选择器可以选择多个文件?
  • 用linux(服)windows(客)传输文件,windows端可以,linux端不可以,怎么回事???
  • C++ MultiMaps 成员 max_size():返回可以容纳的最大元素个数
  • 我从网上下载LUNUX然后用盘刻录了可以安装吗?如果可以请告诉我下载地址可以吗?谢谢,我学习用的!谢谢
  • C++ Bitsets 成员 size():返回可以容纳的位的个数
  • tc下可以,gcc下不可以.请告说我,怎样就都可以了
  • C++ Maps 成员 max_size():返回可以容纳的最大元素个数
  • 生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
  • 网站英文/中文域名字符集即网站英文/中文域名可以包含哪些字符
  • weblogic可不可以当作jndi服务器使用?如果可以,请问如何管理?
  • 必看!程序员升级之路,看了可以少走很多弯路
  • 请问用ftp可以不可以把整个目录一起上传。
  • linux可不可以和windows共享??可以的话,该怎么做?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3