想要从数据库中搜索名称而不是数据库中的最后一个字段

时间:2015-02-25 09:38:05

标签: android

DBhelper Class

 public class DBHelper extends SQLiteOpenHelper{

    private static final String DB_NAME_TWO = "Loan_TWO.db";
    private static final int VERSION = 1;
    private SQLiteDatabase mDb;

    public DBHelper(Context context) {
        super(context, DB_NAME_TWO, null, VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {


        //      db.execSQL("create table " + TABLE_COLLEGES + " ( "
        //              + COL_ID + " integer primary key autoincrement, "
        //              + COL_NAME + " text, "
        //              + COL_ADDRESS + " text);");


        db.execSQL("create table " + LOAN_TABLE + " ( "
                + ID + " integer primary key autoincrement, "
                + Name + " text,"
                + START_DATE + " text, "
                + END_DATE + " text, "
                + LOAN_AMOUNT + " integer, "
                + RATE_OF_INTEREST + " integer ," 
                + FINAL_AMOUNT + " integer) ;");



        db.execSQL("create table " + AMOUNT_TABLE_ONE + " ( "
                + AMOUNT_ID + " integer primary key autoincrement, "
                + ID + " integer, "
                + Name + " text, "
                + AMOUNT + " text, "
                + BALANCE_AMOUNT + " text, "
                + NEXT_DATE + " text, "
                + TODAYS_DATE + " text); ");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + LOAN_TABLE);
        db.execSQL("DROP TABLE IF EXISTS " + AMOUNT_TABLE_ONE);

        onCreate(db);
    }
}

SearchActivity类

    public class SearchActivity extends Activity {

    private EditText Search_By_Name;
    private ArrayList<Personal_loan> array;
    private ArrayAdapter<Personal_loan> adapter;
    private ListView listView;
    SQLiteDatabase db;

    private DBHelper helper;
    Personal_loan p = new Personal_loan();

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        Search_By_Name = (EditText)findViewById(R.id.SearchName);

        array = new ArrayList<Personal_loan>();

        listView = (ListView) findViewById(R.id.listView1);
        adapter = new ArrayAdapter<Personal_loan>(this, android.R.layout.simple_list_item_1, array);
        listView.setAdapter(adapter);

    getData();

    }
    private void getData() {
        helper = new DBHelper(this);
        db = helper.getWritableDatabase();

        String columns[] = new String[] {ID,Name,START_DATE,END_DATE,LOAN_AMOUNT,RATE_OF_INTEREST,FINAL_AMOUNT};
        Cursor cursor = db.query( true, LOAN_TABLE, columns,"Name=?",new String[]{"Amit"}, null, null, null, null, null);

        if (!cursor.isAfterLast()) {
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {

                p = new Personal_loan();
                p.id = cursor.getInt(0);
                p.name = cursor.getString(1);
                p.sd = cursor.getString(2);
                p.ed = cursor.getString(3);
                p.la = cursor.getDouble(4);
                p.roi = cursor.getFloat(5);
                p.amt=cursor.getString(6);
                array.add(p);
                cursor.moveToNext();
                Search_By_Name.addTextChangedListener(new TextWatcher() {

                    public void onTextChanged(CharSequence s, int start, int before, int count) 
                    {
                        // TODO Auto-generated method stub

                    } 

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

                    }

                    public void afterTextChanged(Editable s) 
                    {

                        SearchActivity.this.adapter.getFilter().filter(s);
                    }
                });

            }

            cursor.close();
            db.close();
            adapter.notifyDataSetChanged();
        }       

    }


   public void onBackPressed() {
        // TODO Auto-generated method stub
        Intent i=new Intent(SearchActivity.this,FirstActivity.class);
        startActivity(i);
    }
}

Personal_Loan

public class Personal_loan {
    public int id;
    String name;
    String sd;
    String ed;
    Double la;
    float roi;
    String amt;


    @Override
    public String toString() {
        return " Person ID =" + id + "\n Name =" + name + "\n Start Date =" + sd
                + "\n End Date =" + ed + "\n Loan Amount =" + la + "\n Rate Of Interest =" + roi +"\n Loan Final Amount= "+ amt  ;
    }
}

我想从数据库中搜索名称并根据在edittext上输入的名称字段过滤列表,上面的代码按最后一个字段搜索列表,即最终金额,但我想按名称搜索它而不是最终金额。

4 个答案:

答案 0 :(得分:1)

您正在进行一个完全没有WHERE子句的查询,因此您可以有效地列出表中的所有记录。 请查看query方法的文档,并使用适当的选择和selectionArgs来满足您的需求。

编辑:在我看来,你更新了这个问题。您有一个要在列表视图中列出的sqlite数据库,但是您手动迭代游标,将项添加到数组中,然后在列表视图上使用ArrayAdapter。您应该使用CursorAdapter,甚至是SimpleCursorAdapter,并完全废弃数组。将包含所需查询参数的合适Cursor(包括上面链接中说明的合适where子句)传递给适配器。

当我解释原始问题时,它是关于如何按名称过滤记录,而不是如何创建列表适配器。

答案 1 :(得分:1)

您应该尝试使用SimpleCursorAdapter代替ArrayAdapter,并使用adapter.swapCursor(cursor)将新光标与afterTextChanged上的正确查询一起使用。

可选地,建议使用loaders进行任何数据库访问,这样就不会减慢主ui线程的速度。

答案 2 :(得分:0)

Use query like

String query = "SELECT * FROM  AMOUNT_TABLE_ONE  WHERE Name LIKE 'your_expected_name%'"
Cursor cursor = db.rawquery(query,null);
cursor.moveToFirst();

答案 3 :(得分:-1)

使用自定义适配器使用以下代码:

public class SearchActivity extends Activity {

private EditText Search_By_Name;
private ArrayList<Personal_loan> array;
private ListAdapter<Personal_loan> adapter;
private ListView listView;
SQLiteDatabase db;

private DBHelper helper;
Personal_loan p = new Personal_loan();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);
    Search_By_Name = (EditText)findViewById(R.id.SearchName);

    array = new ArrayList<Personal_loan>();

    listView = (ListView) findViewById(R.id.listView1);
    getData();
    adapter = new ListAdapter(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, array);
    listView.setAdapter(adapter);
    Search_By_Name.addTextChangedListener(new TextWatcher() {

                public void onTextChanged(CharSequence s, int start, int before, int count) 
                {
                  SearchActivity.this.adapter.getFilter().filter(s);

                } 

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

                }

                public void afterTextChanged(Editable s) 
                {


                }
            });


}
private void getData() {
    helper = new DBHelper(this);
    db = helper.getWritableDatabase();

    String columns[] = new String[] {ID,Name,START_DATE,END_DATE,LOAN_AMOUNT,RATE_OF_INTEREST,FINAL_AMOUNT};
    Cursor cursor = db.query( true, LOAN_TABLE,null, null, null, null, null);

    if (cursor!=null) {
        while (cursor.moveToNext()) {
            p = new Personal_loan();
            p.id = cursor.getInt(0);
            p.name = cursor.getString(1);
            p.sd = cursor.getString(2);
            p.ed = cursor.getString(3);
            p.la = cursor.getDouble(4);
            p.roi = cursor.getFloat(5);
            p.amt=cursor.getString(6);
            array.add(p);
         }
       }
        cursor.close();
        db.close();

 }

public void onBackPressed() {
    // TODO Auto-generated method stub
    Intent i=new Intent(SearchActivity.this,FirstActivity.class);
    startActivity(i);
}

ListAdapter.java:

public class ListAdapter extends ArrayAdapter<Personal_loan> {

private Context context;
private ArrayList<Personal_loan> array;
private ArrayList<Personal_loan> aListDump;

public ListAdapter(Context context, int resource, int textViewResourceId,
        ArrayList<Personal_loan> array) {
    super(context, resource, textViewResourceId, array);
    this.context = context;
    this.array = array;
    aListDump = array;
}

@Override
public int getCount() {
    return array.size();
}

@Override
public Personal_loan getItem(int position) {
    return array.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}
@Override
public Filter getFilter() {

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,
                FilterResults results) {
            // TODO Auto-generated method stub
            array = (ArrayList<Personal_loan>) results.values;
            notifyDataSetChanged();
        }

        // getting results based on the search text view text
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            String seq = constraint.toString().toLowerCase();
            ArrayList<Personal_loan> list = new ArrayList<Personal_loan>();
            if (seq.trim().length() == 0 || seq == null) {
                results.count = aListDump.size();
                results.values = aListDump;
                list.addAll(aListDump);
            } else {
                for (Personal_loan bean : aListDump) {
                    if (bean.name.toLowerCase().contains(seq.toLowerCase()))
                        list.add(bean);
                }
            }
            results.count = list.size();
            results.values = list;
            return results;
        }
    };
    return filter;
}
}
相关问题