您可以查看FTS表格作爲CL提到的,但另一種方法是創建一個更簡單的方法來查詢每一列。你可以創建一個函數循環遍歷每一列來創建where子句並使用OR將它們連接在一起。一種自動執行此操作並保存寫入所有44個列名的方法是查詢數據庫中的所有列名稱,並稍後將其用於查詢。
public String columnsLike(String like, String... cols) {
return columnsLike(like, Arrays.asList(cols));
}
public String columnsLike(String like, List<String> cols) {
List<String> where = new ArrayList<>();
for(String column : cols) {
where.add(column+" LIKE '"+like+"'");
}
return where.stream().collect(Collectors.joining(" OR "));
}
public List<String> getColumns(String table) {
ResultSet rs = statement.executeQuery("SELECT * FROM "+table);
ResultSetMetaData rsmd = rs.getMetaData();
List<String> columns = new ArrayList<String>();
for (int i = 1; i < rsmd.getColumnCount(); ++i) { columns.add(rsmd.getColumnName(i)); }
return columns;
}
String query = "SELECT * FROM table_name WHERE "+columnsLike('%'+textField.getText()+'%', "column1", "column2", "column3", "column4", "column5");
// Result:
// SELECT * FROM table_name WHERE column1 LIKE '%hello%' OR column2 LIKE '%hello%' OR column3 LIKE '%hello%' OR column4 LIKE '%hello%' OR column5 LIKE '%hello%'
// However you could save time from writing out every column and load them once into an array.
List<String> columns = getColumns("table_name");
// Then call columnsLike('%'+textField.getText()+'%', columns);
着手匹配,你將不得不通過ResultSet行,以更新特定的列再次檢查他們的選擇查詢的行中更新值。但是,由於我不知道所有列是否都是字符串,因此我使用getObject()
而不是getString()
,但如果所有列都是字符串,則可以更改該列。而且,在不知道數據的情況下,多列可以匹配,所以這將更新儘可能多的匹配。
public void updateColumns(String tableName, List<String> cols, ResultSet rs, String like, String newValue) {
PreparedStatement ps = conn.prepareStatement("UPDATE "+tableName+" SET "+column+" = ? WHERE "+column+" = ? ");
while(rs.next()) {
for(String column : cols) {
String value;
if((value = rs.getObject(column).toString()).matches(".*"+like+".*")) {
ps.setString(1, newValue);
ps.setString(2, value);
ps.addBatch();
}
}
}
ps.executeBatch();
ps.close();
// rs.close();
}
// updateColumns("table_name", columns, resultSet, textField.getText(), textField2.getText());
您必須分別在每列中進行搜索。或者使用[FTS](http://www.sqlite.org/fts3.html)。 –
@CL。是不是可以使用嵌套查詢來完成。內部查詢附加每行的所有列(使用'||'),外部查詢使用通配符對附加數據進行檢查。 – piechuckerr