Java MySQL使用BasicFileAttributes插入图像文件上次访问时间

标签 java mysql database file-io

      String sql ="insert into c_db (f_name,access_time,photo) values (?,?,?)";
      PreparedStatement statement = conn.prepareStatement(sql); 

      InputStream inputStream = new FileInputStream(fblob);

      Path path = Paths.get("C:/Users/Administrator/Desktop/photo/K-001.png");
      BasicFileAttributes attr = Files.readAttributes(path,BasicFileAttributes.class,NOFOLLOW_LINKS);

      statement.setString(1,fblob.getName());     
      statement.setFileTime(2,attr.lastAccessTime());        
      statement.setBlob(3,inputStream);

我想使用 Mysql 在数据库中插入图像文件数据(文件名、访问时间)。

这是可创建的

create table C_db(
image_id int(11) auto_increment,
f_name varchar(45) default null,
access_time datetime default null,
photo mediumblob,
primary key (image_id)
);

但是错误是

"Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method setFileTime(int, FileTime) is undefined for the type PreparedStatement at jdbcExample.main(jdbcExample.java:55)"

如何解决这个问题? 请帮助我

最佳答案

set* PreparedStatement 上的方法与您的字段名称无关,而是与这些字段的类型相关。 (如果您仔细想想,这应该是有道理的,因为 Java 无法动态地为每个字段创建一个新方法。)

因此,错误消息清楚地表明 statement (或者更确切地说,其中的 PreparedStatement 对象)不知道方法 setFileTime() 。您要作为第二个参数发送的是上次访问文件的时间。看看 attr.lastAccessTime() 的结果。这将是 FileTime 类型。数据库不知道这个类型是什么。您必须将其转换为数据库可以理解的内容。日期通常作为字符串处理,因此您可以使用它:

statement.setString(2, attr.lastAccessTime().toString());

但是,这要么行不通,要么至少不是一个好的风格。 SQL 实现知道如何处理日期值,因此您可以使用 statement.setTimestamp() 来代替。 ,但为了做到这一点,您必须转换您的 FileTime对象变成 Timestamp目的。这可能看起来像这样:

FileTime lastAccess = attr.lastAccessTime();
java.sql.Timestamp timestamp = new java.sql.Timestamp(lastAccess.toMillis());
statement.setTimestamp(2, timestamp);

关于Java MySQL使用BasicFileAttributes插入图像文件上次访问时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38351589/

相关文章:

java - 如何在 Java 中使用 xpath 编辑/更新 XML 文件中的节点

java - Hibernate - 在预加载事件上使字段 transient

mysql - 将一个表中的数据插入到另一个表中

php - 如何更新 MySql 表中编码错误的字符?

java - 从android在线数据库中插入数据

java - JSR-303 验证的@NotNull 说明

java - 使用来自 GAE API 的 endpointscfg 生成 Java 客户端库时出现 HTTP 500 错误

mysql - 如何使用 vb.net 找到 mysql 数据库中每个 machine_id 的最后一行?

android - 在 Android SQLite 中使用 COLLATE - 在 LIKE 语句中忽略语言环境

database - 访问通过数据库链接在数据库中创建的表同义词