Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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 SQLite问题-表。。。没有名为的列_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android SQLite问题-表。。。没有名为的列

Android SQLite问题-表。。。没有名为的列,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我得到了这个错误- 07-03 12:29:18.643:E/SQLiteLog(5181):(1)表帐户没有名为otherNotes的列 ContentValues values = new ContentValues(); values.put(TEST_ID, testId); values.put(CLASS_NAME, className); values.put(SUBJECT, subject); "CREATE TABLE IF NOT EXISTS " + TABLE_NAM

我得到了这个错误-
07-03 12:29:18.643:E/SQLiteLog(5181):(1)表帐户没有名为otherNotes的列

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
这是我的代码:

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "accountsManager";
private static final String TABLE_ACCOUNTS = "accounts";

private static final String KEY_ID = "id";
private static final String KEY_TITLE = "title";
private static final String KEY_USERID = "userId";
private static final String KEY_PASSWORD = "password";
private static final String KEY_LOGINURL = "loginUrl";
private static final String KEY_OTHERNOTES = "otherNotes";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public void onCreate(SQLiteDatabase db) {
    String CREATE_ACCOUNTS_TABLE = "CREATE TABLE " + TABLE_ACCOUNTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TITLE + " TEXT,"
            + KEY_USERID + " TEXT," + KEY_PASSWORD + " TEXT," + KEY_LOGINURL + " TEXT,"
            + KEY_OTHERNOTES + " TEXT" + ");";
db.execSQL(CREATE_ACCOUNTS_TABLE);
}


public void addAccount(AccountDetails account) {
    SQLiteDatabase db = this.getWritableDatabase();
    System.out.println("Hello!");   


    ContentValues values = new ContentValues();
    values.put(KEY_TITLE, account.getTitle()); // Account Title
    values.put(KEY_USERID, account.getUserId()); // account userid
    values.put(KEY_PASSWORD, account.getPassword()); // account password
    values.put(KEY_LOGINURL, account.getLoginUrl()); // account loginurl
    values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes
    Log.v("title", KEY_TITLE);


    // Inserting Row
    db.insert(TABLE_ACCOUNTS, null, values);
    db.close(); // Closing database connection
}
ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
此外,当我删除以下语句时:

values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes
ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
然后我就遇到了同样的密码问题…等等。 i、 e,(1)表帐户没有名为password的列

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"

请帮忙

这是您的查询..试试这个

 String CREATE_ACCOUNTS_TABLE = "CREATE TABLE "+TABLE_ACCOUNTS+"(KEY_ID INTEGER PRIMARY KEY,KEY_TITLE TEXT,KEY_USERID TEXT,KEY_PASSWORD TEXT,KEY_LOGINURL TEXT,KEY_OTHERNOTES TEXT);";
ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
SQL代码看起来不错。 我认为您忘记对您创建的数据库对象调用
open()

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
将此方法添加到SQL类:

private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;

public DataBaseMain open() throws SQLException{ 
    // Open the database to make her writeable, must be called before writing 
    // to database

    ourHelper = new DbHelper(ourContext);
    ourDatabase = ourHelper.getWritableDatabase();
    return this;
}

public void close(){                
    // Closing the database for writing, avoids error.
    ourHelper.close();
}
ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"

当您想调用DB时使用。

似乎您后来在数据库中添加了一些列。我同意Ken Wolf,你应该考虑卸载和重新安装你的应用程序。一种更好的方法是,在
onUpdate
方法中删除并重新创建所有表,并在每次更改模式时增加db版本

正如Benil在a中所说,更改数据库版本号,然后再次运行代码。

如果您在创建查询时出错,然后将其修复,则有可能

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
所以在文件系统中有一个db,但是这个db可能没有这样的列

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
解决方案: 在emulator中找到一个db文件:data/data/com.somecompany.yourapp/databases/db并将其删除,然后重试

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"

也可以在某些sql资源管理器中打开此文件,并检查是否存在该列。

如果您对创建表的语法有信心,则可能会发生这种情况
ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
当您在同一个表中添加新列时,为此

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
1)从设备上卸载,然后再次运行。

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
2)设置->应用->清除数据

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
3)更改“DatabaseHandler”类中的数据库名称 (我也面临同样的问题。但我是通过更改数据库名称来解决的。)

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
4)更改“DatabaseHandler”类中的数据库\u版本 (如果添加了新列,则会自动升级)

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
尝试从设置中清除应用程序的“数据”。 对我来说,这个问题之所以发生,是因为我将数据存储在SD卡上,后来我添加了一些列。
因此,如果您要在SD卡上保存,请删除以前的数据。

您可以这样指定版本:

private static final int VERSION = 4;
ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"

如果您确定代码正常,只需尝试卸载应用程序,然后重新运行。这解决了我的问题。希望它能有所帮助

当我在测试阶段用新列更新sqlite中的数据库表时,我遇到了同样的问题

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
除了上面已经给出的答案外,我发现更新SQLite数据库(例如更改后)真正有用的是一个AndroidStudio插件,它允许您:

ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);

"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + TEST_ID + " INTEGER,"
            + CLASS_NAME + " TEXT,"
            + SUBJECT + " TEXT,"
  • 卸载应用程序
  • 列表项
  • 杀戮应用程序
  • 启动应用程序
  • 重新启动应用程序
  • 清除应用程序数据
  • 清除应用程序数据并重新启动

  • 对于那些有类似问题且上述解决方案不起作用的人,请检查两件事:

    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"
    
  • 列名和数据类型之间的空格,如

     COLUMN_NUMBER+" TEXT PRIMARY KEY) not  COLUMN_NUMBER+"TEXT PRIMARY KEY)
    
    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"
    
  • 创建表期间的列顺序应与数据插入的映射相同,如

    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"
    

  • 可能的解决方案也是(不是最好的)使用不同版本的DB,如:

    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"
    
    public static final int DATABASE_VERSION = 2;
    
     public DBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    

    这对我很有用。

    我知道我已经很晚才回答这个问题了,但也许有人可以用这个答案解决她的问题。
    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"
    

    稍后会将一些数据放入表数据库中,因此最好的解决方案是重新命名数据库名称。

    在我的例子中,onCreate()方法中出现了查询语法错误(需要空格b/w列名和数据类型..请参见附件)

    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"
    
    为了解决这个问题。。 我遵循这些步骤

    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"
    
  • 更正语法错误
  • 更改数据库版本号
  • 从设置中清除应用程序数据
  • 卸载并再次运行您的应用程序。]]

  • 希望它有助于卸载你的应用程序并重新安装你的应用程序,然后它将工作fi

    拉出你的数据库并检查这些表中是否创建了提到的列。你可能正在使用旧版本的数据库。尝试进入设置/应用程序并在应用程序上“清除数据”。或者卸载并重新安装。更改数据库版本号并再次运行代码!!只需从设备/仿真器中卸载应用程序,然后再次运行。@BenilMathew更改版本号有效。。谢谢您能详细说明您所做的更改以及原因吗?KEY\u USERID、KEY\u PASSWORD等都是已经声明的字符串变量。你的代码完全没有意义,他只是把KEY_ID和write constraint放在“”中,所以我们也可以给constraint,正如我所展示的。。。。他可以试一下。我想他在编写查询时犯了错误。您的查询将创建一个列名为key\u id、key\u title等的表。但他希望列名为title、id等。他编写的SQL查询很好。是的,这很有效。我转到“设置”,并清除了所有以前的数据。从那以后,它工作得很好。非常感谢。间距很重要!!成功了。
    ContentValues values = new ContentValues();
    values.put(TEST_ID, testId);
    values.put(CLASS_NAME, className);
    values.put(SUBJECT, subject);
    
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + TEST_ID + " INTEGER,"
                + CLASS_NAME + " TEXT,"
                + SUBJECT + " TEXT,"