Java 如何搜索所有列并更新特定值SQLite

Java 如何搜索所有列并更新特定值SQLite,java,database,sqlite,Java,Database,Sqlite,我有一个SQLite数据库,有44列700行。我用Java创建了一个用户界面(我有两个textField和一个按钮),用于搜索第一个textField中具有特定值的所有列,并在第二个textField中使用另一个值更新它 问题是我不知道在第一个文本字段中哪个列有输入的值,这就是为什么我不能直接使用“updatetable\u name SET column\u name…”语句的原因 我尝试的是 "Select * FROM table_name WHERE '%" + TextField.ge

我有一个SQLite数据库,有44列700行。我用Java创建了一个用户界面(我有两个textField和一个按钮),用于搜索第一个textField中具有特定值的所有列,并在第二个textField中使用另一个值更新它

问题是我不知道在第一个文本字段中哪个列有输入的值,这就是为什么我不能直接使用
“updatetable\u name SET column\u name…”
语句的原因

我尝试的是

"Select * FROM table_name WHERE '%" + TextField.getText() + "%'; 
但它不起作用。
你能帮我建立正确的查询吗?

你可以像CL提到的那样查看FTS表,但另一种方法是创建一种更简单的方法来查询每一列。您可以创建一个函数来循环遍历每一列以生成其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);

您必须分别在每列中搜索。或者使用。@CL.is不是。它可以使用嵌套查询来完成。内部查询附加每行的所有列(使用
| |
),外部查询在附加数据上使用通配符检查文本。Select query非常有效,谢谢。你能帮助建立更新语句吗?当我将您的查询发送到数据库时,它会给出一个完整的行,我想用textField2.getText()值更新该特定值。非常感谢您的帮助我编辑了我的答案,以包括更新从结果集中找到的任何匹配项。感谢您编辑您的答案,它适用于前10列(当我输入它找到并更新的前10列的值时),但在11列之后。列(当它在前10列中找不到时)给了我NullPointerException。怎么可能呢?我试过“rs.setFetchSize(100);”但它也不起作用。你能帮助我吗?多谢各位。
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());