Android SQlite 从数据库中获取全部
Android SQlite get all from database
我有一个微调器,其中填充了来自 SQLite 数据库的项目。我这样做如下:
private void loadSpinnerData() {
baseDatosHistorico db = new baseDatosHistorico(this, "alertasdb.db", null, 1);
List<String> labels = db.getNomServidor();
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,labels);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
}
getNomServidor()
是一个 class (baseDatosHistorico) 中声明的方法,它扩展自 SQLiteOpenHelper,其功能是 select 的名称"n_servidor" 列中的服务器保存在 SQLite 数据库中。这很好用。
当我 select 来自微调器的 ITEM 以根据 ITEM selected(WHERE 子句)在 AlertDialog 中显示来自数据库的数据时,我遇到了问题。我有以下功能:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
String label = parent.getItemAtPosition(position).toString();
baseDatosHistorico bbdd = new baseDatosHistorico(this, "alertasdb.db", null, 1);
SQLiteDatabase bd = bbdd.getReadableDatabase();
Cursor cursor = bd.rawQuery("SELECT date, description FROM alerts WHERE n_servidor = "+ label + "", null);
if (cursor.moveToFirst()){
AlertDialog.Builder dialog = new AlertDialog.Builder(BbddActivity.this);
dialog.setIcon(android.R.drawable.ic_dialog_info);
dialog.setTitle(label);
dialog.setMessage(cursor.getString(0) + " " + cursor.getString(1));
dialog.setCancelable(false);
dialog.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
dialog.show();
}
}
LogCat 说:
07-28 17:20:02.056: E/AndroidRuntime(563): FATAL EXCEPTION: main
07-28 17:20:02.056: E/AndroidRuntime(563): android.database.sqlite.SQLiteException: no such column: hostname1: , while compiling: SELECT fecha, descripcion FROM alertas_email WHERE n_servidor = hostname1
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1324)
07-28 17:20:02.056: E/AndroidRuntime(563): at activities.monitorapp.BbddActivity.onItemSelected(BbddActivity.java:57)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.widget.AdapterView.fireOnSelected(AdapterView.java:871)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.widget.AdapterView.access0(AdapterView.java:42)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:837)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.os.Handler.handleCallback(Handler.java:587)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.os.Handler.dispatchMessage(Handler.java:92)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.os.Looper.loop(Looper.java:123)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-28 17:20:02.056: E/AndroidRuntime(563): at java.lang.reflect.Method.invokeNative(Native Method)
07-28 17:20:02.056: E/AndroidRuntime(563): at java.lang.reflect.Method.invoke(Method.java:507)
07-28 17:20:02.056: E/AndroidRuntime(563): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-28 17:20:02.056: E/AndroidRuntime(563): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-28 17:20:02.056: E/AndroidRuntime(563): at dalvik.system.NativeStart.main(Native Method)
hostname1 存在于数据库中。 ¿知道我为什么会收到此错误吗?
提前致谢。
In n_servidor = "+ label + "" after = there is a space and that is included in the query when that line is executed so " hostname1" not exists but "hostname1" exists.For string you have to add these single qoutes
所以你的查询应该是这样的
Cursor cursor = bd.rawQuery("SELECT date, description FROM alerts WHERE n_servidor='"+ label + "'", null);
试试上面的查询希望对你有帮助
我有一个微调器,其中填充了来自 SQLite 数据库的项目。我这样做如下:
private void loadSpinnerData() {
baseDatosHistorico db = new baseDatosHistorico(this, "alertasdb.db", null, 1);
List<String> labels = db.getNomServidor();
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,labels);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
}
getNomServidor()
是一个 class (baseDatosHistorico) 中声明的方法,它扩展自 SQLiteOpenHelper,其功能是 select 的名称"n_servidor" 列中的服务器保存在 SQLite 数据库中。这很好用。
当我 select 来自微调器的 ITEM 以根据 ITEM selected(WHERE 子句)在 AlertDialog 中显示来自数据库的数据时,我遇到了问题。我有以下功能:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
String label = parent.getItemAtPosition(position).toString();
baseDatosHistorico bbdd = new baseDatosHistorico(this, "alertasdb.db", null, 1);
SQLiteDatabase bd = bbdd.getReadableDatabase();
Cursor cursor = bd.rawQuery("SELECT date, description FROM alerts WHERE n_servidor = "+ label + "", null);
if (cursor.moveToFirst()){
AlertDialog.Builder dialog = new AlertDialog.Builder(BbddActivity.this);
dialog.setIcon(android.R.drawable.ic_dialog_info);
dialog.setTitle(label);
dialog.setMessage(cursor.getString(0) + " " + cursor.getString(1));
dialog.setCancelable(false);
dialog.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
dialog.show();
}
}
LogCat 说:
07-28 17:20:02.056: E/AndroidRuntime(563): FATAL EXCEPTION: main
07-28 17:20:02.056: E/AndroidRuntime(563): android.database.sqlite.SQLiteException: no such column: hostname1: , while compiling: SELECT fecha, descripcion FROM alertas_email WHERE n_servidor = hostname1
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1324)
07-28 17:20:02.056: E/AndroidRuntime(563): at activities.monitorapp.BbddActivity.onItemSelected(BbddActivity.java:57)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.widget.AdapterView.fireOnSelected(AdapterView.java:871)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.widget.AdapterView.access0(AdapterView.java:42)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:837)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.os.Handler.handleCallback(Handler.java:587)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.os.Handler.dispatchMessage(Handler.java:92)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.os.Looper.loop(Looper.java:123)
07-28 17:20:02.056: E/AndroidRuntime(563): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-28 17:20:02.056: E/AndroidRuntime(563): at java.lang.reflect.Method.invokeNative(Native Method)
07-28 17:20:02.056: E/AndroidRuntime(563): at java.lang.reflect.Method.invoke(Method.java:507)
07-28 17:20:02.056: E/AndroidRuntime(563): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-28 17:20:02.056: E/AndroidRuntime(563): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-28 17:20:02.056: E/AndroidRuntime(563): at dalvik.system.NativeStart.main(Native Method)
hostname1 存在于数据库中。 ¿知道我为什么会收到此错误吗?
提前致谢。
In n_servidor = "+ label + "" after = there is a space and that is included in the query when that line is executed so " hostname1" not exists but "hostname1" exists.For string you have to add these single qoutes
所以你的查询应该是这样的
Cursor cursor = bd.rawQuery("SELECT date, description FROM alerts WHERE n_servidor='"+ label + "'", null);
试试上面的查询希望对你有帮助