java.sqlite setObject未在PreparedStatement上设置

时间:2017-11-26 13:46:32

标签: java sql sqlite jdbc

我错过了一些明显的东西吗?

我有以下方法使用org.xerial:sqlite-jdbc:3.21.0对SQLite本地数据库执行查询。

public List<HashMap<String, Object>> executeQuery(String sql, List<Object> vals) throws Exception {
    List<HashMap<String, Object>> rows = new ArrayList<>();
    Connection conn = getConnection();
    try (PreparedStatement stmnt = conn.prepareStatement(sql)) {
        if (!vals.isEmpty()) {
            for (int i = 0; i < vals.size(); i++) {
                stmnt.setObject(i + 1, vals.get(i));
            }
        }
        ResultSet rs = stmnt.executeQuery();
        ResultSetMetaData meta = rs.getMetaData();
        HashMap<String, Object> row;
        while (rs.next()) {
            row = new HashMap<>();
            for (int i = 0; i < meta.getColumnCount(); i++) {
                row.put(meta.getColumnName(i + 1), rs.getObject(i + 1));
            }
            rows.add(row);
        }
    } finally {
        putConnection(conn);
    }
    return rows;
}

但是,当我将以下SQL与以下值一起传递给方法时,它们不会被设置(但它也不会引发异常)。它就像在内部分配它,但忘记告诉数据库。

SELECT * FROM 'airlines' WHERE 'name' LIKE ? LIMIT 1

vals: size = 1 {"MyAirline"}

我可以从调试中看到它进入循环setObject

enter image description here

0 个答案:

没有答案