如何知道图像是否已存在于数据库中?

时间:2017-12-30 12:40:14

标签: java android sql image-processing

我正在编写一个图库图片Android应用,但我不知道如何检查我的数据库中是否已存在新图像。我在想这样的事情:

select * from images where id=md5(<new image>);

对于每张新图片,我都会获得此图片的md5。这个md5将是数据库中图像的主键,所以稍后我可以检查图像是否在数据库中,如上所示。

这是一个不错的选择吗?如何知道图像当前是否在数据库中?我认为比较逐字节图像将是一项繁重的任务,它不是吗?

1 个答案:

答案 0 :(得分:0)

校验和是分歧但不明显,因此您不应该使用主键。而是将其用于快速失败的方法:

create table images (
    id        integer  primary key,
    data      blob     ,
    checksum  raw(16)
);

select * from images where data = ? and id in (
  select id from images where checksum = ?
);

但是,校验和冲突的可能性相当低,因此对java中的数据进行身份检查可能会比嵌套语句执行得更好。

为了进一步提高性能(并且依赖于数据库),可能有助于在checksum上使用索引:

create index awesome_index_name on images(checksum);