如何在MySQL TEXT数据类型中插入java字符串值?

问题描述 投票:1回答:1

我正在建立一个基本的网络爬虫。我正在使用 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页面的正文。

headbody 属性(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();
        }
    }
java mysql sql jdbc
1个回答
0
投票

这看起来像是你在尝试使用不支持JDBC 4.0功能的驱动版本。

如果您想使用JDBC 4.0,您应该使用 ConnectorJ 5.1或更高版本的驱动程序。setCharacterStream我怀疑你使用的是旧版本。

请参考 https:/dev.mysql.comdocconnector-j5.1enconnector-j-reference-implementation-notes.html。 更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.