Java 安卓Sqlite“;“作者”不是数据库中的一列;
您好,我正在尝试为我的应用程序构建sqlite数据库,但它返回了一个错误 “(1)表项目没有名为author的列” 我理解问题的本质,但我已经好几个小时没发现错误了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
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()来防止将来出现此类错误。您最近添加过该列吗?在这种情况下,您可能忘记增加版本。谢谢您所有的错误都在您上面提到的空格中。