当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

java-在HSQLDB中将图像添加为BLOB,但类似“:hsqll:jdbc:client@f3t5h”的内容最终出现在表中

admin 4℃
我试图在HSQLDB中添加一个BLOB图像。但在表中,我找到了类似':hsqll:jdbc:client@f3t5h'的内容。下面的Java代码有什么问题吗?

我的检索代码是这样的,我通常做其他数据库。为什么对HSQLDB不起作用?

   Statement stmt = conn.createStatement();

   ResultSet results =stmt.executeQuery("SELECT * from productdetails");


     while (results.next()) {
                String code = (String) results.getObject(1);
                String name = (String) results.getObjeenter code herect(2);

                String price = Double.toString((Double) results.getObject(3));
                int quantity = (Integer) results.getObject(4);
                Boolean featured = (Boolean) results.getObject(5);
                String desc = (String) results.getObject(6);
                String imgPath = (String) results.getObject(7);
                Blob aBlob = (Blob) results.getBlob(10);
                byte[] allBytesInBlob = aBlob.getBytes(1, (int) aBlob.length());

                try {
                    FileOutputStream fis =
              (FileOutputStream) getOutputStream(allBytesInBlob);

                } catch (IOException ex) {
                    Logger.getLogger(Helper.class.getName()).log(Level.SEVERE, null, ex);
                }
}

public OutputStream getOutputStream(byte[] _data) throws IOException 
               {
            OutputStream out = new ByteArrayOutputStream();
            out.write(_data);
             return out;
               }

这是我插入的代码

 Connection conn = db.getConnection();
 PreparedStatement pstmt;
 String sql = "INSERT INTO PRODUCTDETAILS"
( PRODUCTCODE, NAME, PRICE, QUANTITY, FEATURED, DESCRPTION,   IMAGEPATH,IMAGE )
               VALUES ( ?, ?,? ,? ,? , ?, ?,?)";
 pstmt = conn.prepareStatement(sql);
        FileInputStream fis;


        File image = new File(values.getImgPath());
        fis = new FileInputStream(image);
        pstmt.setBinaryStream(8, (InputStream) fis, (int) (image.length()));
        pstmt.execute();

那个 image 列的类型为 BLOB 很明显

您的Java代码适用于HSQLDB 2.2.x。blob似乎已插入。您用于检索blob的代码似乎不正确。您尚未报告此代码,但显然您没有使用java.sql.Blob方法访问返回的Blob(org.hsqldb.jdbcjdbcbblobclient对象)。用于更正的后检索代码

如果在HSQLDB数据库管理器或其他一些工具中查看表数据,它可能会将blob显示为对象的地址,而不是显示二进制内容

你打电话来 aBlob.getBytes(10, aBlob.length()) 是的

然而,Blob.getBytes()的第一个参数是要检索的第一个字节的索引(基于1,就像JDBC中的所有索引一样)。所以您忽略了(即不获取)的前9个字节 Blob.getBytes() . 传入 Blob 相反

如果输出实际上是如您所示的,那么还有其他问题(可能是您插入 1 ),但这肯定是您应该解决的第一个问题

Joachim:10是列索引,而不是字节[索引]

得到的是standard Object.toString()。 '显然,图像列是BLOB类型的。'。是的,分贝。你的桌子怎么样? 您的模型是否为此列返回泛型String.class?如果是,你应该检查物体本身, 你的数据就在里面(而对象不在乎是你母亲的照片还是文字)。 byteoutputstream到fileoutputstream的良好转换,在我的java中不起作用

转载请注明:我的代码 » java-在HSQLDB中将图像添加为BLOB,但类似“:hsqll:jdbc:client@f3t5h”的内容最终出现在表中