最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)插入mysql二進制文件,blob類型,遇到問題及解決辦法

 更新時間:2009年06月06日 00:02:58   作者:  
mysql插入二進制文件,blob類型,遇到問題及解決辦法
首先是數(shù)據(jù)庫建立要準備的:
我們要把放置二進制字段設置為Blob類型,根據(jù)文件的大小選擇合適的Blob類型,一下是各個Blob類型所能容納二進制文件的大小
MySQL的四種BLOB類型
類型 大小(單位:字節(jié))
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
一下是具體操作代碼:
復制代碼 代碼如下:

/**
*
* 把二進制文件(該二進制文件可以是本地硬盤路徑,也可以是一個網(wǎng)絡路徑)存入數(shù)據(jù)庫
* create date:2009-5-13 author:Administrator
*
* @param file
* 可以是本地文件也可以是網(wǎng)絡文件
* @param conn
*/
public void saveBinary(String file, Connection conn) {
// 注意二進制文件寫入數(shù)據(jù)庫時所用到的類,以及類包裝轉換過程
File f = null;
if (file.toLowerCase().contains("http:"))
f = DownLoadWithUrl.downLoadFile(file);
else
f = new File(file);
if (f != null) {
try {
InputStream is = new FileInputStream(f);
PreparedStatement ps = conn
.prepareStatement("insert into bankVoice(name,text) values (?,?)");
ps.setString(1, file);
int i = is.available();
ps.setBinaryStream(2, is, is.available());
ps.executeUpdate();
System.out.println("二進制文件插入成功");
ps.clearParameters();
ps.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("二進制文件插入時出現(xiàn)異常");
}
}
}

注意在操作時候會出現(xiàn)以下異常,那么我們只需做一下設置:以我本地為例:進入D:\MySql5.0\mysql-5.0.51b-win32 目錄,有以下文件可以看到:my-large.ini、my-small.ini、my-medium.ini、my-huge.ini
我們把只需把mysql服務現(xiàn)在加載的ini文件中的配置項:max_allowed_packet 改為 16M
即是:max_allowed_packet = 16M 默認的是1M我們改為16M,然后重啟mysql服務器,這樣就不會出現(xiàn)下面的異常了。
復制代碼 代碼如下:

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1048587 > 1047552). You can change this value on the server by setting the max_allowed_packet' variable.
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2632)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2618)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1551)
at com.mysql.jdbc.ServerPreparedStatement.storeStream(ServerPreparedStatement.java:2180)
at com.mysql.jdbc.ServerPreparedStatement.serverLongData(ServerPreparedStatement.java:1199)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1004)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:670)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1159)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1076)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1061)
at SaveBinaryToDB.SaveBinaryToDB.saveBinary(SaveBinaryToDB.java:33)
at SaveBinaryToDB.SaveBinaryToDB.main(SaveBinaryToDB.java:17)
/**
* 從數(shù)據(jù)庫中讀取二進制文件 create date:2009-5-13 author:Administrator
*
* @param file
* @param conn
*/
public void getBinary(String file, Connection conn) {
// 注意二進制文件從數(shù)據(jù)庫中讀取時所用到的類,以及類的包裝轉換過程
try {
PreparedStatement ps = conn
.prepareStatement("select text from bankVoice where name=?");
ps.setString(1, file);
Blob blob = null;
ResultSet rs = ps.executeQuery();
if (rs.next()) {
blob = (Blob) rs.getBlob("text");
}
FileOutputStream fos = new FileOutputStream("D:\\test1.mp3");
fos.write(blob.getBytes(1, (int) blob.length()));
System.out.println("二進制文件獲得成功");
ps.clearParameters();
ps.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("二進制文件讀取時出現(xiàn)異常");
}
}

package SaveBinaryToDB;
復制代碼 代碼如下:

/**
* 本程序的功能實現(xiàn)網(wǎng)絡下載
* 把指定url的文件下載到本地硬盤
*
*/
import java.io.*;
import java.net.*;
/**
* @todo 將網(wǎng)上獲取的圖像,mp3等文件存儲到本地
*
* @version 1.0
*/
public class DownLoadWithUrl {
public static File downLoadFile(String fromUrl) {
URL url;
File file = null;
try {
// url = new
// URL("http://count.koubei.com/showphone/showphone.php?f=jpg&w=96&h=10&bc=255,255,255&fc=0,0,0&fs=10&fn=arial&phone=NzMwNzIyNTE1%236aWCXtTNZYkxASrj");
url = new URL(fromUrl);
URLConnection uc = url.openConnection();
InputStream is = uc.getInputStream();
// 根據(jù)下載文件類型的不同,進行相應的文件命名
file = new File("D:\\forever.mp3");
FileOutputStream out = new FileOutputStream(file);
/*
* 該注釋內的也是一種寫入文件的方法,不過通常下載mp3或者比mp3更小圖片
* 等這些文件用這種帶緩沖的方法寫文件比較慢,所以說小文件下載通常用下面 的寫文件方法就可以了 // byte[] b = new
* byte[102400*3]; // int size = 0; // // while ((size = is.read(b)) !=
* -1) { // out.write(b, 1, size); // // }
*/
int i = 0;
while ((i = is.read()) != -1) {
out.write(i);
}
out.flush();
is.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return file;
}
/**
* 刪除本地磁盤指定路徑的文件 create date:2009-5-13 author:Administrator
*
* @param file
*/
public static void delFile(String file) {
File f = new File(file);
if (f.exists())
f.delete();
System.out.println(file + "已經被刪除");
}
public static void main(String[] args) {
// delFile("D:\\forever.mp3");
downLoadFile("");
}
}

相關文章

  • Centos 5.2下安裝多個mysql數(shù)據(jù)庫配置詳解

    Centos 5.2下安裝多個mysql數(shù)據(jù)庫配置詳解

    在實際應用中,有時候,我們需要在同一臺服務器上安裝兩個甚至多個mysql數(shù)據(jù)庫,那么,如何來操作呢,今天我們就來探討下這個問題
    2014-07-07
  • mysql的MVCC多版本并發(fā)控制的實現(xiàn)

    mysql的MVCC多版本并發(fā)控制的實現(xiàn)

    這篇文章主要介紹了mysql的MVCC多版本并發(fā)控制的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • mysql中varchar類型的日期進行比較、排序等操作的實現(xiàn)

    mysql中varchar類型的日期進行比較、排序等操作的實現(xiàn)

    在mysql使用過程中,日期一般都是以datetime、timestamp等格式進行存儲的,但有時會因為特殊的需求或歷史原因,日期的存儲格式是varchar,那么應該怎么進行比較和排序等問題,本文就來介紹一下
    2021-11-11
  • 如何設置mysql允許外部連接訪問

    如何設置mysql允許外部連接訪問

    大家好,本篇文章主要講的是如何設置mysql允許外部連接訪問,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • mysql表的四種分區(qū)方式總結

    mysql表的四種分區(qū)方式總結

    通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個小表,下面這篇文章主要給大家介紹了關于mysql表的四種分區(qū)方式,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Mysql中having與where的區(qū)別小結

    Mysql中having與where的區(qū)別小結

    本文主要介紹了MySQL中WHERE和HAVING子句的區(qū)別,包括它們的執(zhí)行順序、效率、適用條件和在多表關聯(lián)查詢中的應用,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • mysql按逗號分割的實現(xiàn)

    mysql按逗號分割的實現(xiàn)

    在MySQL中,我們經常需要對數(shù)據(jù)進行拆分和處理,其中一個常見需求就是按逗號分割字符串,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • mysql?使用join進行多表關聯(lián)查詢的操作方法

    mysql?使用join進行多表關聯(lián)查詢的操作方法

    在一些報表統(tǒng)計或數(shù)據(jù)展示時候需要提取的數(shù)據(jù)分布在多個表中,這個時候需要進行join連表操作,join將兩個或多個表當成不同的數(shù)據(jù)集合,然后進行集合取交集運算,這篇文章主要介紹了mysql?使用join進行多表關聯(lián)查詢的操作方法,需要的朋友可以參考下
    2024-02-02
  • 解決MySQL批量新增或修改時出現(xiàn)異常:Lock?wait?timeout?exceeded

    解決MySQL批量新增或修改時出現(xiàn)異常:Lock?wait?timeout?exceeded

    這篇文章主要給大家介紹了關于如何解決MySQL批量新增或修改時出現(xiàn)異常:Lock?wait?timeout?exceeded;try?restarting?transaction的相關資料,需要的朋友可以參考下
    2024-01-01
  • mysql?timestamp字段規(guī)范使用詳情

    mysql?timestamp字段規(guī)范使用詳情

    這篇文章主要介紹了mysql?timestamp字段規(guī)范使用詳情,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

商城县| 时尚| 彩票| 伊川县| 将乐县| 阿瓦提县| 鄂伦春自治旗| 芦溪县| 庆元县| 凤城市| 嵊州市| 桦川县| 临城县| 弥渡县| 阿瓦提县| 三亚市| 综艺| 洛阳市| 榆社县| 通海县| 彰化市| 界首市| 兰坪| 中卫市| 霍邱县| 鄯善县| 社会| 鄂托克前旗| 和田市| 永顺县| 罗田县| 德惠市| 宝丰县| 滦平县| 资中县| 秭归县| 遂川县| 沁源县| 麻阳| 同德县| 昌图县|