首页 > 解决方案 > 如何将字节数组存储到 Java 中的 SQL Server varbinary(MAX) 字段中?

问题描述

我有一个以字节数组形式接收图像的 Android 应用程序,我想将其保存在我的 SQL Server 数据库中的 varbinary(MAX) 字段中。

我正在使用 jtds 并尝试运行:

Statement statement = dbConnection.createStatement();
ResultSet result = statement.executeQuery(
   "INSERT INTO TB_IMAGE (ID, IMAGE) VALUES (" + image.getId() + "," + image.getImage() + ")")

我能够执行查询,但它会引发以下错误:

java.sql.SQLException: Invalid SQL statement or JDBC escape, terminating ']' not found.

然后我尝试了:

String query = ("INSERT INTO TB_IMAGE (ID, IMAGE) VALUES (" + image.getId() + ", ?)");
PreparedStatement preparedStatement = dbConnection.prepareStatement(query);
preparedStatement.setBinaryStream(1, image.getImage());

但这需要 java.io.InputStream 并且代码无法编译。

作为参考,这是我的 Image 类:

public class Image {
    private int Id;
    private byte[] Image;

    public Image (int id) { this.Id = id; }

    public int getId() { return Id; }
    public void setId(int id) { Id = id; }

    public byte[] getImage() { return Image; }
    public void setImage(byte[] image) { Image = image; }
}

如何在 varbinary(MAX) 字段中保存图像,一个字节 []?

标签: javaandroidsql-servervarbinary

解决方案


将字节数组转换为十六进制字符串,并在 SQL 中提供未加引号的十六进制字符串。像这样:

insert into tb_image(id, image) values(100, 0xaabbccdd11223344)

推荐阅读