今天在向mysql数据库中写入大文本时遇到了一个bug
Exception in thread “main” java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.setCharacterStream(ILjava/io/InputStream;J)V is abstract
at com.mysql.jdbc.PreparedStatement.setBlob(PreparedStatement.java)
下面贴上源码
Connection connection = DBUtils.getConn();
String sql = "insert into des values(?,?)";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, UUID.randomUUID().toString());
File file = new File("f://test.txt");
Reader reader = new FileReader(file);
ps.setCharacterStream(2, reader, file.length());
// FileInputStream in=new FileInputStream(file);
// ps.setBinaryStream(2,in,file.length());
ps.executeUpdate();
折腾许久,终于明白原来是数据库驱动未更新,mysql的jar中没有ps.setBinaryStream(int,InputStream,long)的方法(只有最后一个参数为int的),而sql包有long的,file.length也是long型,所以编译不报错,运行报错。
知道原因就很好解决了,只需要加一个强转
ps.setCharacterStream(2, reader, (int)file.length());就ok啦,当然更新mysql驱动也是一个办法,不过笔者有点懒没去试,据说最新版的是可以支持的,看官们试试呗