Основные проблемы с базами данных SQLite. Блокнот учебник Android - PullRequest
0 голосов
/ 15 июля 2011

Это очень простой вопрос.Я просто пытаюсь понять, как работает база данных SQLite.Итак, вот что я делаю: В приведенном ниже разделе кода, который взят из учебника 3-го упражнения блокнота, я изменяю KEY_TITLE на KEY_NAME и во всех местах нахожу название для имени.И приложение вылетает.Почему это происходит?

public static final String KEY_TITLE = "title";
//change to:     public static final String KEY_NAME = "name";
public static final String KEY_BODY = "body";
public static final String KEY_ROWID = "_id";

private static final String TAG = "NotesDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;

/**
 * Database creation sql statement
 */
private static final String DATABASE_CREATE =
    "create table notes (_id integer primary key autoincrement, "
    + "title text not null, body text not null);";

/ * изменить на: private static final String DATABASE_CREATE = "создавать заметки к таблице (автоинкремент первичного ключа целого _id," + "текст имени не ноль, основной текст не ноль);«;* /

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Было бы полезно, если вы скопировали трассировку стека (используя logcat / DDMS) или скопировали весь ваш SQLiteDBAdapter, но, просто взглянув на то, что вы опубликовали, вы определенно столкнетесь с проблемой в том, что вы используете неправильное имя поля в Создание базы данных sqlite.

Поле «title» должно быть переименовано в «name», чтобы соответствовать измененному имени столбца.

Изменение:

private static final String DATABASE_CREATE =
"create table notes (_id integer primary key autoincrement, "
+ "title text not null, body text not null);";

К

private static final String DATABASE_CREATE =
"create table notes (_id integer primary key autoincrement, "
+ "name text not null, body text not null);";

Я также склоняюсь к тому, чтобы просто использовать сами статики в операторе создания, так что это можно записать так:

    private static final String DATABASE_CREATE =
"create table notes (" + KEY_ROWID + " integer primary key autoincrement, "
+ KEY_NAME + " text not null, " + KEY_BODY + " text not null);";

Тогда вы могли бы часто менять имена и не сталкиваться с повреждением базы данных.

0 голосов
/ 15 июля 2011

Полагаю, проблема в том, что вы используете KEY_NAME = "name" ... Теперь, насколько я вижу в вашем коде, вы не создаете таблицу, в которой у вас есть колонка name. Теперь снова, возможно, вы пытаетесь получить доступ к значению столбца имени, который на самом деле не находится в таблице, поэтому он вызывает исключение. Но, тем не менее, взгляд на Logcat (если вы разместите здесь) может дать лучшие ответы на проблему.

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...