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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Поставить свою картинку в Spinner (выпадающий список) http://www.cyberforum.ru/android-dev/thread1240832.html
На кнопки уже понял как ставить свою картинку(и на нажатие и тд). А вот выпадающий список не знаю. Там есть свойство background у самого спинера, только оно ничего не дает. По сути там "выпадают" те же простые кнопки и где же их заменить картинками?
Программирование Android Научите пользоваться YouTube API Я хочу написать софтину, которая сможет осуществлять поиск видео на YouTube. Когда я попытался разобраться с API ютуба возникла куча проблем: 1. Проще всего оказалось найти на ютубе апи v2. Этот апи для авторизации хочет ID приложения и ключ, но при регистрации приложения выдаётся только ключ. 2. Так же есть апи v3. Там выдают и ID и ключ, но непонятно как их использовать в новом API и я... http://www.cyberforum.ru/android-dev/thread1240811.html
Android studio не получается создать .apk Программирование Android
Приветствую, после перехода с eclipse проблема с запуском приложения в android studio, и созданием Apk файла. Запустить не получается, потому что в конфигурации ошибка Error: Module not specified . Выбрать модуль нельзя, в списке <no modules>. При этом в Module Settings он отображается. В Build->Generate signed apk , нажать вообще нельзя. Скриншоты прикрепил. Заранее большое спасибо за помощь!
Ошибка 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 Java compilation errors, which can cause rendering failures for custom views. Fix compilation problems first. Exception raised during rendering: java.lang.System.arraycopy(
Программирование Android Сделать кнопки в середине экрана, и картинку на фоне растянуть на весь экран http://www.cyberforum.ru/android-dev/thread1240683.html
У менять есть 3 кнопки на экране, они в середине(по вертикали и горизонтали), но при этом картинка на фоне(бэкграунд) прилипает к размеру кнопок. Это от того, что у layout активити стоит Width:wrap_content и Height:wrap_content. Если меняю на match_parent или fill_parent тогда картинка растягивается на весь экран, но при этом кнопки уезжают в вверх, при том, что у них стоит...
Программирование Android Реализация слушателя в виде анонимного внутреннего класса Здравствуйте. Я новичёк в Андройде. Начал своё изучение с книги "Программирование под андройд" авторов Брайана Харди, Билли Филлипса. Я немного знаком с основными концепциями анонимнымных классов но никогда их не использовал их на практике. В программе испльзуется назначение слушателя таким образом: mTrueButton.setOnClickListener(new View.OnClickListener() { @Override ... подробнее

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

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

11.08.2014, 18:37. Просмотров 728. Ответов 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, может в более новых версиях работает?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru