Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
#1

База SQLite: метод по созданию таблицы не вызывается - Программирование Android

15.02.2016, 15:45. Просмотров 713. Ответов 30
Метки нет (Все метки)

Не пойму что не так.
Раньше с ним не работал
Пытался реализовать пример из сети, но что то не хочет, подозреваю что не создана сама база, а точнее что не вызывается метод по созданию.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class NewDB extends Activity {
 
    final String LOG_TAG = "myLogs";
 
    DBHelper dbHelper;
 
    public void Insert(String text, String title) {
 
        dbHelper = new DBHelper(this);
 
        // создаем объект для данных
        ContentValues cv = new ContentValues();
 
        // подключаемся к БД
        SQLiteDatabase db = dbHelper.getWritableDatabase();
 
        Log.d(LOG_TAG, "--- Insert in mytable: ---");
        // подготовим данные для вставки в виде пар: наименование столбца - значение
 
        cv.put("name", text);
        cv.put("email", title);
        // вставляем запись и получаем ее ID
        long rowID = db.insert("mytable", null, cv);
        Log.d(LOG_TAG, "row inserted, ID = " + rowID);
 
        // закрываем подключение к БД
        dbHelper.close();
 
    }
 
    class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context) {
            // конструктор суперкласса
            super(context, "myDB", null, 1);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.d(LOG_TAG, "--- onCreate database ---");
            // создаем таблицу с полями
            db.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "name text,"
                    + "email text" + ");");
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
        }
    }
 
}
ошибки
User-space exception detected!
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

FATAL EXCEPTION: main
java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2016, 15:45     База SQLite: метод по созданию таблицы не вызывается
Посмотрите здесь:
Android База данных sqlite
Android AutoCompleteTextView + база sqlite
Android База данных SQLite
Android Подскажите - не вызывается метод в потоке
Не создается база данных SQLite Android
Android SQLite база данных (новичек)
Android SQLite база данных с паролем
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.02.2016, 15:53     База SQLite: метод по созданию таблицы не вызывается #2
qdhtnsoyndtr, принято _id
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
15.02.2016, 15:56  [ТС]     База SQLite: метод по созданию таблицы не вызывается #3
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
принято id_
Не понял, можно подробней?
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.02.2016, 16:02     База SQLite: метод по созданию таблицы не вызывается #4
qdhtnsoyndtr, обшибся не id_ , а _id
это как некий стандарт, где то читал что и ошибки были при использовании id
http://vlad8.com/tech/android-sqlite-database/
вот пример, да и гугл много чего выдает.

Бегло пробежался по коду, ошибок не увидел, попробуйте очистить базу (приложение) или создать с другим именем.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
15.02.2016, 16:02     База SQLite: метод по созданию таблицы не вызывается #5
человек выше хотел сказать что в этой строке
Java
1
2
3
4
db.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "name text,"
                    + "email text" + ");");
вместо просто id, принято писать "_id"
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
15.02.2016, 16:04     База SQLite: метод по созданию таблицы не вызывается #6
А почему не писать tablename_id, tablename2_id? Удобнее же при добавлении, например, в таблицу людей ид их квартир.
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
15.02.2016, 16:16  [ТС]     База SQLite: метод по созданию таблицы не вызывается #7
_Night_Scream_, Поправил, но все равно те же ошибки.
Попробую с вашей ссылки реализовать.

Добавлено через 1 минуту
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А почему не писать tablename_id, tablename2_id? Удобнее же при добавлении, например, в таблицу людей ид их квартир.
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
15.02.2016, 16:17     База SQLite: метод по созданию таблицы не вызывается #8
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
Это больше был вопрос к знающим людям. Может есть подводные камни при такой реализации.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
15.02.2016, 16:29     База SQLite: метод по созданию таблицы не вызывается #9
Цитата Сообщение от Паблито Посмотреть сообщение
вместо просто id, принято писать "_id"
в мохнатые годы по древним мануалам.
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.02.2016, 16:37     База SQLite: метод по созданию таблицы не вызывается #10
CoolMind, хотите не древний и не мохнатый?
http://www.fandroid.info/urok-34-rab...ite-v-android/
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
15.02.2016, 16:42     База SQLite: метод по созданию таблицы не вызывается #11
_Night_Scream_, а если я на сайте handroid.info напишу, что нужно писать с восклицательным знаком и только в полнолуние, тоже будете так делать?
Pablito
15.02.2016, 16:48
  #12

Не по теме:

да пофиг вообще в какие годы и по каким мануалам, тут принципально чувак отписался, потому что пытается меня поддеть, он даже не дочитал что я расшифровывал фразу

Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
qdhtnsoyndtr, принято _id
кто как хочет так и называет на самом деле, плевать что в классе BaseColumns есть готовая константа
Java
1
2
3
4
5
    /**
     * The unique ID for a row.
     * <P>Type: INTEGER (long)</P>
     */
    public static final String _ID = "_id";

_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.02.2016, 16:52     База SQLite: метод по созданию таблицы не вызывается #13
Spelcrawler, а вы напишите, посмотрим.
Аргументируйте внятно и трезво.
Я говорю о том как принято, это не я придумал, причину я находил на хабре.
Сам я аргументировать и громко призывать не буду, я привел ссылки, каких гугл выдает с десяток.

Еще есть такой момент, fandroid как и startandroid заслуживают большого уважения, человек очень много часов вложил во благо общества бескорыстно.
А теперь... вы кто и что за handroid я без понятия, это главный ответ, пожалуй.

Вам лишь бы поспорить, аргументируйте и пишите не ерепенясь, тогда диалог будет весьма приятным и конструктивным.

----
Тоже хотел написать про BaseColumns из гугла.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
15.02.2016, 16:59     База SQLite: метод по созданию таблицы не вызывается #14
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
А теперь... вы кто и что за handroid я без понятия
Ну вот и я про то же. Авторитета этот сайт не вызывает.
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
Вам лишь бы поспорить
Ну в споре рождается истина же) Да, я люблю поспорить, но не с целью кого-то унизить или доказать свою точку зрения, какой бы она ни была, а чтобы найти ту самую истину.
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
аргументируйте и пишите не ерепенясь
Ну это ведь вы говорите, что нужно так, а я спрашиваю аргументы)
Pablito
15.02.2016, 17:04
  #15

Не по теме:

ну там проблемы возникнут с CursorAdapter-ом, который типа уже устарел, но курсор лоадеры мало кто (судя по вопросам на форуме) осилил

xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 17:06     База SQLite: метод по созданию таблицы не вызывается #16
вместо просто id, принято писать "_id"
Ну это ведь вы говорите, что нужно так, а я спрашиваю аргументы)
Ну попробуй использовать например SimpleCursorAdapter с первичным ключем отличны от "_id", да и кроме этого хватает проблем.
Вот кусок из адаптера для RecyclerView
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public Cursor swapCursor(Cursor newCursor) {
        if (newCursor == mCursor) {
            return null;
        }
        Cursor oldCursor = mCursor;
        mCursor = newCursor;
        if (newCursor != null) {
            mRowIDColumn = newCursor.getColumnIndexOrThrow("_id");
            mDataValid = true;
            // notify the observers about the new cursor
            notifyDataSetChanged();
        } else {
            mRowIDColumn = -1;
            mDataValid = false;
            // notify the observers about the lack of a data set
            notifyItemRangeRemoved(0, getItemCount());
        }
        return oldCursor;
    }
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
15.02.2016, 17:18     База SQLite: метод по созданию таблицы не вызывается #17
xaat, попробовал
Java
1
2
3
4
5
6
public static final String USER_ID = "user_id";
public static final String USER_NAME = "name";
 
User user = new User();
user.setId(cursor.getInt(cursor.getColumnIndex(USER_ID)));
user.setName(cursor.getString(cursor.getColumnIndex(USER_NAME)));
Из реального кода скопировал - вполне работает.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
15.02.2016, 17:22     База SQLite: метод по созданию таблицы не вызывается #18
создай новую таблицу и укажи там имя autoincrement поля что-то отличное от _id
об этом речь, а не об обычных полях
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
15.02.2016, 17:23     База SQLite: метод по созданию таблицы не вызывается #19
Паблито, ну вот из создания той же таблицы
Java
1
INTEGER PRIMARY KEY AUTOINCREMENT
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2016, 17:24     База SQLite: метод по созданию таблицы не вызывается
Еще ссылки по теме:
База SqLite - проверка записей на существование Android
Android Android, ListView, база данных SQLite
Метод вызывается только после второго нажатия на кнопку Android
Android SQLite Связаные таблицы
SQLite дополнить записи из таблицы Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
15.02.2016, 17:24     База SQLite: метод по созданию таблицы не вызывается #20
Spelcrawler, База SQLite: метод по созданию таблицы не вызывается
и что мне дает этот текст ? INTEGER PRIMARY KEY AUTOINCREMENT
там даже не указано имя
Yandex
Объявления
15.02.2016, 17:24     База SQLite: метод по созданию таблицы не вызывается
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru