Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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:表中没有名为(代码1)的列_Android - Fatal编程技术网

android.database.sqlite.SQLiteException:表中没有名为(代码1)的列

android.database.sqlite.SQLiteException:表中没有名为(代码1)的列,android,Android,我想知道是否有人能帮我。 我得到一个错误,说列\u one不存在。 但我将其包含在我的DBHandler中。 我已经看过了一些其他的答案,它们说这可能是因为遗漏了空格或逗号,但我似乎找不到它 DBHandler.java import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.Cursor; import andr

我想知道是否有人能帮我。
我得到一个错误,说
列\u one
不存在。
但我将其包含在我的DBHandler中。
我已经看过了一些其他的答案,它们说这可能是因为遗漏了空格或逗号,但我似乎找不到它

DBHandler.java

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.Cursor;
import android.content.Context;
import android.content.ContentValues;

public class DBHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "Database.db";
    public static final String TABLE_TEST = "test";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_ONE = "one";
    public static final String COLUMN_TWO = "two";

    public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }

    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE " + TABLE_TEST + "(" +
                COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                COLUMN_ONE + " TEXT," +
                COLUMN_TWO + " TEXT" + ");";
        db.execSQL(query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_TEST);
        onCreate(db);
    }

    public void addTest(Test test){
        ContentValues values = new ContentValues();
        values.put(COLUMN_ONE, test.get_one());
        values.put(COLUMN_TWO, test.get_two());
        SQLiteDatabase db = getWritableDatabase();
        db.insert(TABLE_TEST, null, values);
        db.close();
    }

}
Test.java

public class Test {

    private int _id;
    private String _one;
    private String _two;

    public Test(){

    }

    public Test(int id){
        this._id = id;
    }

    public Test(String one, String two){
        this._one = one;
        this._two = two;
    }

    public int get_id() {
        return _id;
    }

    public void set_id(int _id) {
        this._id = _id;
    }

    public String get_one() {
        return _one;
    }

    public void set_one(String _one) {
        this._one = _one;
    }

    public String get_two() {
        return _two;
    }

    public void set_two(String _two) {
        this._two = _two;
    }
我的主要活动非常长,并且有多个其他项目,因此这里是重要的一点(代码前面声明的dbHandler)

如果有人能看看我的代码,我将不胜感激

编辑:logcat

08-12 09:39:00.358    2305-2305/com.test.test E/SQLiteLog﹕ (1) table test has no column named one
08-12 09:39:00.380    2305-2305/com.test.test E/SQLiteDatabase﹕ Error inserting one=Random two=Random
    android.database.sqlite.SQLiteException: table test has no column named one (code 1): , while compiling: INSERT INTO test(one,two) VALUES (?,?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
            at com.test.test.DBHandler.addTest(DBHandler.java:54)
            at com.test.test.MainActivity.onClick(MainActivity.java:58)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
08-12 09:39:00.358 2305-2305/com.test.test E/SQLiteLog﹕ (1) 表test没有名为one的列
08-12 09:39:00.380 2305-2305/com.test.test E/SQLiteDatabase﹕ 插入一个=随机两个=随机时出错
android.database.sqlite.SQLiteException:表测试没有名为one(代码1)的列,编译时:INSERT-INTO-test(一,两)值(?,)
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
位于android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
位于android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
在com.test.test.DBHandler.addTest上(DBHandler.java:54)
位于com.test.test.MainActivity.onClick(MainActivity.java:58)
在android.view.view.performClick上(view.java:4780)
在android.view.view$PerformClick.run(view.java:19866)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5257)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

您的sql是“创建表测试(_idinteger主键自动递增,一个文本,两个文本);”,我在终端中尝试了它,它是正常的。您可以添加一行sql变量的日志来检查它是什么。您提到“column\u one不存在”,可能是在插入时拼错了列名。

表名未初始化为字符串

public static final String TABLE_TEST = test
实际上,您正在将字符串初始化为另一个(null)对象变量

您需要双引号将字符串变为字符串:

public static final String TABLE_TEST = "test"


现在卸载并重新安装您的应用程序。
数据库将被删除,因此在下一次运行时,它将被重新创建


或者,增加数据库版本常量的值。

这样,将触发
onUpgrade()
方法,删除表并重新创建新表。

此字符串未初始化为“字符串”:
public static final String table_TEST=TEST
感谢您的回复。发布日志并将测试更改为“测试”,但仍然得到相同的错误。感谢回复。我重复引用了测试,但不幸的是,我仍然收到相同的错误。现在卸载并重新安装你的应用程序。数据库将被删除,所以在下一次运行时,它将被重新创建。奇怪的是,它在我连接设备时工作,但在我使用模拟器时不工作。谢谢你的帮助。很好的解释和回答。非常感谢。我相信第二部分很有帮助。一旦在db连接程序中遇到错误,您需要首先卸载应用程序(或增加db版本)以查看新的更改。我正在应用正确的更改,但仍然没有得到结果,因为我没有卸载应用程序。谢谢
public static final String TABLE_TEST = "test"