在SQLite Android Studio上找不到列时,应用程序崩溃

在SQLite Android Studio上找不到列时,应用程序崩溃,android,android-sqlite,Android,Android Sqlite,我正在Android Studio上学习SQLite。多次测试a在SQLite上创建了多个表,现在我尝试验证一列和工具“run”(显示所有进程正在运行),它显示下一个错误,然后应用程序就崩溃了: E/SQLiteLog:(1)没有这样的列… 我认为当我创建一个表失败时是一个错误,现在代码正在尝试读取不同表上的一列,我读到了关于在emulator上重新安装应用程序将修复错误的内容,但它仍然出现并使我的应用程序崩溃 对不起,如果这太明显了,但我会从这开始,谢谢 类的代码,其中是SQLite数据库 下

我正在Android Studio上学习SQLite。多次测试a在SQLite上创建了多个表,现在我尝试验证一列和工具“run”(显示所有进程正在运行),它显示下一个错误,然后应用程序就崩溃了:

E/SQLiteLog:(1)没有这样的列…

我认为当我创建一个表失败时是一个错误,现在代码正在尝试读取不同表上的一列,我读到了关于在emulator上重新安装应用程序将修复错误的内容,但它仍然出现并使我的应用程序崩溃

对不起,如果这太明显了,但我会从这开始,谢谢

类的代码,其中是SQLite数据库 下面是实际表的列的名称

public class AdminSQLiteOpenHelper extends SQLiteOpenHelper {
    public AdminSQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase DataBase) {
        DataBase.execSQL("create table datos(nombre text primary key, contraseña text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

我只在代码试图查找列的地方放了一个类,我省略了在表中注册数据的类,但我会放一个表的图像

 public void Iniciar(View view) {
        AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "Registro", null, 1);
        SQLiteDatabase BD1 = admin.getWritableDatabase();

        String name = nombre.getText().toString();
        String pass = contra.getText().toString();

        if (!name.isEmpty() && !pass.isEmpty()) {
            Cursor fila = BD1.rawQuery("select contraseña from datos where nombre =" + name, null);
            if (fila.getString(1).equals(name) && fila.getString(2).equals(pass)) {

                BD1.close();

                Toast.makeText(this, "Hola", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "No se encontró el nombre de usuario o contraseña", Toast.LENGTH_SHORT).show();
            }

        } else {
            Toast.makeText(this, "No puede quedar ningún campo vacío", Toast.LENGTH_SHORT).show();
        }
    }
完全错误

E/SQLiteLog: (1) no such column: David in "select contraseña from datos where nombre =David"
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.iniciosesin2, PID: 19037
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
        at android.view.View.performClick(View.java:7448)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access$3600(View.java:810)
        at android.view.View$PerformClick.run(View.java:28305)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
        at android.view.View.performClick(View.java:7448) 
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 
        at android.view.View.performClickInternal(View.java:7425) 
        at android.view.View.access$3600(View.java:810) 
        at android.view.View$PerformClick.run(View.java:28305) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
     Caused by: android.database.sqlite.SQLiteException: no such column: David (code 1 SQLITE_ERROR): , while compiling: select contraseña from datos where nombre =David
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1045)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:652)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1545)
        at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1484)
        at com.example.iniciosesin2.Inicio.Iniciar(Inicio.java:45)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 
        at android.view.View.performClick(View.java:7448) 
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 
        at android.view.View.performClickInternal(View.java:7425) 
        at android.view.View.access$3600(View.java:810) 
        at android.view.View$PerformClick.run(View.java:28305) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
I/Process: Sending signal. PID: 19037 SIG: 9
图像:


试试这个。使用
设备文件资源管理器
删除已在仿真器上创建的数据库文件

然后使用以下语句创建表:

DataBase.execSQL("create table if not exists datos(id integer primary key autoincrement, nombre text,  contraseña text)");
然后,当您要查询时,请使用以下命令:

Cursor fila = BD1.rawQuery("select * from datos where nombre = '"+name+"'", null);

fila.moveToNext()

你能发布错误的完整堆栈跟踪吗?是的,对不起,我编辑了postHi,您不能将文本声明为主键,您必须使用整型作为主键,并确保在创建表和执行查询时您的culomn名称相同。一旦获得光标
fila
,您应该检查
fila.getCount>0
,然后继续。可能没有可用的数据。你能在最后加上代码检查一下吗?你好,谢谢你的回答。是的,当我启动这个应用程序时,我在第一列加了一个Int,在我将其更改为try fix之后,它就不起作用了。现在我又改变了,错误依然存在。第二点,是的,我确定表和查询中的名称相同。谢谢你的回答,我正在搜索模拟器中的所有文件,具体是ond data/data,但我找不到位置数据库。它应该在
data/data/your_package\u name/databases
中。是的,我找到了,抱歉。现在,我尝试了,删除了我的数据库并更改了语句,但应用程序仍然崩溃,我在哪行执行了该方法?请分享事故报告。你能吗?当我添加一个id为的列时,名称可以重复,这对登录不起作用?还是我错了?
DataBase.execSQL("create table if not exists datos(id integer primary key autoincrement, nombre text,  contraseña text)");
Cursor fila = BD1.rawQuery("select * from datos where nombre = '"+name+"'", null);

fila.moveToNext()