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

SQLite "Error inserting" - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Поставить свою картинку в Spinner (выпадающий список) http://www.cyberforum.ru/android-dev/thread1240832.html
На кнопки уже понял как ставить свою картинку(и на нажатие и тд). А вот выпадающий список не знаю. Там есть свойство background у самого спинера, только оно ничего не дает. По сути там "выпадают" те...
Программирование Android Научите пользоваться YouTube API Я хочу написать софтину, которая сможет осуществлять поиск видео на YouTube. Когда я попытался разобраться с API ютуба возникла куча проблем: 1. Проще всего оказалось найти на ютубе апи v2. Этот... http://www.cyberforum.ru/android-dev/thread1240811.html
Android studio не получается создать .apk Программирование Android
Приветствую, после перехода с eclipse проблема с запуском приложения в android studio, и созданием Apk файла. Запустить не получается, потому что в конфигурации ошибка Error: Module not specified ....
Ошибка activity_main.xml: java.lang.System.arraycopy([CI[CII)V Программирование Android
При перетягивании из Text Field любой виюшки появляется Error activity_main.xml: java.lang.System.arraycopy(Добавлено через 1 час 8 минут вот еще видимо к тому же: NOTE: This project contains...
Программирование Android Сделать кнопки в середине экрана, и картинку на фоне растянуть на весь экран http://www.cyberforum.ru/android-dev/thread1240683.html
У менять есть 3 кнопки на экране, они в середине(по вертикали и горизонтали), но при этом картинка на фоне(бэкграунд) прилипает к размеру кнопок. Это от того, что у layout активити стоит...
Программирование Android Реализация слушателя в виде анонимного внутреннего класса Здравствуйте. Я новичёк в Андройде. Начал своё изучение с книги "Программирование под андройд" авторов Брайана Харди, Билли Филлипса. Я немного знаком с основными концепциями анонимнымных классов но... подробнее

Показать сообщение отдельно
Flash_2oo9
3 / 3 / 0
Регистрация: 31.10.2012
Сообщений: 142

SQLite "Error inserting" - Программирование Android

11.08.2014, 18:37. Просмотров 769. Ответов 0
Метки (Все метки)

Добрый вечер.
Создаю приложение "Обучалку слов анг-рус", не суть важно) Посоветовали мне тут на форуме закинуть словари, в которых хранятся слова и переводы, в SQLite. Для более легкого доступа. Вообщем написал класс для работы с бд(ниже). Но при попытки вставить данные выдает ошибки (приложение продолжает работать, не вылетает, в логах заметил, так бы и не понял в чем проблема):
Кликните здесь для просмотра всего текста
08-10 19:06:09.917 1124-1124/com.projects.learnwords.app E/Database﹕ Error inserting CORRECT_ENGLISH_WORDS=0 SECOND_WORD=собака CORRECT_RUSSIANS_WORDS=0 FIRST_WORD=dog
android.database.sqlite.SQLiteException: no such table: Бд: , while compiling: INSERT INTO Бд(CORRECT_ENGLISH_WORDS, SECOND_WORD, CORRECT_RUSSIANS_WORDS, FIRST_WORD) VALUES(?, ?, ?, ?);
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
at com.projects.learnwords.app.DbControl.insert(DbControl.java:60)
at com.projects.learnwords.app.FileManager.writeToDictionary(FileManager.java:141)
at com.projects.learnwords.app.FileManager.readFile(FileManager.java:122)
at com.projects.learnwords.app.FileManager.access$100(FileManager.java:25)
at com.projects.learnwords.app.FileManager$1.onClick(FileManager.java:59)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
08-10 19:08:14.511 1124-1124/com.projects.learnwords.app I/Database﹕ sqlite returned: error code = 1, msg = no such table: Бд
08-10 19:08:14.535 1124-1124/com.projects.learnwords.app E/Database﹕ Error inserting CORRECT_ENGLISH_WORDS=0 SECOND_WORD=стрела CORRECT_RUSSIANS_WORDS=0 FIRST_WORD=arrow
android.database.sqlite.SQLiteException: no such table: Бд: , while compiling: INSERT INTO Бд(CORRECT_ENGLISH_WORDS, SECOND_WORD, CORRECT_RUSSIANS_WORDS, FIRST_WORD) VALUES(?, ?, ?, ?);
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
at com.projects.learnwords.app.DbControl.insert(DbControl.java:60)
at com.projects.learnwords.app.FileManager.writeToDictionary(FileManager.java:141)
at com.projects.learnwords.app.FileManager.readFile(FileManager.java:122)
at com.projects.learnwords.app.FileManager.access$100(FileManager.java:25)
at com.projects.learnwords.app.FileManager$1.onClick(FileManager.java:59)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
08-10 19:08:14.539 1124-1124/com.projects.learnwords.app I/Database﹕ sqlite returned: error code = 1, msg = no such table: Бд
08-10 19:08:14.562 1124-1124/com.projects.learnwords.app E/Database﹕ Error inserting CORRECT_ENGLISH_WORDS=0 SECOND_WORD=группа CORRECT_RUSSIANS_WORDS=0 FIRST_WORD=band
android.database.sqlite.SQLiteException: no such table: Бд: , while compiling: INSERT INTO Бд(CORRECT_ENGLISH_WORDS, SECOND_WORD, CORRECT_RUSSIANS_WORDS, FIRST_WORD) VALUES(?, ?, ?, ?);
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
at com.projects.learnwords.app.DbControl.insert(DbControl.java:60)
at com.projects.learnwords.app.FileManager.writeToDictionary(FileManager.java:141)
at com.projects.learnwords.app.FileManager.readFile(FileManager.java:122)
at com.projects.learnwords.app.FileManager.access$100(FileManager.java:25)
at com.projects.learnwords.app.FileManager$1.onClick(FileManager.java:59)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
08-10 19:08:14.566 1124-1124/com.projects.learnwords.app I/Database﹕ sqlite returned: error code = 1, msg = no such table: Бд
08-10 19:08:14.589 1124-1124/com.projects.learnwords.app E/Database﹕ Error inserting CORRECT_ENGLISH_WORDS=0 SECOND_WORD=чистилище CORRECT_RUSSIANS_WORDS=0 FIRST_WORD=purgetory
android.database.sqlite.SQLiteException: no such table: Бд: , while compiling: INSERT INTO Бд(CORRECT_ENGLISH_WORDS, SECOND_WORD, CORRECT_RUSSIANS_WORDS, FIRST_WORD) VALUES(?, ?, ?, ?);
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
at com.projects.learnwords.app.DbControl.insert(DbControl.java:60)
at com.projects.learnwords.app.FileManager.writeToDictionary(FileManager.java:141)
at com.projects.learnwords.app.FileManager.readFile(FileManager.java:122)
at com.projects.learnwords.app.FileManager.access$100(FileManager.java:25)
at com.projects.learnwords.app.FileManager$1.onClick(FileManager.java:59)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Приложение пытается 4 раза воспользоваться методом insert(), соответственно 4 ошибки.

Вот код класса для работы с БД:
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
55
56
57
58
59
60
61
62
63
64
65
66
public class DbControl {
    private static final String DB_NAME = "LearnWordsDB.db";
    private final String TABLE_NAME;
    private final int DB_VERSION;
 
    static final String FIRST_WORD = "FIRST_WORD";
    static final String SECOND_WORD = "SECOND_WORD";
    static final String CORRECT_FIRST_WORDS = "CORRECT_ENGLISH_WORDS";
    static final String CORRECT_SECOND_WORDS = "CORRECT_RUSSIANS_WORDS";
 
    private Cursor cursor;
    private SQLiteDatabase database;
    private DbOpenHelper dbOpenHelper;
    private Context context;
 
    public DbControl(Context context, final String TABLE_NAME, int DB_VERSION){
        super();
        this.context = context;
        this.TABLE_NAME = TABLE_NAME;
        this.DB_VERSION =DB_VERSION;
    }
 
    public void open() throws SQLException {
        dbOpenHelper = new DbOpenHelper(context, DB_NAME, null, DB_VERSION);
        database = dbOpenHelper.getWritableDatabase();
    }
 
    public void close(){
        dbOpenHelper.close();
    }
    ///---> нас интересует данный метод
    public void insert(final String FIRST_WORD, final String SECOND_WORD,
                       final int CORRECT_FIRST_WORDS, final int CORRECT_SECOND_WORDS) {
 
        ContentValues values = new ContentValues();
 
        values.put(Dictionary.FIRST_WORD, FIRST_WORD);
        values.put(Dictionary.SECOND_WORD, SECOND_WORD);
        values.put(Dictionary.CORRECT_FIRST_WORDS, CORRECT_FIRST_WORDS);
        values.put(Dictionary.CORRECT_SECOND_WORDS, CORRECT_SECOND_WORDS);
 
        database.insert(TABLE_NAME, null, values);
    }
 
    
    private class DbOpenHelper extends SQLiteOpenHelper{
 
        public DbOpenHelper(Context context, final String DB_NAME, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, DB_NAME, factory, version);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + FIRST_WORD + " TEXT, " +
                    SECOND_WORD + " TEXT, " + CORRECT_FIRST_WORDS + " INTEGER, " + CORRECT_SECOND_WORDS + " INTEGER); " ;
            db.execSQL(CREATE_TABLE);
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
            db.execSQL(DROP_TABLE);
            onCreate(db);
        }
    }
}
Код откуда я пытаюсь вставить данные в БД.
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
55
...
private void writeToDictionary(String contents, String dictName){
 
 
        DbControl dict = new DbControl(getApplicationContext(), dictName, 1);
        DictionaryRow[] dictRows = parseWords(contents);
        try {
            dict.open();
            rememberDictionaryName(dictName);
            for(DictionaryRow dr: dictRows) {
                [B]dict.insert(dr.getFirstWord(), dr.getSecondWord(), dr.getCorrectFirstWords(), dr.getCorrectSecondWords());[/B]
            }
        } catch (SQLException e)
        {
            Log.e("CREATE_OR_OPEN_ERROR", e.toString());
            Toast.makeText(getApplicationContext(), "Ошибка", Toast.LENGTH_LONG).show();
        }
    }
    //--->все методы ниже нас не интересуют, они просто разбивают строку String на слова
    private DictionaryRow[] parseWords(String str){
        String firstWord;
        String secondWord;
        String[] strLines = str.split("\n");
        DictionaryRow[] dictRows = new DictionaryRow[strLines.length];
 
        for(int i = 0; i<strLines.length; i++) {
 
            if (!strLines[i].contains("|"))
                return null;
            int separator = strLines[i].indexOf("|");
 
            firstWord = strLines[i].substring(0, separator).toLowerCase();
            secondWord = strLines[i].substring(separator + 1).toLowerCase();
 
            firstWord = checkWord(firstWord);
            secondWord = checkWord(secondWord);
            dictRows[i] = new DictionaryRow(0, firstWord, secondWord, 0, 0);
        }
 
        return dictRows;
    }
 
    public static String checkWord(String word){
        if(word.endsWith(" ") || word.endsWith("\r")) {
            word = word.substring(0, word.length() - 1);
            word = checkWord(word);
        }
 
        if(word.startsWith(" "))
        {
            word = word.substring(1, word.length());
            word = checkWord(word);
        }
        return word;
    }
Так вот, по идеи при вызове
Java
1
database = dbOpenHelper.getWritableDatabase();
должен вызывать метод onCreate(SQLiteDatabase db), в котором должна создавать таблица. Но почему-то пишет, что таблицу не найдено. Как это можно исправить?






Добавлено через 22 часа 9 минут
Решение нашел:
Вообщем все работает, если явно вызвать метод onCreate(SQLiteDatabase db), непонятно только одно, почему везде пишут что данный метод должен сам вызывается при вызове getWritableDatabase(), если на практике это не так!?
Тестировал на телефоне API level 10, может в более новых версиях работает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru