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)“
如何解决这个问题? 请帮帮我
答案 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);