Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492

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

15.02.2016, 15:45. Показов 3550. Ответов 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.openOrCreateData base(java.lang.String, int, android.database.sqlite.SQLiteDatabase$C ursorFactory, 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.openOrCreateData base(java.lang.String, int, android.database.sqlite.SQLiteDatabase$C ursorFactory, 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.openOrCreateData base(java.lang.String, int, android.database.sqlite.SQLiteDatabase$C ursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2016, 15:45
Ответы с готовыми решениями:

Не работает проверка существования таблицы через метод ExecuteNonQuery() из System.Data.SQLite.dll
Использую приведенный ниже метод для определения существования таблицы в БД public int iExecuteNonQuery(string FileData, string sSql) ...

Почему эта функция вызывается по созданию элемента, а не по клику?
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>function Description(str)</title> <script...

Не могу понять почему не вызывается метод? Как вывести метод Plus?
namespace lesson3 { class Program { struct Complex { public double im; public double re;

30
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
15.02.2016, 15:53
qdhtnsoyndtr, принято _id
0
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
15.02.2016, 15:56  [ТС]
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
принято id_
Не понял, можно подробней?
0
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
15.02.2016, 16:02
qdhtnsoyndtr, обшибся не id_ , а _id
это как некий стандарт, где то читал что и ошибки были при использовании id
http://vlad8.com/tech/android-sqlite-database/
вот пример, да и гугл много чего выдает.

Бегло пробежался по коду, ошибок не увидел, попробуйте очистить базу (приложение) или создать с другим именем.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
15.02.2016, 16:02
человек выше хотел сказать что в этой строке
Java
1
2
3
4
db.execSQL("create table mytable ("
                    + "id integer primary key autoincrement,"
                    + "name text,"
                    + "email text" + ");");
вместо просто id, принято писать "_id"
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
15.02.2016, 16:04
А почему не писать tablename_id, tablename2_id? Удобнее же при добавлении, например, в таблицу людей ид их квартир.
0
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
15.02.2016, 16:16  [ТС]
_Night_Scream_, Поправил, но все равно те же ошибки.
Попробую с вашей ссылки реализовать.

Добавлено через 1 минуту
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А почему не писать tablename_id, tablename2_id? Удобнее же при добавлении, например, в таблицу людей ид их квартир.
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
15.02.2016, 16:17
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Это черновой вариант, проба сил. так что с названия ми не заморачивался.
Это больше был вопрос к знающим людям. Может есть подводные камни при такой реализации.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
15.02.2016, 16:29
Цитата Сообщение от Паблито Посмотреть сообщение
вместо просто id, принято писать "_id"
в мохнатые годы по древним мануалам.
0
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
15.02.2016, 16:37
CoolMind, хотите не древний и не мохнатый?
http://www.fandroid.info/urok-... v-android/
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
15.02.2016, 16:42
_Night_Scream_, а если я на сайте handroid.info напишу, что нужно писать с восклицательным знаком и только в полнолуние, тоже будете так делать?
0
15.02.2016, 16:48

Не по теме:

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

Цитата Сообщение от _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";

0
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
15.02.2016, 16:52
Spelcrawler, а вы напишите, посмотрим.
Аргументируйте внятно и трезво.
Я говорю о том как принято, это не я придумал, причину я находил на хабре.
Сам я аргументировать и громко призывать не буду, я привел ссылки, каких гугл выдает с десяток.

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

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

----
Тоже хотел написать про BaseColumns из гугла.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
15.02.2016, 16:59
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
А теперь... вы кто и что за handroid я без понятия
Ну вот и я про то же. Авторитета этот сайт не вызывает.
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
Вам лишь бы поспорить
Ну в споре рождается истина же) Да, я люблю поспорить, но не с целью кого-то унизить или доказать свою точку зрения, какой бы она ни была, а чтобы найти ту самую истину.
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
аргументируйте и пишите не ерепенясь
Ну это ведь вы говорите, что нужно так, а я спрашиваю аргументы)
0
15.02.2016, 17:04

Не по теме:

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

0
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.02.2016, 17:06
вместо просто 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;
    }
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
15.02.2016, 17:18
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)));
Из реального кода скопировал - вполне работает.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
15.02.2016, 17:22
создай новую таблицу и укажи там имя autoincrement поля что-то отличное от _id
об этом речь, а не об обычных полях
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
15.02.2016, 17:23
Паблито, ну вот из создания той же таблицы
Java
1
INTEGER PRIMARY KEY AUTOINCREMENT
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
15.02.2016, 17:24
Spelcrawler, База SQLite: метод по созданию таблицы не вызывается
и что мне дает этот текст ? INTEGER PRIMARY KEY AUTOINCREMENT
там даже не указано имя
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2016, 17:24
Помогаю со студенческими работами здесь

Не вызывается метод
Здравствуйте! Изучаю язык C++, начал осваивать ООП. Для лучшего понимания решил написать программу, где массив задается через класс. Для...

Не вызывается метод
Метод public static Zapchasti add(Zapchasti zap) не работает, выдает ошибку. Подскажите пожалуйста что исправить надо. package...

Не вызывается метод
Добрый вечер, странно, но в данном куске метод buildNewsletter() не вызывается...проверял с помощью alert(); function CreateBook(doc)...

Почему не вызывается метод?
Есть класс с прорисовкой меню. Так же есть класс с прорисовкой JFrame. В классе с фреймом хочу вызвать метод меню: ...

Не вызывается метод функции
Добрый вечер. Есть функция и попытка ее вызвать. Пишет что a не определен. Почему так? &lt;script&gt; (function a() { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru