AndroidGreece.gr
https://androidgreece.gr/forum/

SQLite LIKE Statement
https://androidgreece.gr/forum/viewtopic.php?f=4&t=1751
Page 1 of 1

Author:  chrishohl [ 21 Jun 2011, 03:07 ]
Post subject:  SQLite LIKE Statement

Γεια και χαρά σε όλους!

Ασχολούμαι εδώ και λίγο καιρό με το development σε android (γράφω σε .net). Αποφάσισα να γράψω μια εφαρμογή η οποία διαχειρίζεται κάποια δεδομένα SQLite. Βασικά θέλω να φτιάξω ένα listactivity παρόμοιο με αυτό των contacts. Έχω ήδη φτιάξει το layout με ένα EditText στην κορυφή για να μπορώ να κάνω αναζήτηση (filter) στην λίστα. Όλα δουλεύουν κανονικά και με το νόμο ΕΚΤΟΣ από την άτιμη LIKE statement της SQLite η οποία, παρόλες τις φιλότιμες προσπάθειες μου, επιμένει να είναι case sensitive.
Σας παραθέτω μερικά code blocks:

========== OPENHELPER ===========
public class appdatabase extends SQLiteOpenHelper {

public static final String CATEGORIESCS_TABLENAME = "categoriescs";
public static final String CATEGORIESCS_KEYNAME = "_id";
public static final String PROFESSIONS_TABLENAME = "professions";
public static final String PROFESSIONS_KEYNAME = "_id";
public static final String POSITIONS_TABLENAME = "positions";
public static final String POSITIONS_KEYNAME = "_id";

private static final String DATABASE_NAME = "mubilling";
private static final int DATABASE_VERSION = 1;

private static final String CREATE_categoriescs_SCRIPT = "CREATE TABLE " + CATEGORIESCS_TABLENAME + " (" + CATEGORIESCS_KEYNAME + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, catdesc TEXT);";
private static final String CREATE_professions_SCRIPT = "CREATE TABLE " + PROFESSIONS_TABLENAME +" (" + PROFESSIONS_KEYNAME + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, prodesc TEXT);";
private static final String CREATE_positions_SCRIPT = "CREATE TABLE " + POSITIONS_TABLENAME + " (" + POSITIONS_KEYNAME + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, posdesc TEXT);";

//** Constructor */
public appdatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_categoriescs_SCRIPT);
db.execSQL(CREATE_professions_SCRIPT);
db.execSQL(CREATE_positions_SCRIPT);
}


============ ΦΙΛΤΡΑΡΙΣΜΑ ΛΙΣΤΑΣ ============
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recordsbrowser);

ImageButton cmdAddRecord = (ImageButton)findViewById(R.id.cmdAddRecord);
cmdAddRecord.setOnClickListener(cmdAddRecord_Click);

txtSearch = (EditText) findViewById(R.id.txtSearchList);
txtSearch.setHint(apputils.getResourceString(getBaseContext(), R.string.hint_categoriescssearch));
txtSearch.addTextChangedListener(filterTextWatcher);

appdbhelper = new appdatabase(this);
SQLiteDatabase db = appdbhelper.getReadableDatabase();

categoriescs = db.query(appdatabase.CATEGORIESCS_TABLENAME, null, null, null, null, null, "catdesc COLLATE UNICODE");
startManagingCursor(categoriescs);

categoriescslist = new SimpleCursorAdapter(this, R.layout.simplebrowseritem_layout, categoriescs, new String[] {"catdesc"}, new int[] {R.id.txtField1});
categoriescslist.setFilterQueryProvider(new FilterQueryProvider() {
@Override
public Cursor runQuery(CharSequence constraint) {
String partialValue = constraint.toString();
return appdbhelper.getReadableDatabase().query(appdatabase.CATEGORIESCS_TABLENAME, null, "catdesc LIKE ? ", new String[]{partialValue + "%"}, null, null, "catdesc COLLATE UNICODE");
}
});

setListAdapter(categoriescslist);

registerForContextMenu(getListView());
}

Αν μπορεί να με βοηθήσει κάποιος θα του ήμουν υπόχρεος!

Ευχαριστώ πολύ

Υ.Γ. Μία διόρθωση
Η Like statement στην SQLite είναι case-insesitive μόνο στους Αγγλικούς χαρακτήρες ενώ στα Ελληνικά είναι case-sensitive...

Page 1 of 1 All times are UTC + 2 hours [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/