新聞中心
教你文件夾傳至數(shù)據(jù)庫的方法

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供陸河網(wǎng)站建設(shè)、陸河做網(wǎng)站、陸河網(wǎng)站設(shè)計、陸河網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、陸河企業(yè)網(wǎng)站模板建站服務(wù),十年陸河做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
現(xiàn)今,數(shù)據(jù)已成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。無論是在工作中還是在日常娛樂中,我們都需要對數(shù)據(jù)進行管理。因此,數(shù)據(jù)存儲設(shè)備的出現(xiàn),給我們生活帶來了極大的便利。傳統(tǒng)的數(shù)據(jù)存儲方式是將數(shù)據(jù)存儲在硬盤、光盤、U盤等設(shè)備中。但是這些設(shè)備需要我們手動打開文件夾復(fù)制粘貼等繁瑣的操作才能找到需要的數(shù)據(jù)。而數(shù)據(jù)庫則是另外一種存儲方式,數(shù)據(jù)庫對各種數(shù)據(jù)進行高效的管理,讓我們的數(shù)據(jù)操作變得更加方便快捷。在這篇文章中,我們將會為你介紹如何將文件夾中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,從而實現(xiàn)更高效的數(shù)據(jù)管理方式。
1. 前置條件
在進行文件夾傳至數(shù)據(jù)庫的操作之前,我們需要保證我們安裝了MySQL數(shù)據(jù)庫以及Java環(huán)境。如果你還沒有安裝,可以通過官方網(wǎng)站去下載并安裝。此外,我們還需要掌握一些基礎(chǔ)的Java編程知識,以便進行Java編程操作。
2. 數(shù)據(jù)庫表的設(shè)計
在將文件夾中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫之前,我們需要先設(shè)計數(shù)據(jù)庫表結(jié)構(gòu),以便于我們存儲文件夾中的數(shù)據(jù)。我們可以在MySQL數(shù)據(jù)庫中創(chuàng)建一個名為“file”,包含三個字段:id、name和content。其中,id為整型,表示文件的唯一標識符;name為字符串型,表示文件名;content為字符串型,表示文件內(nèi)容(我們可以將文件轉(zhuǎn)換為二進制數(shù)據(jù)后存儲至數(shù)據(jù)庫中)。通過這樣一個簡單的表格設(shè)計,我們就可以存儲文件夾中的數(shù)據(jù)了。
3. Java代碼實現(xiàn)
接下來我們需要進行Java編程操作,將文件夾中的數(shù)據(jù)導(dǎo)入到我們所設(shè)計的數(shù)據(jù)庫表中。我們需要編寫一個Java程序,實現(xiàn)讀取文件夾中的數(shù)據(jù)并將其轉(zhuǎn)換為二進制數(shù)據(jù)的操作。代碼如下:
“`
import java.io.*;
public class BinaryFile {
public static byte[] read(File file) throws IOException {
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));
try {
byte[] data = new byte[inputStream.avlable()];
inputStream.read(data);
return data;
} finally {
inputStream.close();
}
}
}
“`
上述代碼中,我們定義了一個二進制文件操作類,它可以從文件中讀取二進制數(shù)據(jù),并將其返回為一個字節(jié)數(shù)組。
接下來,我們需要編寫Java程序,實現(xiàn)將文件夾中的數(shù)據(jù)導(dǎo)入到我們所設(shè)計的數(shù)據(jù)庫表中。代碼如下:
“`
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ImportFile {
private static final String DB_URL = “jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8”;
private static final String USER_NAME = “root”;
private static final String PASSWORD = “root”;
private static final String INSERT_SQL = “INSERT INTO file (id, name, content) VALUES (?, ?, ?)”;
public static void mn(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
try {
Class.forName(“com.mysql.jdbc.Driver”);
connection = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD);
File folder = new File(“C:/myfolder”);
File[] files = folder.listFiles();
for (int i = 0; i
File file = files[i];
statement = connection.prepareStatement(INSERT_SQL);
statement.setInt(1, i + 1);
statement.setString(2, file.getName());
statement.setBytes(3, BinaryFile.read(file));
statement.executeUpdate();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
“`
上述代碼中,我們通過連接MySQL數(shù)據(jù)庫,讀取文件夾中的數(shù)據(jù)并將其導(dǎo)入到我們所設(shè)計的數(shù)據(jù)庫表中。此代碼中,我們假設(shè)文件夾的路徑為“C:/myfolder”,并將其下的所有文件均導(dǎo)入到數(shù)據(jù)庫表中。
4. 結(jié)尾
通過上述步驟,我們就已經(jīng)完成了文件夾傳至數(shù)據(jù)庫的操作。相比于傳統(tǒng)的數(shù)據(jù)存儲方式,數(shù)據(jù)庫可以更加方便快捷地對數(shù)據(jù)進行管理,提高了我們的數(shù)據(jù)操作效率。而通過Java編程實現(xiàn)文件夾傳至數(shù)據(jù)庫的操作,則讓我們可以輕松地實現(xiàn)這一高效的數(shù)據(jù)管理方式。
相關(guān)問題拓展閱讀:
- 如何將大文件寫入到數(shù)據(jù)庫中
- 文本文件導(dǎo)入到數(shù)據(jù)庫中的幾種方法(如何將文本文件導(dǎo)入數(shù)據(jù)庫表中)
如何將大文件寫入到數(shù)據(jù)庫中
最近利用空閑時間自己在寫一個文件備份工具,因為我磁盤上的很多文件很重要,例如很多PPT和講義。所以需要經(jīng)常備份,而且因為這些文件很多,所以需要增量備份。
我嘗試用過windows自帶的ntbackup工具,但感覺不是很爽。它不支持壓縮備份,而且界面也有點宏則復(fù)雜。
為了響應(yīng)偉大領(lǐng)袖的“自力更生,豐改衫衣足食”的號召,咱決定自己寫一個工具,專門備份到數(shù)據(jù)庫。支持壓縮,支持加密,支持增量。
本文分享一下其中一些重點的技術(shù)細節(jié)
其中一個關(guān)鍵的技術(shù)就是將文件使用二進制的方式存放在數(shù)據(jù)庫的varbinary(max)的字段中。該字段更大允許的長度為2GB。
對于一些小文件,我們可以一次性讀取它的所有字節(jié),然后一次提交到數(shù)據(jù)庫
///
/// 這個方法演示了如何一次提交所有的字節(jié)。這樣導(dǎo)致的結(jié)果是:應(yīng)用程序立即需要申請等同于文件大小的內(nèi)存
///
static void SubmitFileByOnce() {
string file = @”F:\功夫熊貓.rmvb”;//文件大小為519MB
byte buffer = File.ReadAllBytes(file);
using (SqlConnection conn = new SqlConnection(“server=(local);database=demo;integrated security=true”)) {
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = “INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)”;
cmd.Parameters.AddRange(
new
{
new SqlParameter(“@fileName”,file),
new SqlParameter(“@fileContents”,buffer)
});
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
但是,上面的方法有幾個問題,主要體現(xiàn)在如果文件比較大的話
1. 它需要一次性很大的內(nèi)存,具體數(shù)據(jù)等同于文件大小。因為File.ReadAllBytes方法是將所有字節(jié)全部讀入到內(nèi)存。
2. 它會導(dǎo)致提交失敗,就是因為數(shù)據(jù)太大了。數(shù)據(jù)庫也會拒絕。
那么,我就對這個方法做了一下改進,將文件拆分為5MB一段,也就是說,此時每次申請的內(nèi)存只有5MB。這就大大地提高了可用性。
///
/// 這個方法是將文件切分為5MB的塊,每次只是提交5MB,所以可能多次提交,但內(nèi)存占用就比較小
///
static void SubmitFileStepByStep() {
string file = @”F:\功夫熊貓.rmvb”;//以這個文件為例,大小為519MB,一共需要的時間大約94秒。還是有點慢的,所以還可能需要進行壓縮
FileStream fs = new FileStream(file, FileMode.Open);
byte buffer = new byte;
int readCount;
using (SqlConnection conn = new SqlConnection(“server=(local);database=demo;integrated security=true”核絕腔))
{
conn.Open();
while ((readCount = fs.Read(buffer, 0, buffer.Length)) > 0)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = “INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)”;
cmd.Parameters.AddRange(
new
{
new SqlParameter(“@fileName”,file),
new SqlParameter(“@fileContents”,buffer)
});
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
}
這樣的話,有一個后果就是一個文件,可能在數(shù)據(jù)庫中會有多條記錄。所以在讀取的時候,我們需要對其進行合并
static void DownloadFile() {
string file = @”F:\功夫熊貓.rmvb”;
string destfile = @”E:\Temp\Temp.wmv”;
using (SqlConnection conn = new SqlConnection(“server=(local);database=demo;integrated security=true”))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = “SELECT FileContents FROM Files WHERE FileName=@fileName”;
cmd.Parameters.AddRange(
new
{
new SqlParameter(“@fileName”,file),
});
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
FileStream fs = new FileStream(destfile, FileMode.Append, FileAccess.Write);
while (reader.Read())
{
byte buffer = (byte)reader;
fs.Write(buffer, 0, buffer.Length);
}
fs.Close();
reader.Close();
conn.Close();
}
}
}
文本文件導(dǎo)入到數(shù)據(jù)庫中的幾種方法(如何將文本文件導(dǎo)入數(shù)據(jù)庫表中)
這個如果要自己管理數(shù)據(jù)的話還是挺有難度的。
不過借用數(shù)據(jù)庫也許可以折中一下,把每個文檔譽磨悉的數(shù)據(jù)放到數(shù)據(jù)庫的一個字段中,然后用like’%…%’匹配慶乎。(下策^_^)
推薦使用桌面游咐搜索
文件夾怎么傳到數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于文件夾怎么傳到數(shù)據(jù)庫,「教你文件夾傳至數(shù)據(jù)庫的方法」,如何將大文件寫入到數(shù)據(jù)庫中,文本文件導(dǎo)入到數(shù)據(jù)庫中的幾種方法(如何將文本文件導(dǎo)入數(shù)據(jù)庫表中)的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)建站主營:成都網(wǎng)站建設(shè)、網(wǎng)站維護、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。
分享文章:「教你文件夾傳至數(shù)據(jù)庫的方法」(文件夾怎么傳到數(shù)據(jù)庫)
鏈接分享:http://m.fisionsoft.com.cn/article/djsehpg.html


咨詢
建站咨詢
