Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加数组时出现PreparedStation错误_Java_Sql_Arrays_Spring - Fatal编程技术网

Java 添加数组时出现PreparedStation错误

Java 添加数组时出现PreparedStation错误,java,sql,arrays,spring,Java,Sql,Arrays,Spring,我正在使用SpringFamework,当前我正在尝试在创建新条目(行)时向数据库添加一个数组。讨论中的列称为“关键字”。下面是我的sql初始化代码(我觉得很好) 下面是我的add函数中正在崩溃和燃烧的代码: public boolean add(final MessageDto emailDto){ boolean result = false; int rowsAffected; KeyHolder keyHolder = new GeneratedKeyHolder

我正在使用SpringFamework,当前我正在尝试在创建新条目(行)时向数据库添加一个数组。讨论中的列称为“关键字”。下面是我的sql初始化代码(我觉得很好)

下面是我的add函数中正在崩溃和燃烧的代码:

public boolean add(final MessageDto emailDto){
    boolean result = false;
    int rowsAffected;
    KeyHolder keyHolder = new GeneratedKeyHolder();
    final String sql;

    sql = "INSERT INTO email (Sender_Email, Recipient_Email, Subject, Body, Attachment_Path, Creation_Date, MaxKeywords, Keywords) " +
            "VALUES (?, ?, ?, ?, ?, ?, ?, ?)";

    try{
        rowsAffected = getJdbcTemplate().update(
                  new PreparedStatementCreator() {
                        public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                            PreparedStatement statement = 
                                    connection.prepareStatement(sql, new String[] {"emailId"});

                            String[] foo = {"A","B"};

                            statement.setString(1, emailDto.getFrom());
                            statement.setString(2, emailDto.getTo());
                            statement.setString(3, emailDto.getSubject());
                            statement.setString(4, emailDto.getBody());
                            statement.setString(5, emailDto.getAttachmentPath());
                            statement.setTimestamp(6, new Timestamp(emailDto.getCreationDate().getMillis()));
                            statement.setInt(7, emailDto.getMaxKeywordCount());
                            statement.setArray(8, connection.createArrayOf("varchar", foo));

                            return statement;
                        }
                      }, keyHolder);

        if(rowsAffected > 0){
            emailDto.setEmailId(keyHolder.getKey().intValue());
            result = true;
        }
    } catch (Exception e){
        throw new RuntimeException(e);
    }

    return result;
}
引发的错误是:

org.springframework.dao.InvalidDataAccessApiUsageException: PreparedStatementCallback; SQL []; null; nested exception is java.sql.SQLFeatureNotSupportedException

帮助?

如果您决定放弃
setArray
方法,您可以这样做。使用您自己的逻辑将数组转换为字符串。无论如何,您都将其存储在
varchar
中,因此必须“展平”数组

    String[] foo = {"A","B"};
    StringBuilder sb = new StringBuilder();
    for (String bar : foo) {
        sb.append(bar);
        sb.append("\t");
    }
    statement.setArray(8, sb.toString());

它说类型不正确--它需要一个java.sql.array此链接可能会帮助您。。并非不领情@Smit,但Spring似乎并不了解oracle,所以我无法导入或使用它。。。这不是java/spring的内置部分吗?您使用的是哪个数据库以及哪个驱动程序版本?看起来驱动程序不支持setArray@Jessermon-是的,到目前为止,我的最佳想法是将其转换为JSON字符串,并存储该字符串。。。但我感觉到某种道德上的“必须工作”的感觉
    String[] foo = {"A","B"};
    StringBuilder sb = new StringBuilder();
    for (String bar : foo) {
        sb.append(bar);
        sb.append("\t");
    }
    statement.setArray(8, sb.toString());