java.lang.AbstractMethodError

今天在向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驱动也是一个办法,不过笔者有点懒没去试,据说最新版的是可以支持的,看官们试试呗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值