Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.database.sqlite.SQLiteException:没有这样的表:_Android_Database_Android Sqlite - Fatal编程技术网

android.database.sqlite.SQLiteException:没有这样的表:

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

我正在尝试使用SQlite数据库创建一个Android应用程序,但是当我尝试对表“clientes”进行查询时,会显示一个RuntimeException。 我尝试了很多事情,找到了很多解决方案,但都不管用

主要类别:

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>

像这样试试,可能会有帮助
  • 首先:删除创建数据库的代码。也就是说,坚持你的第一个想法(从资产文件夹复制数据库)
  • second:使用sqlite3在桌面上打开并测试数据库文件的有效性(即,测试查询)。如果有效且测试成功,则继续
  • 第三:使用起来更简单、更直接(这是我的博客)

  • 如果出现问题,请告诉我。

    我不打电话给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>