android.database.sqlite.SQLiteException:没有这样的表:
我正在尝试使用SQlite数据库创建一个Android应用程序,但是当我尝试对表“clientes”进行查询时,会显示一个RuntimeException。 我尝试了很多事情,找到了很多解决方案,但都不管用 主要类别:android.database.sqlite.SQLiteException:没有这样的表:,android,database,android-sqlite,Android,Database,Android Sqlite,我正在尝试使用SQlite数据库创建一个Android应用程序,但是当我尝试对表“clientes”进行查询时,会显示一个RuntimeException。 我尝试了很多事情,找到了很多解决方案,但都不管用 主要类别: public class AndroidBaseDatos extends Activity { private TextView texto; private String nombre; private DBHelper BD; /**Array donde guardam
public class AndroidBaseDatos extends Activity {
private TextView texto;
private String nombre;
private DBHelper BD;
/**Array donde guardamos los nuevos dispositivos encontrados**/
private ArrayAdapter<String> query;
private ListView queryResult;
UsuariosSQLiteHelper usdbh =
new UsuariosSQLiteHelper(this, "DBUsuarios", null, 1);
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android_base_datos);
texto = (TextView) findViewById(R.id.textView1);
queryResult = (ListView) findViewById(R.id.listView1);
BD=new DBHelper(this);
BD.open();
}
public void onStart() {
super.onStart();
//Base de datos database
String[] campos = new String[] {"nombre", "apellidos", "edad"};
String[] args = new String[] {"2"};
db=usdbh.getReadableDatabase();
Cursor c = db.query("clientes", campos, "_id=?", args, null, null, null);
//Cursor c = db.query("Usuarios", campos, null, null, null, null, null);
// Inicializa el array
query = new ArrayAdapter<String>(this, R.layout.nombre_dispositivo);
// Establece el Listview para los dispositivos nuevos
//Nos aseguramos de que existe al menos un registro
if (c.moveToFirst()) {
//Recorremos el cursor hasta que no haya más registros
do {
nombre = c.getString(0);
String apellidos = c.getString(1);
int edad = Integer.parseInt(c.getString(2));
Log.d("obteniendo datos", nombre);
query.add(nombre);
query.add(apellidos);
query.add(String.valueOf(edad));
//String email = c.getString(1);
} while(c.moveToNext());
}
texto.setText(nombre);
queryResult.setAdapter(query);
db.close();
}
这里是调试信息
> 02-23 02:18:25.072: E/Trace(4081): error opening trace file: No such file or directory (2)
02-23 02:18:26.370: I/creando base de datos(4081): Ya existe
02-23 02:18:26.410: E/SQLiteLog(4081): (1) no such table: clientes
02-23 02:18:26.410: D/AndroidRuntime(4081): Shutting down VM
02-23 02:18:26.421: W/dalvikvm(4081): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
02-23 02:18:26.450: E/AndroidRuntime(4081): FATAL EXCEPTION: main
02-23 02:18:26.450: E/AndroidRuntime(4081): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bbdd/com.example.bbdd.AndroidBaseDatos}: android.database.sqlite.SQLiteException: no such table: clientes (code 1): , while compiling: SELECT nombre, apellidos, edad FROM clientes WHERE _id=?
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.os.Looper.loop(Looper.java:137)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.ActivityThread.main(ActivityThread.java:4745)
02-23 02:18:26.450: E/AndroidRuntime(4081): at java.lang.reflect.Method.invokeNative(Native Method)
02-23 02:18:26.450: E/AndroidRuntime(4081): at java.lang.reflect.Method.invoke(Method.java:511)
02-23 02:18:26.450: E/AndroidRuntime(4081): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-23 02:18:26.450: E/AndroidRuntime(4081): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-23 02:18:26.450: E/AndroidRuntime(4081): at dalvik.system.NativeStart.main(Native Method)
02-23 02:18:26.450: E/AndroidRuntime(4081): Caused by: android.database.sqlite.SQLiteException: no such table: clientes (code 1): , while compiling: SELECT nombre, apellidos, edad FROM clientes WHERE _id=?
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
02-23 02:18:26.450: E/AndroidRuntime(4081): at com.example.bbdd.AndroidBaseDatos.onStart(AndroidBaseDatos.java:90)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.Activity.performStart(Activity.java:5018)
02-23 02:18:26.450: E/AndroidRuntime(4081): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)
02-23 02:18:26.450: E/AndroidRuntime(4081): ... 11 more
02-23 02:23:26.573: I/Process(4081): Sending signal. PID: 4081 SIG: 9
>02-23 02:18:25.072:E/Trace(4081):打开跟踪文件时出错:没有这样的文件或目录(2)
02-23 02:18:26.370:I/creando base de datos(4081):存在
02-23 02:18:26.410:E/SQLiteLog(4081):(1)没有这样的表:客户
02-23 02:18:26.410:D/AndroidRuntime(4081):关闭虚拟机
02-23 02:18:26.421:W/dalvikvm(4081):threadid=1:线程退出时出现未捕获异常(组=0x40a13300)
02-23 02:18:26.450:E/AndroidRuntime(4081):致命异常:主
02-23 02:18:26.450:E/AndroidRuntime(4081):java.lang.RuntimeException:无法启动活动组件信息{com.example.bbdd/com.example.bbdd.AndroidBaseDatos}:android.database.sqlite.SQLiteException:没有这样的表:客户端(代码1):,编译时:从客户端选择nombre、apellidos、edad,其中_id=?
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.app.ActivityThread.access$600(ActivityThread.java:130)
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.os.Handler.dispatchMessage(Handler.java:99)上
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.os.Looper.loop(Looper.java:137)上
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.app.ActivityThread.main(ActivityThread.java:4745)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于java.lang.reflect.Method.Invokenactive(本机方法)
02-23 02:18:26.450:E/AndroidRuntime(4081):在java.lang.reflect.Method.invoke(Method.java:511)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-23 02:18:26.450:E/AndroidRuntime(4081):在dalvik.system.NativeStart.main(本机方法)
02-23 02:18:26.450:E/AndroidRuntime(4081):原因:android.database.sqlite.SQLiteException:没有这样的表:clientes(代码1):,编译时:从clientes中选择nombre、apellidos、edad,其中_id=?
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.database.sqlite.SQLiteConnection.acquiredPreparedStatement(SQLiteConnection.java:882)
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
02-23 02:18:26.450:E/AndroidRuntime(4081):位于com.example.bbdd.AndroidBaseDatos.onStart(AndroidBaseDatos.java:90)
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)上
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.app.Activity.performStart(Activity.java:5018)上
02-23 02:18:26.450:E/AndroidRuntime(4081):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)
02-23 02:18:26.450:E/AndroidRuntime(4081):。。。还有11个
02-23 02:23:26.573:I/进程(4081):发送信号。PID:4081信号:9
表位于db文件名数据库中,当我用shell打开它时,表clients被创建,如果再次尝试创建它,会显示一个SQLException,表示表alredy存在,正如我之前检查的,但我无法显示对任何数据库中任何表的任何查询
谢谢。您似乎从未在代码中的任何位置调用
crearTabla
来创建表。您至少应该从SQLiteOpenHelper上的onCreate
调用它。简单的创建插入和更新代码这样做可能会有帮助
public class MainActivity extends Activity implements OnClickListener {
SQLiteDatabase database;
private static final String DBNAME="Example";
Button btn1,btn2;
EditText et1,et2;
int id=0;
String name=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=(EditText) findViewById(R.id.editText1);
et2=(EditText) findViewById(R.id.editText2);
database=openOrCreateDatabase(DBNAME, MODE_PRIVATE, null);
btn1=(Button) findViewById(R.id.button1);
btn2=(Button) findViewById(R.id.button2);
btn2.setOnClickListener(this);
btn1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
id =Integer.parseInt(et1.getText().toString());
name=et2.getText().toString();
try{
database.execSQL("CREATE TABLE IF NOT EXISTS tabl(_id INTEGER PRIMARY KEY,id NUMERIC,name TEXT)");
Log.v("hi", "table created");
database.beginTransaction();
database.execSQL("INSERT INTO tabl(id,name) VALUES ("+id+",'"+name+"');");
database.setTransactionSuccessful();
database.endTransaction();
}
catch(Exception e){
Log.v("hi", e.toString());
}
break;
case R.id.button2:
id =Integer.parseInt(et1.getText().toString());
name=et2.getText().toString();
try{
database.beginTransaction();
database.execSQL("UPDATE tabl SET name='"+name+"' WHERE id="+id+";");
database.setTransactionSuccessful();
database.endTransaction();
}
catch(Exception e){
Log.v("hi", e.toString());
}
}
}
}
和资源
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">
<EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="91dp" android:layout_marginTop="64dp" android:ems="10">
<requestFocus />
</EditText>
<EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginLeft="50dp" android:layout_marginTop="36dp" android:ems="10" />
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText2" android:layout_centerVertical="true" android:text="Button" />
<Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button1" android:layout_alignBottom="@+id/button1" android:layout_alignRight="@+id/editText2" android:text="Button" />
</RelativeLayout>
像这样试试,可能会有帮助
如果出现问题,请告诉我。我不打电话给crear Tabla,因为当我打电话时,会出现一个SQLException,表示表客户已经存在。在我可以打电话之前
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">
<EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="91dp" android:layout_marginTop="64dp" android:ems="10">
<requestFocus />
</EditText>
<EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginLeft="50dp" android:layout_marginTop="36dp" android:ems="10" />
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText2" android:layout_centerVertical="true" android:text="Button" />
<Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button1" android:layout_alignBottom="@+id/button1" android:layout_alignRight="@+id/editText2" android:text="Button" />
</RelativeLayout>