1

我一直在各种网站上寻找任何答案,但没有一个能回答我的问题。我正在尝试使用 fts 从我的单个数据库中进行搜索,该数据库包含多个表,然后需要将这些表显示到 recyclerview 中。顺便说一句,我正在尝试使用搜索对话框。我阅读了官方的 android 文档以及它的示例搜索字典,但我注意到它从一个名为 definition.txt 的原始文件中获取它的数据(定义列表),这让我感到困惑,因为我碰巧需要获取我的 SQLite 数据库中的我也正在使用 recyclerview。下面是我的表 C++ 中的示例图像,它显示了从我的 SQLite 数据库中获取的术语列表,并且这里也有一个搜索过滤器(这个搜索与我的不同)

在此处输入图像描述

下图来自我家,有搜索视图(我还没有做任何功能。)

在此处输入图像描述

那就是我需要应用我的问题的地方。实际上,我现在对如何实现它感到困惑,尤其是在像自动完成一样键入时它有建议的部分,然后在 recyclerview 中显示结果。

下面是我的数据库

public class LangDatabaseHelper extends SQLiteOpenHelper {

//database name
public static final String DBASE = "Language";

//tables
public static final String TBLCPP = "cpp";
public static final String TBLHTML = "html";
public static final String TBLJAVA = "java";
public static final String TBLJS = "js";
public static final String TBLPHP = "php";
public static final String TBLSQL = "sql";
public static final String TBLXML = "xml";

//db version
public static final int DBVERSION = 1;

//fields
public static final String C_TERM = "c_terms";
public static final String C_ID = "c_id";
public static final String C_DEF = "c_def";
public static final String C_SYNTAX = "c_syntax";
public static final String C_CODE = "c_code";
public static final String HTML_TERM = "html_terms";
public static final String HTML_ID = "html_id";
public static final String HTML_DEF = "html_def";
public static final String HTML_SYNTAX = "html_syntax";
public static final String HTML_CODE = "html_code";
public static final String JAVA_TERM = "java_terms";
public static final String JAVA_ID = "java_id";
public static final String JAVA_DEF = "java_def";
public static final String JAVA_SYNTAX = "java_syntax";
public static final String JAVA_CODE = "java_code";
public static final String JS_TERM = "js_terms";
public static final String JS_ID = "js_id";
public static final String JS_DEF = "js_def";
public static final String JS_SYNTAX = "js_syntax";
public static final String JS_CODE = "js_code";
public static final String PHP_TERM = "php_terms";
public static final String PHP_ID = "php_id";
public static final String PHP_DEF = "php_def";
public static final String PHP_SYNTAX = "php_syntax";
public static final String PHP_CODE = "php_code";
public static final String SQL_TERM = "sql_terms";
public static final String SQL_ID = "sql_id";
public static final String SQL_DEF = "sql_def";
public static final String SQL_SYNTAX = "sql_syntax";
public static final String SQL_CODE = "sql_code";
public static final String XML_TERM = "xml_terms";
public static final String XML_ID = "xml_id";
public static final String XML_DEF = "xml_def";
public static final String XML_SYNTAX = "xml_syntax";
public static final String XML_CODE = "xml_code";


public LangDatabaseHelper(Context context) {
    super(context, DBASE, null, DBVERSION);
    // TODO Auto-generated constructor stub
    SQLiteDatabase db = this.getWritableDatabase();
    Log.d("Database operation","Database created...");

}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL("CREATE TABLE "+TBLCPP+" ("+ C_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+C_TERM+" TEXT, "+C_DEF+" TEXT, "+C_SYNTAX+" TEXT, "+C_CODE+" TEXT )");
    Log.d("Database operation", "Table C++ created...");
    db.execSQL("CREATE TABLE "+TBLHTML+" ("+ HTML_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+HTML_TERM+" TEXT, "+HTML_DEF+" TEXT, "+HTML_SYNTAX+" TEXT, "+HTML_CODE+" TEXT )");
    Log.d("Database operation", "Table HTML created...");
    db.execSQL("CREATE TABLE "+TBLJAVA+" ("+ JAVA_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+JAVA_TERM+" TEXT, "+JAVA_DEF+" TEXT, "+JAVA_SYNTAX+" TEXT, "+JAVA_CODE+" TEXT )");
    Log.d("Database operation", "Table Java created...");
    db.execSQL("CREATE TABLE "+TBLJS+" ("+ JS_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+JS_TERM+" TEXT, "+JS_DEF+" TEXT, "+JS_SYNTAX+" TEXT, "+JS_CODE+" TEXT )");
    Log.d("Database operation", "Table JS created...");
    db.execSQL("CREATE TABLE "+TBLPHP+" ("+ PHP_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+PHP_TERM+" TEXT, "+PHP_DEF+" TEXT, "+PHP_SYNTAX+" TEXT, "+PHP_CODE+" TEXT )");
    Log.d("Database operation", "Table PHP created...");
    db.execSQL("CREATE TABLE "+TBLSQL+" ("+ SQL_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+SQL_TERM+" TEXT, "+SQL_DEF+" TEXT, "+SQL_SYNTAX+" TEXT, "+SQL_CODE+" TEXT )");
    Log.d("Database operation", "Table SQL created...");
    db.execSQL("CREATE TABLE "+TBLXML+" ("+ XML_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+XML_TERM+" TEXT, "+XML_DEF+" TEXT, "+XML_SYNTAX+" TEXT, "+XML_CODE+" TEXT )");
    Log.d("Database operation", "Table XML created...");
}

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS "+TBLCPP);
    Log.d("Database operation", "Database C++ updated...");
    db.execSQL("DROP TABLE IF EXISTS "+TBLHTML);
    Log.d("Database operation", "Database HTML updated...");
    db.execSQL("DROP TABLE IF EXISTS "+TBLJAVA);
    Log.d("Database operation", "Database Java updated...");
    db.execSQL("DROP TABLE IF EXISTS "+TBLJS);
    Log.d("Database operation", "Database JS updated...");
    db.execSQL("DROP TABLE IF EXISTS "+TBLPHP);
    Log.d("Database operation", "Database PHP updated...");
    db.execSQL("DROP TABLE IF EXISTS "+TBLSQL);
    Log.d("Database operation", "Database MySQL updated...");
    db.execSQL("DROP TABLE IF EXISTS "+TBLXML);
    Log.d("Database operation", "Database XML updated...");

    onCreate(db);
}
/**
public void putAllJava(String term, String def, String syntax, String code, SQLiteDatabase db){

    ContentValues cv = new ContentValues();
    cv.put(JAVA_TERM, term);
    cv.put(JAVA_DEF, def);
    cv.put(JAVA_SYNTAX, syntax);
    cv.put(JAVA_CODE, code);
    long l = db.insert(TBLJAVA, null, cv);
    Log.d("Database operation", "One row inserted...");
}

public Cursor getAllJava(SQLiteDatabase db){
    String[] projection = {JAVA_TERM, JAVA_DEF, JAVA_SYNTAX, JAVA_CODE};
    Cursor c = db.query(TBLJAVA, projection, null, null, null, null, null);
    return  c;
}
*/

//C++ CRUD
public void putAllCpp( DataModel datamodel ) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues db_values = new ContentValues();
    db_values.put(C_TERM, datamodel.getTerm());
    db_values.put(C_DEF, datamodel.getDefinition());
    db_values.put(C_SYNTAX, datamodel.getSyntax());
    db_values.put(C_CODE, datamodel.getCode());

    db.insert(TBLCPP, null, db_values);

    db.close();
}

public List<DataModel> getAllCppDataModel(){

    List<DataModel> dataList = new ArrayList<DataModel>();
    String query = "SELECT * FROM " + TBLCPP;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor c = db.rawQuery(query, null);

    while(c.moveToNext()){

        int index0 = c.getColumnIndex(C_ID);
        int index1 = c.getColumnIndex(C_TERM);
        int index2 = c.getColumnIndex(C_DEF);
        int index3 = c.getColumnIndex(C_SYNTAX);
        int index4 = c.getColumnIndex(C_CODE);

        int id = c.getInt(index0);

        String term = c.getString(index1);
        String def = c.getString(index2);
        String syn = c.getString(index3);
        String code = c.getString(index4);
        DataModel model = new DataModel(id, term, def, syn, code);
        dataList.add(model);

    }

    return dataList;
}   

public void deleteCppTable(){
 SQLiteDatabase db = this.getWritableDatabase();
 db.execSQL("DROP TABLE IF EXISTS "+TBLCPP);
 db.execSQL("CREATE TABLE "+TBLCPP+" ("+ C_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+C_TERM+" TEXT, "+C_DEF+" TEXT, "+C_SYNTAX+" TEXT, "+C_CODE+" TEXT )");
    Log.d("Updating Table C++", "Updating...");
db.close();
}

//HTML5 CRUD
public void putAllHtml( DataModel datamodel ) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues db_values = new ContentValues();
    db_values.put(HTML_TERM, datamodel.getTerm());
    db_values.put(HTML_DEF, datamodel.getDefinition());
    db_values.put(HTML_SYNTAX, datamodel.getSyntax());
    db_values.put(HTML_CODE, datamodel.getCode());

    db.insert(TBLHTML, null, db_values);

    db.close();
}

public List<DataModel> getAllHtmlDataModel(){

    List<DataModel> dataList = new ArrayList<DataModel>();
    String query = "SELECT * FROM " + TBLHTML;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor c = db.rawQuery(query, null);

    while(c.moveToNext()){

        int index0 = c.getColumnIndex(HTML_ID);
        int index1 = c.getColumnIndex(HTML_TERM);
        int index2 = c.getColumnIndex(HTML_DEF);
        int index3 = c.getColumnIndex(HTML_SYNTAX);
        int index4 = c.getColumnIndex(HTML_CODE);

        int id = c.getInt(index0);

        String term = c.getString(index1);
        String def = c.getString(index2);
        String syn = c.getString(index3);
        String code = c.getString(index4);
        DataModel model = new DataModel(id, term, def, syn, code);
        dataList.add(model);

    }

    return dataList;
}   

public void deleteHtmlTable(){
 SQLiteDatabase db = this.getWritableDatabase();
 db.execSQL("DROP TABLE IF EXISTS "+TBLHTML);
 db.execSQL("CREATE TABLE "+TBLHTML+" ("+ HTML_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+HTML_TERM+" TEXT, "+HTML_DEF+" TEXT, "+HTML_SYNTAX+" TEXT, "+HTML_CODE+" TEXT )");
    Log.d("Updating Table HTML", "Updating...");
db.close();
    }

//JAVA CRUD
public void putAllJava( DataModel datamodel ) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues db_values = new ContentValues();
db_values.put(JAVA_TERM, datamodel.getTerm());
db_values.put(JAVA_DEF, datamodel.getDefinition());
db_values.put(JAVA_SYNTAX, datamodel.getSyntax());
db_values.put(JAVA_CODE, datamodel.getCode());

db.insert(TBLJAVA, null, db_values);

db.close();
}

public List<DataModel> getAllJavaDataModel(){

List<DataModel> dataList = new ArrayList<DataModel>();
String query = "SELECT * FROM " + TBLJAVA;

SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(query, null);

while(c.moveToNext()){

    int index0 = c.getColumnIndex(JAVA_ID);
    int index1 = c.getColumnIndex(JAVA_TERM);
    int index2 = c.getColumnIndex(JAVA_DEF);
    int index3 = c.getColumnIndex(JAVA_SYNTAX);
    int index4 = c.getColumnIndex(JAVA_CODE);

    int id = c.getInt(index0);

    String term = c.getString(index1);
    String def = c.getString(index2);
    String syn = c.getString(index3);
    String code = c.getString(index4);
    DataModel model = new DataModel(id, term, def, syn, code);
    dataList.add(model);

}

return dataList;
}   

public void deleteJavaTable(){
 SQLiteDatabase db = this.getWritableDatabase();
 db.execSQL("DROP TABLE IF EXISTS "+TBLJAVA);
 db.execSQL("CREATE TABLE "+TBLJAVA+" ("+ JAVA_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+JAVA_TERM+" TEXT, "+JAVA_DEF+" TEXT, "+JAVA_SYNTAX+" TEXT, "+JAVA_CODE+" TEXT )");
Log.d("Updating Table Java", "Updating...");
db.close();
}

//JS CRUD
public void putAllJs( DataModel datamodel ) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues db_values = new ContentValues();
db_values.put(JS_TERM, datamodel.getTerm());
db_values.put(JS_DEF, datamodel.getDefinition());
db_values.put(JS_SYNTAX, datamodel.getSyntax());
db_values.put(JS_CODE, datamodel.getCode());

db.insert(TBLJS, null, db_values);

db.close();
}

public List<DataModel> getAllJsDataModel(){

List<DataModel> dataList = new ArrayList<DataModel>();
String query = "SELECT * FROM " + TBLJS;

SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(query, null);

while(c.moveToNext()){

    int index0 = c.getColumnIndex(JS_ID);
    int index1 = c.getColumnIndex(JS_TERM);
    int index2 = c.getColumnIndex(JS_DEF);
    int index3 = c.getColumnIndex(JS_SYNTAX);
    int index4 = c.getColumnIndex(JS_CODE);

    int id = c.getInt(index0);

    String term = c.getString(index1);
    String def = c.getString(index2);
    String syn = c.getString(index3);
    String code = c.getString(index4);
    DataModel model = new DataModel(id, term, def, syn, code);
    dataList.add(model);

}

return dataList;
}   

public void deleteJsTable(){
 SQLiteDatabase db = this.getWritableDatabase();
 db.execSQL("DROP TABLE IF EXISTS "+TBLJS);
 db.execSQL("CREATE TABLE "+TBLJS+" ("+ JS_ID+" INTEGER PRIMARY KEY     AUTOINCREMENT, "+JS_TERM+" TEXT, "+JS_DEF+" TEXT, "+JS_SYNTAX+" TEXT, "+JS_CODE+" TEXT )");
Log.d("Updating Table JS", "Updating...");
db.close();
}

//PHP CRUD
public void putAllPhp( DataModel datamodel ) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues db_values = new ContentValues();
db_values.put(PHP_TERM, datamodel.getTerm());
db_values.put(PHP_DEF, datamodel.getDefinition());
db_values.put(PHP_SYNTAX, datamodel.getSyntax());
db_values.put(PHP_CODE, datamodel.getCode());

db.insert(TBLPHP, null, db_values);

db.close();
}

public List<DataModel> getAllPhpDataModel(){

List<DataModel> dataList = new ArrayList<DataModel>();
String query = "SELECT * FROM " + TBLPHP;

SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(query, null);

while(c.moveToNext()){

    int index0 = c.getColumnIndex(PHP_ID);
    int index1 = c.getColumnIndex(PHP_TERM);
    int index2 = c.getColumnIndex(PHP_DEF);
    int index3 = c.getColumnIndex(PHP_SYNTAX);
    int index4 = c.getColumnIndex(PHP_CODE);

    int id = c.getInt(index0);

    String term = c.getString(index1);
    String def = c.getString(index2);
    String syn = c.getString(index3);
    String code = c.getString(index4);
    DataModel model = new DataModel(id, term, def, syn, code);
    dataList.add(model);

}

return dataList;
}   

public void deletePhpTable(){
 SQLiteDatabase db = this.getWritableDatabase();
 db.execSQL("DROP TABLE IF EXISTS "+TBLPHP);
 db.execSQL("CREATE TABLE "+TBLPHP+" ("+ PHP_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+PHP_TERM+" TEXT, "+PHP_DEF+" TEXT, "+PHP_SYNTAX+" TEXT, "+PHP_CODE+" TEXT )");
Log.d("Updating Table PHP", "Updating...");
db.close();
}

//SQL CRUD
public void putAllSql( DataModel datamodel ) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues db_values = new ContentValues();
db_values.put(SQL_TERM, datamodel.getTerm());
db_values.put(SQL_DEF, datamodel.getDefinition());
db_values.put(SQL_SYNTAX, datamodel.getSyntax());
db_values.put(SQL_CODE, datamodel.getCode());

db.insert(TBLSQL, null, db_values);

db.close();
}

public List<DataModel> getAllSqlDataModel(){

List<DataModel> dataList = new ArrayList<DataModel>();
String query = "SELECT * FROM " + TBLSQL;

SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(query, null);

while(c.moveToNext()){

    int index0 = c.getColumnIndex(SQL_ID);
    int index1 = c.getColumnIndex(SQL_TERM);
    int index2 = c.getColumnIndex(SQL_DEF);
    int index3 = c.getColumnIndex(SQL_SYNTAX);
    int index4 = c.getColumnIndex(SQL_CODE);

    int id = c.getInt(index0);

    String term = c.getString(index1);
    String def = c.getString(index2);
    String syn = c.getString(index3);
    String code = c.getString(index4);
    DataModel model = new DataModel(id, term, def, syn, code);
    dataList.add(model);

}

return dataList;
}   

public void deleteSqlTable(){
 SQLiteDatabase db = this.getWritableDatabase();
 db.execSQL("DROP TABLE IF EXISTS "+TBLSQL);
 db.execSQL("CREATE TABLE "+TBLSQL+" ("+ SQL_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+SQL_TERM+" TEXT, "+SQL_DEF+" TEXT, "+SQL_SYNTAX+" TEXT, "+SQL_CODE+" TEXT )");
Log.d("Updating Table SQL", "Updating...");
db.close();
}

//XML CRUD
public void putAllXml( DataModel datamodel ) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues db_values = new ContentValues();
db_values.put(XML_TERM, datamodel.getTerm());
db_values.put(XML_DEF, datamodel.getDefinition());
db_values.put(XML_SYNTAX, datamodel.getSyntax());
db_values.put(XML_CODE, datamodel.getCode());

db.insert(TBLXML, null, db_values);

db.close();
}

public List<DataModel> getAllXmlDataModel(){

List<DataModel> dataList = new ArrayList<DataModel>();
String query = "SELECT * FROM " + TBLXML;

SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(query, null);

while(c.moveToNext()){

    int index0 = c.getColumnIndex(XML_ID);
    int index1 = c.getColumnIndex(XML_TERM);
    int index2 = c.getColumnIndex(XML_DEF);
    int index3 = c.getColumnIndex(XML_SYNTAX);
    int index4 = c.getColumnIndex(XML_CODE);

    int id = c.getInt(index0);

    String term = c.getString(index1);
    String def = c.getString(index2);
    String syn = c.getString(index3);
    String code = c.getString(index4);
    DataModel model = new DataModel(id, term, def, syn, code);
    dataList.add(model);

}

return dataList;
}   

public void deleteXmlTable(){
 SQLiteDatabase db = this.getWritableDatabase();
 db.execSQL("DROP TABLE IF EXISTS "+TBLXML);
 db.execSQL("CREATE TABLE "+TBLXML+" ("+ XML_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+XML_TERM+" TEXT, "+XML_DEF+" TEXT, "+XML_SYNTAX+" TEXT, "+XML_CODE+" TEXT )");
Log.d("Updating Table XML", "Updating...");
db.close();
}


}
4

0 回答 0