簡體   English   中英

使用Java將圖像插入MS Access數據庫的SQL

[英]SQL for Inserting an Image into an MS Access database using Java

我正在嘗試使用Java將圖像插入MS Access表中。

訪問文件稱為AdvisorImage.accdb。 該表稱為“圖像”,它有2列:ID和圖片。 ID是長文本類型,圖片是OLE對象類型。

我的方法是這樣的:

  1. 我建立數據庫連接
  2. 將圖像轉換為字節數組
  3. 創建SQL語句以將字節數組保存到數據庫
  4. 執行SQL語句
  5. 緊密連接

這是我到目前為止編寫的代碼:

package com.database.access;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class dbAccess {
    public static void main(String[] args)
    {
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.accdb)};DBQ=C://Users/abcde/Documents/AdvisorImage.accdb;";
            Connection conn = DriverManager.getConnection(database, "", "");
            Statement s = conn.createStatement();

           //convert file to byte array
           File file = new File("C://Users/abcde/Pictures/WW.PNG");

           FileInputStream fis = new FileInputStream(file);

           ByteArrayOutputStream bos = new ByteArrayOutputStream();
           byte[] buf = new byte[1024];

           try {
                for(int readNum;(readNum = fis.read(buf)) != -1;) {
                    bos.write(buf,0,readNum);
                    System.out.println("read" + readNum + " bytes," );
                }
           } catch (IOException ex) {
               System.out.println(ex);
           }
           byte[] bytes = bos.toByteArray();

           //write to database
           String addRow = "INSERT INTO " + "Image(ID,Picture) VALUES ( " + String.valueOf((int) (Math.random() * 32767)) + ", ";
        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}

您如何構架該SQL語句(字符串addRow)以指定並將我的字節數組(稱為字節)插入到Image表的OLE列中?

然后我要添加的問題是,如何編寫SQL和相應的Java代碼以從表中檢索字節數組?

注意:我知道不建議您將圖像存儲在數據庫中,但是我的具體情況需要這樣做。

不建議使用數據庫存儲照片,因為這些照片拍攝的尺寸很大(原始尺寸的十倍)。 但是,這是代碼

String addRow = "INSERT INTO " + "Image(ID,Picture) VALUES ( " + String.valueOf((int) (Math.random() * 32767)) +","+ bytes;

如果運行不正常,請嘗試用'',[]或“”引用bytes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM