MySQLのBlobタイプの使用とテクニック

2145 ワード

ファイルまたは画像または他のバイナリまたはマルチメディアファイルを保存する必要がある場合は、Blobタイプを使用することをよく選択します.基本的にBlobを使うのはMysqlのデータ型で、それは2進数の大きいオブジェクトで、大量のデータの容器とすることができます;より正確には、Blobは一連のデータ型です.
MySQLの4種類のBLOBタイプ
 
を選択します.
サイズ(単位:バイト)
TinyBlob
最大255
Blob
最大65 K
MediumBlob
最大16 M
LongBlob
最大4 G
この4つのタイプは、許容される最大値が異なる以外に、他の違いはありません.実際の使用で必要なデータサイズに応じて異なるBLOBタイプを定義します.注意:ファイルが大きすぎると、データベースのパフォーマンスが大幅に低下します.
 
Java-JDBCでの使用:
クエリー:
 
// ...
file = new File("filename");
fis = new FileInputStream(file);

pstmt = conn.prepareStatement("insert into tmp(descs,pic) values(?,?)");
pstmt.setString(1,file.getName()); //               
//pstmt.setBinaryStream(2,fis,(int)file.length()); //           ,  file.length()    long 
pstmt.setBinaryStream(2,fis,fis.available()); //           
pstmt.executeUpdate(); 
// ...
 
 
挿入:[直接COPY BAIDU^=^]
/**
*        BLOB  
* @param outfile        
* @param picID            ID
* @throws java.lang.Exception
*/

public void blobRead(String outfile,int picID) throws Exception
{
FileOutputStream fos = null;
InputStream is = null;
byte[] Buffer = new byte[4096];

try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);
pstmt = conn.prepareStatement("select pic from tmp where id=?");
pstmt.setInt(1,picID); //        ID
rs = pstmt.executeQuery();
rs.next();

file = new File(outfile);
if(!file.exists())
{
file.createNewFile(); //       ,   
}
fos = new FileOutputStream(file);
is = rs.getBinaryStream("pic");
int size = 0;
/* while(size != -1)
{
size = is.read(Buffer); //              
//System.out.println(size);
if(size != -1) //-1        
fos.write(Buffer,0,size);
} */
while((size = is.read(Buffer)) != -1)
{
//System.out.println(size);
fos.write(Buffer,0,size);
}

}
catch(Exception e)
{
System.out.println("[OutPutFile error : ]" + e.getMessage());
}
finally
{
//       
fos.close();
rs.close();
pstmt.close();
conn.close();
}
} 
 
 
 
二テクニック
 
Coming soon ...