android - 如何在android中通过某些关键字搜索数据库中的数据

标签 android android-intent

这个程序是让类在Listview中显示数据库。我想添加通过给定关键字在数据库中搜索所需数据。如何添加在同一类中使用关键字在数据库中搜索的代码

  public class DisplayActivity extends Activity
  {

private ArrayList<String> arraylist=new ArrayList<String>();
private SQLiteDatabase MYdatabase;
ListView listView;
Button back;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display);
    listView=(ListView)findViewById(R.id.listView1);

        DatabaseHelper db=new DatabaseHelper(this);
        MYdatabase=db.getWritableDatabase();
    try {   
        Cursor c=MYdatabase.rawQuery("SELECt * FROM Student", null);
        if(c!=null)
        {
            if(c.moveToFirst())
            {
                do {
                    String name=c.getString(c.getColumnIndex("NAME"));
                    String age=c.getString(c.getColumnIndex("AGE"));
                    String address=c.getString(c.getColumnIndex("ADDRESS"));
                    arraylist.add("Name :"+name+"\n"+"Age :"+age+"\n"+"Address :"+address+"\n");

                } while (c.moveToNext());
            }
        }

        c.close();
        c.deactivate();

    } catch (SQLiteException e) {

        Log.d(getClass().getSimpleName(), "could not create"+"or open the database");

    }
    finally
    {
        if(MYdatabase!=null)
        {
          MYdatabase.close();
        }
    }
    listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arraylist));
}
public void Back(View v)
{
    Intent back=new Intent(DisplayActivity.this,DbExampleActivity.class);
    startActivity(back);
}
}

以下是 Activity 类代码。 我认为这很容易理解

 public class DbExampleActivity extends Activity implements OnClickListener{
 Button submit,select,search;
 AlertDialog di;
 private SQLiteDatabase sqLiteDatabase;
 private SQLiteStatement sqLiteStatement;
 private String name,age,address;
 private static final String TABLE_NAME="Student";
@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    submit=(Button)findViewById(R.id.savebutton);
    select=(Button)findViewById(R.id.detailsbutton);
    search=(Button)findViewById(R.id.searchbutton);
    DatabaseHelper db=new DatabaseHelper(this);
    sqLiteDatabase=db.getWritableDatabase();
    sqLiteStatement=sqLiteDatabase.compileStatement("insert into "+TABLE_NAME+"(name,age,address)values(?,?,?)");
   submit.setOnClickListener(this);
   select.setOnClickListener(this);
   search.setOnClickListener(this);
}

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.detailsbutton:
        Intent in=new Intent(getApplicationContext(),DisplayActivity.class);
        startActivity(in);

        break;
    case R.id.savebutton:
        name=((EditText)findViewById(R.id.editText1)).getText().toString().trim();
        age=((EditText)findViewById(R.id.editText2)).getText().toString().trim();
        address=((EditText)findViewById(R.id.editText3)).getText().toString().trim();

        sqLiteStatement.bindString(1, name);
        sqLiteStatement.bindString(2, age);
        sqLiteStatement.bindString(3, address);
        sqLiteStatement.executeInsert();

        Toast.makeText(getApplicationContext(), "Data Saved", Toast.LENGTH_LONG).show();
        break;
    case R.id.searchbutton:
         Intent search=new Intent(getApplicationContext(),DisplayActivity.class);
         startActivity(search);
    default:
        break;
    }

}
}

要添加什么代码才能允许使用关键字搜索数据库

最佳答案

    EditText1=(EditText)findViewById(R.id.editText1);
    EditText1.addTextChangedListener(new TextWatcher() {

        @Override
                 public void onTextChanged(CharSequence s, int start, int before,int count) 
    {
                     populateListView(s.toString());

                    }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });

              public void populateListview(String s){

           DatabaseHelper db = new DatabaseHelper(this);
           MYdatabase = db.getWritableDatabase();

    try {   
    Cursor c=MYdatabase.rawQuery(" SELECT * FROM Student WHERE City ID '"+s+%"'", null); 
    if(c!=null)
    {
        if(c.moveToFirst())
        {
            do {
                String name=c.getString(c.getColumnIndex("NAME"));
                String age=c.getString(c.getColumnIndex("AGE"));
                String address=c.getString(c.getColumnIndex("ADDRESS"));
                arraylist.add("Name :"+name+"\n"+"Age :"+age+"\n"+"Address :"+address+"\n");

            } while (c.moveToNext());
        }
    }

    }

    c.close();
    db.close();
    db=null;

    listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arraylist));
}
          }

关于android - 如何在android中通过某些关键字搜索数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11099371/

相关文章:

android - 在 ScrollView 中列出

android - 如何在不改变按钮大小的情况下改变按钮的颜色?

java - Android 应用内购买责任

android - 使用适用于 Android 的 Facebook SDK 3 以额外权限登录

android - 如何从PayPal移动支付库获取用户名、电话和邮箱

android - 尝试切换到选项卡式 fragment Activity 时出现布局 "resource not found"异常

Android SQLite 不会向数据库添加值

java - 无法弄清楚这个 Obj 文件解析器有什么问题

android - 如何从服务调用 Activity 中的方法

带有 pendingIntents 的 Android SendMultipartTextMessage,所有部分的额外值都相同