Java 使用JDBI将2d数组插入PostreSQL数据库?

Java 使用JDBI将2d数组插入PostreSQL数据库?,java,postgresql,jdbi,Java,Postgresql,Jdbi,我可以使用SQL对象API将Game映射到GAMESDB中的一行吗?以下是我的尝试: 数据类: public class Game { protected int id; protected int whoseTurn; protected int winner; protected char[][] board; public Game(int id, int turn, int winner, char[][] board ) {

我可以使用SQL对象API将
Game
映射到
GAMES
DB中的一行吗?以下是我的尝试:

数据类:

public class Game {
    protected int id; 
    protected int whoseTurn;
    protected int winner;
    protected char[][] board;

    public Game(int id, int turn, int winner, char[][] board ) {
        this.id=id;
        this.whoseTurn=turn;
        this.winner=winner;
        this.board=board;
    }

    @JsonProperty
    public int getId() {
        return id;
    }

    @JsonInclude(Include.NON_NULL)
    public int getWhoseTurn() {
        return whoseTurn;
    }

    @JsonInclude(Include.NON_NULL)
    public int getWinner() {
        return winner;
    }

    public char[][] getBoard() {
        return board;
    }   
}
道:

调用
insert
时,我收到以下错误:

org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of [[C. Use setObject() with an explicit Types value to specify the type to use.

什么是
[[C
?我能以某种方式使其工作吗?如果不能,我真的希望有一个替代方案。

JDBI不知道如何转换数组类型。因此我们需要像这样为char[][]定义ArgumentFactory

import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.Argument;
import org.skife.jdbi.v2.tweak.ArgumentFactory;

import java.sql.Array;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class CharArrayArgument implements ArgumentFactory<char[][]> {
    @Override
    public boolean accepts(Class<?> expectedType, Object value, StatementContext ctx) {
        return value != null && char[][].class.isAssignableFrom(value.getClass());
    }

    @Override
    public Argument build(Class<?> expectedType, final char[][] value, StatementContext ctx) {
        return new Argument() {
            @Override
            public void apply(int position, PreparedStatement statement, StatementContext ctx) throws SQLException {
                Array values = statement.getConnection().createArrayOf("char", value);
                statement.setArray(position, values);
            }
        };
    }
}

谢谢。你认为你也可以回答吗?既然我可以在数据库中存储char[][],我不确定在检索到它之后如何转换回java char[][]。可能应该在原始问题中提出。
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.Argument;
import org.skife.jdbi.v2.tweak.ArgumentFactory;

import java.sql.Array;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class CharArrayArgument implements ArgumentFactory<char[][]> {
    @Override
    public boolean accepts(Class<?> expectedType, Object value, StatementContext ctx) {
        return value != null && char[][].class.isAssignableFrom(value.getClass());
    }

    @Override
    public Argument build(Class<?> expectedType, final char[][] value, StatementContext ctx) {
        return new Argument() {
            @Override
            public void apply(int position, PreparedStatement statement, StatementContext ctx) throws SQLException {
                Array values = statement.getConnection().createArrayOf("char", value);
                statement.setArray(position, values);
            }
        };
    }
}
    dbi.registerArgumentFactory(new CharArrayArgument());
    GameDao gameDao = dbi.open(GameDao.class);
    Game game = new Game(1, 2, 3, new char[][]{{'a'}, {'b'}});

    gameDao.createTableIfNotExists();
    gameDao.insert(game);