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

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

Войти
Регистрация
Восстановить пароль
 
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
#1

Чтение из БД - Android

25.11.2013, 22:45. Просмотров 837. Ответов 7
Метки нет (Все метки)

Подскажите, пожалуйста, что не так
не могу понять
cBD
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
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
 
public class cBD extends SQLiteOpenHelper{
    private static final String DATABASE_NAME = "bd_name.db";
    private static final int DATABASE_VERSION = 1;
    
    public static final String TABLE_NAME = "user_info";
    public static final String UID = "_id";
    public static final String LOGIN = "login";
    public static final String PASSWORD = "password";
    public static final String LOGINED = "logined";
    
    
    private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
            + TABLE_NAME + " (" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + LOGIN + " VARCHAR(255),"
            + PASSWORD + " VARCHAR(255),"
            + LOGINED + " INTEGER);";
    private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS "
            + TABLE_NAME;
 
    public cBD(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        
    }
    
    @Override
    public void onCreate(SQLiteDatabase bd) {
        bd.execSQL(SQL_CREATE_ENTRIES);
 
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase bd, int arg1, int arg2) {
        bd.execSQL(SQL_DELETE_ENTRIES);
        onCreate(bd);
 
    }
    
 
}
использование
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
cBD sqh = new cBD(this);
        SQLiteDatabase bd = sqh.getWritableDatabase();
        
        ContentValues cv = new ContentValues();
        
        cv.put(cBD.LOGIN, "llllogin1");
        bd.insert(cBD.TABLE_NAME, cBD.LOGIN, cv);
        cv.put(cBD.PASSWORD, "pppas");
        bd.insert(cBD.TABLE_NAME, cBD.PASSWORD, cv);
        cv.put(cBD.LOGINED, "111");
        bd.insert(cBD.TABLE_NAME, cBD.LOGINED, cv);
        
        Cursor cursor = bd.query(cBD.TABLE_NAME, new String[] {
                cBD.UID, cBD.LOGIN }, 
                null, // The columns for the WHERE clause
                null, // The values for the WHERE clause
                null, // don't group the rows
                null, // don't filter by row groups
                null // The sort order
                );
        while (cursor.moveToNext()) {
            // GET COLUMN INDICES + VALUES OF THOSE COLUMNS
            int id = cursor.getInt(cursor.getColumnIndex(cBD.UID));
            String name = cursor.getString(cursor.getColumnIndex(cBD.LOGIN));
            Log.i("LOG_TAG", "ROW " + id + " HAS NAME " + name);
        }
        cursor.close();
        
        
        bd.close();
        sqh.close();
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
11-25 18:40:16.941: I/Database(11208): sqlite returned: error code = 1, msg = no such column: _id
11-25 18:40:16.951: D/AndroidRuntime(11208): Shutting down VM
11-25 18:40:16.951: W/dalvikvm(11208): threadid=1: thread exiting with uncaught exception (group=0x40015560)
11-25 18:40:16.971: E/AndroidRuntime(11208): FATAL EXCEPTION: main
11-25 18:40:16.971: E/AndroidRuntime(11208): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pr/com.pr.enterScreen}: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, login FROM user_info
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.os.Looper.loop(Looper.java:123)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.app.ActivityThread.main(ActivityThread.java:3683)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at java.lang.reflect.Method.invokeNative(Native Method)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at java.lang.reflect.Method.invoke(Method.java:507)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at dalvik.system.NativeStart.main(Native Method)
11-25 18:40:16.971: E/AndroidRuntime(11208): Caused by: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, login FROM user_info
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1235)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1189)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1271)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at com.pr.enterScreen.onCreate(enterScreen.java:53)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-25 18:40:16.971: E/AndroidRuntime(11208):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
11-25 18:40:16.971: E/AndroidRuntime(11208):    ... 11 more
ругается на _id
если убрать вытаскивание из этого столбца, то работает, но выводит кучу раз, хотя я тудо столько не записывал, вроде
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 22:45     Чтение из БД
Посмотрите здесь:

Android Чтение txt файла
Чтение из файла Android
Чтение XML Android
Чтение смс Android
AsyncTask и чтение XML Android
Чтение данных из бд в listview Android
Android Чтение файла из ndk
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
26.11.2013, 07:30     Чтение из БД #2
spydark91, у вас написано:
android.database.sqlite.SQLiteException: no such column: _id
т.е. БД не содержит поля _id

Добавлено через 13 минут
Попробуйте при создании таблицы сразу вписать туда значение.
Возможно автоинкремент не срабатывает каким то образом, когда в базе нет записей.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
26.11.2013, 16:00  [ТС]     Чтение из БД #3
Цитата Сообщение от dubok79 Посмотреть сообщение
т.е. БД не содержит поля _id
вот этого я и не понимаю
ведь я его вставляю
Java
1
+ TABLE_NAME + " (" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
26.11.2013, 16:27     Чтение из БД #4
Цитата Сообщение от spydark91 Посмотреть сообщение
вот этого я и не понимаю
ведь я его вставляю
Java
1
+ TABLE_NAME + " (" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
Java
1
"ID INTEGER PRIMARY KEY AUTOINCREMENT"
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
26.11.2013, 16:41  [ТС]     Чтение из БД #5
Java
1
2
3
4
5
6
    public static final String UID = "ID";
 
    
    
    private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
            + TABLE_NAME + " ( "+ UID +" INTEGER PRIMARY KEY AUTOINCREMENT,"
так заработало
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
26.11.2013, 16:47     Чтение из БД #6
Цитата Сообщение от spydark91 Посмотреть сообщение
Java
1
2
3
4
5
6
    public static final String UID = "ID";
 
    
    
    private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
            + TABLE_NAME + " ( "+ UID +" INTEGER PRIMARY KEY AUTOINCREMENT,"
так заработало
Я подозреваю, что у вас сначала создавалась таблица с полем `ID`, а потом уже вы переписали код под имя поля`_id`.
Отсюда и чудеса.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
26.11.2013, 16:52  [ТС]     Чтение из БД #7
подскажите еще, пожалуйста
после исполнения такого кода 1 раз
Java
1
2
3
4
5
6
cv.put(cBD.LOGIN, "llllogin1");
        bd.insert(cBD.TABLE_NAME, cBD.LOGIN, cv);
        cv.put(cBD.PASSWORD, "pppas");
        bd.insert(cBD.TABLE_NAME, cBD.PASSWORD, cv);
        cv.put(cBD.LOGINED, "111");
        bd.insert(cBD.TABLE_NAME, cBD.LOGINED, cv);
выводит такой лог
Java
1
2
3
11-26 12:46:30.352: I/LOG_TAG(911): ROW 1 HAS NAME llllogin1   null
11-26 12:46:30.352: I/LOG_TAG(911): ROW 2 HAS NAME llllogin1   pppas
11-26 12:46:30.352: I/LOG_TAG(911): ROW 3 HAS NAME llllogin1   pppas
т.е. он внес целых 3 новых записи, а надо бы 1...
продположу, что это изза того, что я 3 раза вызываю insert
как записать сразу и ЛОГИН и ПАРОЛЬ и ЛОГИНЕД в одну строку с одним ИД?

Добавлено через 2 минуты
Цитата Сообщение от Slon747 Посмотреть сообщение
Я подозреваю, что у вас сначала создавалась таблица с полем `ID`, а потом уже вы переписали код под имя поля`_id`.
Отсюда и чудеса.
да, походу так и было
после удаления БД и изменения поля UID на _id (т.е. как и хотел) все было норм
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 17:00     Чтение из БД
Еще ссылки по теме:

Android Чтение данных БД
Android Чтение данных из базы
Android Чтение файла из облака
Чтение и конвертация переменной Android
Android Чтение данных из файла

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

Или воспользуйтесь поиском по форуму:
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
26.11.2013, 17:00     Чтение из БД #8
Цитата Сообщение от spydark91 Посмотреть сообщение
как записать сразу и ЛОГИН и ПАРОЛЬ и ЛОГИНЕД в одну строку с одним ИД?
Я не люблю эти insert() и put(), потому напишу в старом добром SQL:
Java
1
2
String query = "INSERT INTO table1 (field1, field2, field3) VALUES('value1', 'value2', 'value3);";
db.execSQL(query);
Yandex
Объявления
26.11.2013, 17:00     Чтение из БД
Ответ Создать тему
Опции темы

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