【问题标题】:SQL for Inserting an Image into an MS Access database using Java使用 Java 将图像插入 MS Access 数据库的 SQL
【发布时间】:2015-01-03 10:45:18
【问题描述】:

我正在尝试使用 Java 将图像插入到 MS Access 表中。

Access 文件称为 AdvisorImage.accdb。该表称为 Image,它有 2 列:ID 和 Picture。 ID 为 Long Text 类型,Picture 为 OLE Object 类型。

我的做法是这样的:

  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 语句(String addRow)以指定我的字节数组(称为字节)并将其插入到 Image 表的 OLE 列中?

然后我的附加问题是,您将如何编写 SQL 和相应的 Java 代码来从表中检索字节数组?

注意:我知道不建议将图像存储在数据库中,但我的具体情况需要它。

【问题讨论】:

标签: java sql ms-access jdbc


【解决方案1】:

不推荐使用数据库存储照片,因为这些照片的尺寸很大(是原始尺寸的十倍)。但是,这是代码

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

如果不顺利,请尝试使用 ' '、[ ] 或 " " 引用 bytes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多