Java MySQL使用BasicFileAttributes来插入imagefile的最后访问时间

时间:2016-07-13 12:20:55

标签: 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)
);

但错误是

  

“线程中的异常”主“java.lang.Error:未解析的编译   问题:方法setFileTime(int,FileTime)未定义   在jdbcExample.main上输入PreparedStatement(jdbcExample.java:55)“

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

1 个答案:

答案 0 :(得分:0)

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);