大佬教程收集整理的这篇文章主要介绍了SQLite Android rawQuery 只返回精确值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 SQLite 数据库,其中包含一些食品和饮料及其多语言应用程序的卡路里值。我想在 androID 应用程序中显示它们,但我的查询不会返回值,除非我写下确切的值。
我搜索牛奶时的数据库样本部分:
public class SearchFragment extends Fragment {
button searchbutton;
EditText editText;
VIEw v;
cursor cursor;
@OverrIDe
public voID onCreate(Bundle savedInstanceStatE) {
super.onCreate(savedInstanceStatE);
}
@OverrIDe
public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceStatE) {
v = inflater.inflate(R.layout.fragment_search,container,falsE);
addListenerOnbutton(v);
return v;
}
private voID addListenerOnbutton(VIEw v) {
searchbutton = v.findVIEwByID(R.ID.searchfragmenT_Button);
editText = v.findVIEwByID(R.ID.searchfragment_edittext);
searchbutton.setonClickListener(new VIEw.onClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
String keyString = editText.getText().toString();
new Foodquery().execute(keyString);
}
});
}
private class Foodquery extends AsyncTask<String,VoID,VoID>{
@OverrIDe
protected VoID doInBACkg@R_696_7060@String [] keys) {
String name_col;
DIEtApPDAtabaseHelper daDBHelper;
sqliteDatabase daDB;
daDBHelper = new DIEtApPDAtabaseHelper(getContext());
try {
daDB = daDBHelper.getReadableDatabase();
if (Locale.getDefault().getLanguage() == "tr")
name_col = "name_tr";
else
name_col = "name_eng";
String query = "SELECT * FROM food_data WHERE "
+ name_col + " = ?" ;
cursor = daDB.rawquery(query,new String[]{"%" + keys[0] + "%"});
int i = cursor.getCount();
daDB.close();
} catch (sqliteException E){
Log.d("SearchFragment","doInBACkground: " + E);
}
return null;
}
}
}
当我调试“int i = cursor.getCount();”时行,上面的代码不会向游标返回任何值。因此我总是出错。但是不知何故,当我将 rawquery 的 SELEctionArgs 部分从 "%" + keys[0] + "%" 更改为仅 keys[0] 并输入任何行的直接值(例如:Milk (WholE))区分大小写时,我确实得到了1 结果在游标中。 这里是数据库助手类
public class DIEtApPDAtabaseHelper extends sqliteOpenHelper {
private static String db_name = "food_data.db";
private static String DB_PATH = "";
private static final int DB_VERSION = 1;
private sqliteDatabase mDataBase;
private final Context mContext;
private Boolean mNeedupdate = false;
public DIEtApPDAtabaseHelper(Context context) {
super(context,db_name,null,DB_VERSION);
if (androID.os.build.VERSION.SDK_INT >= 17)
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
else
DB_PATH = "/data/data/" + context.getPackagename() + "/databases/";
Log.d("DIEtpath",DB_PATH);
this.mContext = context;
copyDataBase();
this.getReadableDatabase();
}
public voID updateDataBase() throws IOException {
if (mNeedupdatE) {
file dbfile = new file(DB_PATH + db_name);
if (dbfile.exists())
dbfile.delete();
copyDataBase();
mNeedupdate = false;
}
}
private Boolean checkDataBase() {
file dbfile = new file(DB_PATH + db_name);
return dbfile.exists();
}
private voID copyDataBase() {
if (!checkDataBase()) {
this.getReadableDatabase();
this.close();
try {
copyDBfile();
} catch (IOException mIOException) {
throw new Error("ErrorcopyingDataBase");
}
}
}
private voID copyDBfile() throws IOException {
inputStream minput = mContext.getAssets().open(db_name);
//inputStream minput = mContext.getresources().openRawresource(R.raw.info);
OutputStream mOutput = new fiLeoutputStream(DB_PATH + db_name);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = minput.read(mBuffer)) > 0)
mOutput.write(mBuffer,mLength);
mOutput.flush();
mOutput.close();
minput.close();
}
public Boolean openDataBase() throws sqlException {
mDataBase = sqliteDatabase.openDatabase(DB_PATH + db_name,sqliteDatabase.CREATE_IF_NECESSARY);
return mDataBase != null;
}
@OverrIDe
public synchronized voID close() {
if (mDataBase != null)
mDataBase.close();
super.close();
}
@OverrIDe
public voID onCreate(sqliteDatabase db) {
}
@OverrIDe
public voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
if (newVersion > oldVersion)
mNeedupdate = true;
}
}
=
运算符进行精确匹配。如果要使用 %
之类的通配符,请使用 LIKE
运算符,如
String query = "SELECT * FROM food_data WHERE "
+ name_col + " LIKE ?" ;
以上是大佬教程为你收集整理的SQLite Android rawQuery 只返回精确值全部内容,希望文章能够帮你解决SQLite Android rawQuery 只返回精确值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。