私はここで何かが分かりませんか?java.sqlite setObjectがPreparedStatementに設定されていません
org.xerial:sqlite-jdbc:3.21.0
を使用してSQLiteローカルデータベースに対してクエリを実行する方法は次のとおりです。私は、次の値と一緒にメソッドに次のSQLを渡すとき
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;
}
しかし、彼らは設定されません(それはまた、例外をスローしません)。それは内部的にそれを割り当てているようですが、データベースに伝えるのは忘れてしまいます。
SELECT * FROM 'airlines' WHERE 'name' LIKE ? LIMIT 1
vals: size = 1 {"MyAirline"}
私はデバッグからループ内に入ってsetObject
になることがわかります。 ANSI標準のSQLでは
Owwwwwwwww! :)ファンタスティック、それは今働いている。どうもありがとう。 – Christian