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/