Java 安卓Sqlite“;“作者”不是数据库中的一列;

Java 安卓Sqlite“;“作者”不是数据库中的一列;,java,android,database,sqlite,Java,Android,Database,Sqlite,您好,我正在尝试为我的应用程序构建sqlite数据库,但它返回了一个错误 “(1)表项目没有名为author的列” 我理解问题的本质,但我已经好几个小时没发现错误了 package com.example.newyork; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQL

您好,我正在尝试为我的应用程序构建sqlite数据库,但它返回了一个错误 “(1)表项目没有名为author的列”

我理解问题的本质,但我已经好几个小时没发现错误了

 package com.example.newyork;

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

public class DatabaseHandler extends SQLiteOpenHelper{

    //Database Initialize
    private static final int DATABASE_VERSION = 6;
    private static final String DATABASE_NAME = "NewYorkApplication";

    //Table 'Articles' name definition
    private static final String TABLE_ARTICLES = "articles";

    //Table 'Articles' Column Names
    private static final String KEY_ID = "key";
    private static final String KEY_TITLE = "title";
    private static final String KEY_TEXT = "text";
    private static final String KEY_AUTHOR = "author";
    private static final String KEY_DATE = "date";


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

    //Creating Tables 
    @Override
    public void onCreate(SQLiteDatabase db){
        String CREATE_ARTICLES_TABLE = "CREATE TABLE " + TABLE_ARTICLES + "("
                + KEY_ID + " INTEGER PRIMARY KEY ,"
                + KEY_TITLE + " TEXT,"
                + KEY_TEXT + " TEXT," 
                + KEY_AUTHOR + "TEXT,"
                + KEY_DATE + "TEXT"+  ")";
        db.execSQL(CREATE_ARTICLES_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ARTICLES);

        // Create tables again
        onCreate(db);
    }

    //Adding Article
    public void addArticle(Article article){

        //Get Database and initialize contentValues
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();

        //Put new values into Values
        values.put(KEY_TITLE, article.getTitle());
        values.put(KEY_TEXT, article.getText());
        values.put(KEY_DATE, article.getDate());
        values.put(KEY_AUTHOR, article.getAuthor());    

        //Insert table row
        db.insert(TABLE_ARTICLES, null, values);
        db.close();
    }

    public Article getArticle(int id) {

        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_ARTICLES, new String[] { KEY_ID,
                KEY_TITLE, KEY_AUTHOR,KEY_TEXT,KEY_DATE }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Article article = new Article(cursor.getString(1),cursor.getString(2),cursor.getString(4),cursor.getString(3));
        // return contact
        return article;
    }

}

确保在列名和类型之间留有空格:

+ KEY_AUTHOR + "TEXT,"
+ KEY_DATE + "TEXT"+ 
应该是:

+ KEY_AUTHOR + " TEXT,"
+ KEY_DATE + " TEXT"+ 
否则,您的声明将类似于:

CREATE TABLE articles(key INTEGER PRIMARY KEY , title TEXT, text TEXT, authorTEXT,dateTEXT);

另外,如果您最近一直在积极地改变内容,请确保您实际使用的是您认为自己使用的db版本。

您忘记了KEY\u AUTHOR和KEY\u DATE的“TEXT”T之前的空格。

我认为您的问题是,在列类型之前缺少空格,请尝试以下方法:

String CREATE_ARTICLES_TABLE = "CREATE TABLE " + TABLE_ARTICLES + "("
                + KEY_ID + " INTEGER PRIMARY KEY ,"
                + KEY_TITLE + " TEXT,"
                + KEY_TEXT + " TEXT," 
                + KEY_AUTHOR + " TEXT,"
                + KEY_DATE + " TEXT"+  ")";
        db.execSQL(CREATE_ARTICLES_TABLE);

此外,您可能希望使用String.format()来防止将来出现此类错误。您最近添加过该列吗?在这种情况下,您可能忘记增加版本。谢谢您所有的错误都在您上面提到的空格中。