【问题标题】:how to search for data in database by some keywords in android如何通过android中的一些关键字在数据库中搜索数据
【发布时间】:2012-06-21 09:33:20
【问题描述】:

这个程序是用于类在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);
}
}

以下是活动类代码。 觉得应该很容易理解

 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;
    }

}
}

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

【问题讨论】:

  • 你可以使用这样的查询"SELECT * FROM Student WHERE id=" + ID
  • 谢谢...但是关键字是在edittext中输入的..我不知道如何链接...不介意我是android新手

标签: android android-intent


【解决方案1】:

据我了解,我认为您可以使用Like Clause

例如:

   " SELECT * FROM Student WHERE City LIKE '"+ keyWord +%'"

【讨论】:

  • 我试过了,但我没有工作......它显示一个没有数据的平淡无奇的窗口......有没有其他方法可以这样做
【解决方案2】:

替换光标 c=MYdatabase.rawQuery("SELECT * FROM Student", null); 使用光标 c=MYdatabase.rawQuery("SELECT * FROM Student WHERE id=" + ID, null);

使用 editText.getText().toString() 从 EditText 中检索 ID;并在查询数据库时将其作为参数传递。

【讨论】:

  • :谢谢...如何在查询数据库时将edittext作为参数传递
  • 按名称 ID 创建一个字符串对象,该对象将保存 editText 值。并将它传递给这个 Cursor c=MYdatabase.rawQuery("SELECT * FROM Student WHERE id=" + ID, null);
  • 有没有其他方法可以在数据库中进行搜索
  • 尝试理解我贴出来的代码sn-p并实现
  • ok...如果我的字符串是 user 并且 edittext 是 et...user=et.getText().toString();..是我使用的和 c=MYdatabase.rawQuery(" SELECT* FROM Student WHERE NAME='"+user+"'", null);是光标代码...我的代码有什么问题吗?
【解决方案3】:
    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));
}
          }

【讨论】:

  • :omg....非常感谢你...从早上起我就一直在琢磨该怎么做....我们如何才能将这个数据库发送到其他服务器跨度>
  • 对不起,我不太明白...如果帖子有帮助,请不要忘记点击接受按钮
  • :先生刚刚让我通过提供服务器的ip地址将数据库文件发送到服务器
  • stackoverflow.com/q/6523761/1105585 .... 你介意现在接受我的回答吗
猜你喜欢
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 2012-10-08
  • 2022-01-19
  • 2014-09-02
  • 1970-01-01
相关资源
最近更新 更多