Android 如何解决由于不存在表而导致无法将某些内容插入SQLite db的问题?

Android 如何解决由于不存在表而导致无法将某些内容插入SQLite db的问题?,android,database,sqlite,Android,Database,Sqlite,我正在尝试向Android SQLite数据库中插入注释,但收到以下错误消息: 02-04 01:28:19.775 9521-9521/?E/sqlite数据库﹕ 插入错误 text=注0 android.database.sqlite.SQLiteException:没有这样的表:notes(代码1):,编译时:INSERT-INTO-notes(文本)值(?) 这是我的数据库适配器: import android.content.ContentValues; import android.

我正在尝试向Android SQLite数据库中插入注释,但收到以下错误消息:

02-04 01:28:19.775 9521-9521/?E/sqlite数据库﹕ 插入错误 text=注0 android.database.sqlite.SQLiteException:没有这样的表:notes(代码1):,编译时:INSERT-INTO-notes(文本)值(?)

这是我的数据库适配器:

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) {

        }
    }
}

我做错了什么?

看起来表的设置表达式中可能有错误。尝试:

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可能是一个真正的害虫

该表的设置表达式中似乎有错误。尝试:

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可能是一个真正的害虫

该表的设置表达式中似乎有错误。尝试:

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可能是一个真正的害虫

该表的设置表达式中似乎有错误。尝试:

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)";

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)";

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)";

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 " + TABLE_NOTES +
        " (" + KEY_NOTES_ID + " integer primary key autoincrement, "
        + KEY_NOTES_TEXT + " text not null);";
    
    具体来说,
    autoincrement
    放错了位置,您只能将关键字与
    integer主键一起使用,而不能像
    idinteger主键那样使用。
    text
    列在语法上没有错误,但没有空格也不是您想要的

  • 通过在
    onCreate()
    中使用
    try catch
    ,您将忽略
    CREATE表中的任何错误。由于该方法正常返回,因此认为数据库已成功设置。卸下
    try catch

  • 卸载应用程序,以便再次运行
    onCreate()

  • 创建表中存在语法错误:列名和类型之间缺少空格。改为

    "create table " + TABLE_NOTES +
        " (" + KEY_NOTES_ID + " integer primary key autoincrement, "
        + KEY_NOTES_TEXT + " text not null);";
    
    具体来说,
    autoincrement
    放错了位置,您只能将关键字与
    integer主键一起使用,而不能像
    idinteger主键那样使用。
    text
    列在语法上没有错误,但没有空格也不是您想要的

  • 通过在
    onCreate()
    中使用
    try catch
    ,您将忽略
    CREATE表中的任何错误。由于该方法正常返回,因此认为数据库已成功设置。卸下
    try catch

  • 卸载应用程序,以便再次运行
    onCreate()

  • 创建表中存在语法错误:列名和类型之间缺少空格。改为

    "create table " + TABLE_NOTES +
        " (" + KEY_NOTES_ID + " integer primary key autoincrement, "
        + KEY_NOTES_TEXT + " text not null);";
    
    具体来说,
    autoincrement
    放错了位置,您只能将关键字与
    integer主键一起使用,而不能像
    idinteger主键那样使用。
    text
    列在语法上没有错误,但没有空格也不是您想要的

  • 通过在
    onCreate()
    中使用
    try catch
    ,您将忽略
    CREATE表中的任何错误。由于该方法正常返回,因此认为数据库已成功设置。卸下
    try catch

  • 卸载应用程序,以便再次运行
    onCreate()

  • 创建表中存在语法错误:列名和类型之间缺少空格。改为

    "create table " + TABLE_NOTES +
        " (" + KEY_NOTES_ID + " integer primary key autoincrement, "
        + KEY_NOTES_TEXT + " text not null);";
    
    具体来说,
    autoincrement
    放错了位置,您只能将关键字与
    integer主键一起使用,而不能像
    idinteger主键那样使用。
    text
    列在语法上没有错误,但没有空格也不是您想要的

  • 通过在
    onCreate()
    中使用
    try catch
    ,您将忽略
    CREATE表中的任何错误。由于该方法正常返回,因此认为数据库已成功设置。卸下
    try catch

  • 卸载应用程序,以便再次运行
    onCreate()