如何解决由于 table 不存在而无法将内容插入 SQLite 数据库的问题?
How to solve a failure to insert something into SQLite db due to non-existing table?
我正在尝试将注释插入到我的 Android SQLite 数据库中,但我收到以下错误消息:
02-04 01:28:19.775 9521-9521/? E/SQLiteDatabase﹕ Error inserting
text=Note 0
android.database.sqlite.SQLiteException: no such table: notes (code 1): , while compiling: INSERT INTO notes(text) VALUES (?)
这是我的数据库适配器:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by Friso on 15/2/1.
*/
public class DBAdapter {
private final static String DATABASE_NAME = "db_aio_organiser";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NOTES = "notes";
private final static String KEY_NOTES_ID = "id";
private final static String KEY_NOTES_TEXT = "text";
private final static String CREATE_TABLE_NOTES = "create table " + TABLE_NOTES +
" (" + KEY_NOTES_ID + "integer primary key autoincrement, "
+ KEY_NOTES_TEXT + "text not null);";
private final Context context;
DatabaseHelper helper;
SQLiteDatabase db;
public DBAdapter(Context context) {
this.context = context;
helper = new DatabaseHelper(context);
}
public DBAdapter open() throws SQLException{
db = helper.getWritableDatabase();
return this;
}
public void close() {
db.close();
}
public long insertNote(String text) {
ContentValues values = new ContentValues();
values.put(KEY_NOTES_TEXT, text);
return db.insert(TABLE_NOTES, null, values);
}
public boolean deleteNote(long id) {
return db.delete(TABLE_NOTES, KEY_NOTES_ID + "=" + id, null) > 0;
}
public Cursor getAllNotes() {
return db.query(TABLE_NOTES, new String[] {KEY_NOTES_ID, KEY_NOTES_TEXT}, null, null, null, null, null);
}
public Cursor getNote(long id) {
Cursor mCursor = db.query(true, TABLE_NOTES, new String[] {KEY_NOTES_ID, KEY_NOTES_TEXT},
KEY_NOTES_ID + "=" + id, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateNote(long id, String text) {
ContentValues values = new ContentValues();
values.put(KEY_NOTES_TEXT, text);
return db.update(TABLE_NOTES, values, KEY_NOTES_ID + "=" + id, null) > 0;
}
private static class DatabaseHelper extends SQLiteOpenHelper {
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE_NOTES);
} catch (SQLException e) {
Log.e("DBAdapter", "failed to create table notes");
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
我做错了什么?
看起来 table 的设置表达式中可能存在错误。尝试:
private final static String CREATE_TABLE_NOTES = "CREATE TABLE " + TABLE_NOTES + " (" + KEY_NOTES_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_NOTES_TEXT + " TEXT NOT NULL);";
(我认为设置表达式需要大写,而且你必须小心你放空格的地方,你的代码中有几个缺失)。
真的希望这对你有用,当你寻找一个小错误时,SQLite 可能是一个真正的害虫!
你的 sql 语句有误试试这个
private final static String CREATE_TABLE_NOTES = "create table "+ TABLE_NOTES +
" (" + KEY_NOTES_ID + " integer primary key autoincrement, "
+ KEY_NOTES_TEXT + " text not null)";
您的 CREATE TABLE
中存在语法错误:列名和类型之间缺少白色 space。改为
"create table " + TABLE_NOTES +
" (" + KEY_NOTES_ID + " integer primary key autoincrement, "
+ KEY_NOTES_TEXT + " text not null);";
具体来说,autoincrement
放错了地方,你只能用integer primary key
关键字,不能用idinteger primary key
之类的关键字。 text
列在语法上并非不正确,但如果没有 space.
则不是您想要的
您将 onCreate()
中的 try-catch
忽略了 CREATE TABLE
中的任何错误。由于方法returns正常,数据库被认为建立成功。删除 try-catch
.
卸载您的应用,以便 onCreate()
再次成为 运行。
我正在尝试将注释插入到我的 Android SQLite 数据库中,但我收到以下错误消息:
02-04 01:28:19.775 9521-9521/? E/SQLiteDatabase﹕ Error inserting text=Note 0 android.database.sqlite.SQLiteException: no such table: notes (code 1): , while compiling: INSERT INTO notes(text) VALUES (?)
这是我的数据库适配器:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by Friso on 15/2/1.
*/
public class DBAdapter {
private final static String DATABASE_NAME = "db_aio_organiser";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NOTES = "notes";
private final static String KEY_NOTES_ID = "id";
private final static String KEY_NOTES_TEXT = "text";
private final static String CREATE_TABLE_NOTES = "create table " + TABLE_NOTES +
" (" + KEY_NOTES_ID + "integer primary key autoincrement, "
+ KEY_NOTES_TEXT + "text not null);";
private final Context context;
DatabaseHelper helper;
SQLiteDatabase db;
public DBAdapter(Context context) {
this.context = context;
helper = new DatabaseHelper(context);
}
public DBAdapter open() throws SQLException{
db = helper.getWritableDatabase();
return this;
}
public void close() {
db.close();
}
public long insertNote(String text) {
ContentValues values = new ContentValues();
values.put(KEY_NOTES_TEXT, text);
return db.insert(TABLE_NOTES, null, values);
}
public boolean deleteNote(long id) {
return db.delete(TABLE_NOTES, KEY_NOTES_ID + "=" + id, null) > 0;
}
public Cursor getAllNotes() {
return db.query(TABLE_NOTES, new String[] {KEY_NOTES_ID, KEY_NOTES_TEXT}, null, null, null, null, null);
}
public Cursor getNote(long id) {
Cursor mCursor = db.query(true, TABLE_NOTES, new String[] {KEY_NOTES_ID, KEY_NOTES_TEXT},
KEY_NOTES_ID + "=" + id, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateNote(long id, String text) {
ContentValues values = new ContentValues();
values.put(KEY_NOTES_TEXT, text);
return db.update(TABLE_NOTES, values, KEY_NOTES_ID + "=" + id, null) > 0;
}
private static class DatabaseHelper extends SQLiteOpenHelper {
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE_NOTES);
} catch (SQLException e) {
Log.e("DBAdapter", "failed to create table notes");
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
我做错了什么?
看起来 table 的设置表达式中可能存在错误。尝试:
private final static String CREATE_TABLE_NOTES = "CREATE TABLE " + TABLE_NOTES + " (" + KEY_NOTES_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_NOTES_TEXT + " TEXT NOT NULL);";
(我认为设置表达式需要大写,而且你必须小心你放空格的地方,你的代码中有几个缺失)。
真的希望这对你有用,当你寻找一个小错误时,SQLite 可能是一个真正的害虫!
你的 sql 语句有误试试这个
private final static String CREATE_TABLE_NOTES = "create table "+ TABLE_NOTES +
" (" + KEY_NOTES_ID + " integer primary key autoincrement, "
+ KEY_NOTES_TEXT + " text not null)";
您的
CREATE TABLE
中存在语法错误:列名和类型之间缺少白色 space。改为"create table " + TABLE_NOTES + " (" + KEY_NOTES_ID + " integer primary key autoincrement, " + KEY_NOTES_TEXT + " text not null);";
具体来说,
autoincrement
放错了地方,你只能用integer primary key
关键字,不能用idinteger primary key
之类的关键字。text
列在语法上并非不正确,但如果没有 space. 则不是您想要的
您将
onCreate()
中的try-catch
忽略了CREATE TABLE
中的任何错误。由于方法returns正常,数据库被认为建立成功。删除try-catch
.卸载您的应用,以便
onCreate()
再次成为 运行。