2014-11-06 69 views
1

我正尝试使用Java将图像插入到MS Access表中。用于使用Java将图像插入到MS Access数据库的SQL语句

Access文件被称为AdvisorImage.accdb。该表被称为图像,它有2列:ID和图片。 ID是长文本类型,而图片是OLE对象类型。

我的做法是这样的:

1.I建立数据库连接 2.Convert图像的字节数组 3.创建SQL语句,以字节数组保存到数据库 4.Execute的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)指定并将我的字节数组(称为bytes)插入到Image表的OLE列中?

然后我的问题就是,如何编写sql和相应的Java代码以从表中检索字节数组?

注意:我知道不建议将图像存储在数据库中,但我的具体情况需要它。欢迎提供更多信息的任何建议或请求。谢谢。

+0

[如何将图像保存到MS Access数据库中?](http://stackoverflow.com/questions/8046606/how-to-save-the-images-in-an-ms-access-数据库) – vzamanillo 2014-11-06 19:25:53

+0

我看到那篇文章,其实这是我看到的第一个。这给了我解决问题的方法,但实际上并没有提供任何代码作为例子 – 2014-11-06 20:56:19

回答

0

使用数据库存储照片并不是首选,因为这些照片的尺寸很大(十倍于原始尺寸)。然而,这是代码

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

如果不顺利尝试引用bytes与“”,[]或“”。