如何在mysql文本数据类型中插入java字符串值?

pxiryf3j  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(270)

我正在建立一个基本的网络爬虫。我正在使用 mysql-connector 连接到我计划存储数据的数据库。我无法插入 TEXT 来自普通java的数据类型 String .
当我试图插入 String 我有个例外:

Exception in thread "main" java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.setCharacterStream(ILjava/io/Reader;)V is abstract
    at com.mysql.jdbc.PreparedStatement.setCharacterStream(PreparedStatement.java)
    at WebCrawler.insertIntoChecked(WebCrawler.java:179)
    ...

我可以将文本文件(.txt)插入到 TEXT 数据类型使用 FileReader 以及之前的方法.setcharacterstream()。但是我不能用一个 String . 我试过把它转换成 StringReader 后来到 BufferedReader ,但我还是犯了同样的错误。 data.head 是一个 String 包含html页的页眉和 data.body 包含html页的正文。 head 以及 body 属性(mysql表)是 MEDIUMTEXT ,其他所有属性都是 varchar(x) 将数据插入数据库的方法:

private void insertIntoChecked(SiteData data){
        try {
            String sql =
                    "INSERT INTO checked " +
                            "(URL,title,language, charset, content, head, body)" +
                            "VALUES " +
                            "(?, ?, ?, ?, ?, ?, ?);";
            PreparedStatement preparedStatement = con.prepareStatement(sql);
            preparedStatement.setString(1, data.url);
            preparedStatement.setString(2, data.title);
            preparedStatement.setString(3, data.language);
            preparedStatement.setString(4, data.charset);
            preparedStatement.setString(5, data.content);
            BufferedReader sr1 = new BufferedReader(new StringReader(data.head));
            BufferedReader sr2 = new BufferedReader(new StringReader(data.body));
            preparedStatement.setCharacterStream(6, sr1); // the part that is causing the problem
            preparedStatement.setCharacterStream(7, sr2); // ^
            sr1.close();
            sr2.close();
            preparedStatement.execute();
            preparedStatement.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
jyztefdp

jyztefdp1#

这看起来像是您试图使用JDBC4.0特性,而使用的驱动程序版本不支持此功能。
如果您想使用连接器/j 5.1或更高版本 setCharacterStream ,我怀疑你用的是旧版本。
参考https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-implementation-notes.html 更多信息。

相关问题