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

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

Войти
Регистрация
Восстановить пароль
 
Willyams
1 / 1 / 1
Регистрация: 28.06.2015
Сообщений: 74
Завершенные тесты: 1
#1

Прочитать данные из нужной БД - Программирование Android

21.06.2016, 18:16. Просмотров 209. Ответов 1
Метки нет (Все метки)

Здравствуйте, у меня возник вопрос по поводу чтения данных из нужной БД. В моем приложении пользователь нажимает в ResyclerView на элемент и вызывается активность с подробной информацией об этом элементе. В интент кладется номер нажатой пользователем позиции на ResyclerView и активность с подробной информацией понимает, что ей нужно вывести. Но как сделать так чтобы вызывалась информация из нужной БД, к примеру если пользователь нажмет на первый пункт - вызовется информация из первой БД, для второго пункта из второй БД.
Вот класс базы данных:
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
67
68
69
70
71
72
73
74
75
76
77
public class MyDataBase {
 
    private DBOpenHelper dbOpenHelper;
    private SQLiteDatabase database;
 
    private static final String DB_NAME = "AutoRate";
    private static final String TABLE_NAME = "AUTOCOLOR";
    private static final String SECOND_TABLE_NAME = "AUTORATE";
 
    public static final String NAME = "NAME";
    public static final String DESCRIPTION = "DESCRIPTION";
    public static final String PRICE = "PRICE";
 
 
    private static final int DB_VERSION = 1;
 
    public MyDataBase(Context context) {
        dbOpenHelper = new DBOpenHelper(context);
    }
    public String getDataBaseName(){
        return TABLE_NAME;
    }
 
    public Cursor getAllItems() {
        database = dbOpenHelper.getReadableDatabase();
        return database.query(TABLE_NAME, null, null, null, null, null, null);
    }
 
    public void close() {
        if (dbOpenHelper != null) dbOpenHelper.close();
        if (database != null) database.close();
    }
    public class DBOpenHelper extends SQLiteOpenHelper {
 
 
 
        public DBOpenHelper(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + NAME + " TEXT, "
                    + DESCRIPTION + " TEXT, "
                    + PRICE + " INTEGER) ;");
            insertService(db, "AUTOCOLOR", "Шиномонтаж", "Замена четырех колес", 4000);
            insertService(db, "AUTOCOLOR", "Кузовные работы", "Замена чего то там", 10000);
            insertService(db, "AUTOCOLOR", "Диагностика", "Продиагностировать чего-нибудь", 3000);
 
 
            db.execSQL("CREATE TABLE " + SECOND_TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + NAME + " TEXT, "
                    + DESCRIPTION + " TEXT, "
                    + PRICE + " INTEGER) ;");
            insertService(db, "AUTORATE", "Шиномонтаж", "Замена четырех колес", 5000);
            insertService(db, "AUTORATE", "Кузовные работы", "Замена чего то там", 12000);
            insertService(db, "AUTORATE", "Диагностика", "Продиагностировать чего-нибудь", 4000);
 
 
        }
        
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
        }
 
        private void insertService(SQLiteDatabase db, String currentDataBaseName, String name, String description, int price) {
            ContentValues contentValues = new ContentValues();
            contentValues.put(NAME, name);
            contentValues.put(DESCRIPTION, description);
            contentValues.put(PRICE , price);
            db.insert(currentDataBaseName, null, contentValues);
        }
    }
}
Место в другом классе, где из интента берется номер нажатой позиции и инициализируется БД.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auto_service_detail);
        Bundle bundle= getIntent().getExtras();
        if(bundle != null){
            Object o = bundle.get(EXTRA_SERVICE_NO);
            autoServiceNo = (Integer.parseInt(String.valueOf(o)));
        }
        dataBase = new MyDataBase(this);
        Cursor cursor = dataBase.getAllItems();
 
        String[]from = new String[]{MyDataBase.NAME,MyDataBase.DESCRIPTION,MyDataBase.PRICE};
        int[] to = new int[]{R.id.tvName, R.id.tvDescription, R.id.tvPrise};
 
 
        cursorAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to,0);
        listView = (ListView)findViewById(R.id.listViewPrise);
        listView.setAdapter(cursorAdapter);
Как мне используя
Java
1
2
3
4
5
Bundle bundle= getIntent().getExtras();
        if(bundle != null){
            Object o = bundle.get(EXTRA_SERVICE_NO);
            autoServiceNo = (Integer.parseInt(String.valueOf(o)));
        }
прочитать данные из нужной БД?

Добавлено через 43 минуты
Если я в метод
Java
1
2
3
4
public Cursor getAllItems() {
        database = dbOpenHelper.getReadableDatabase();
        return database.query(TABLE_NAME, null, null, null, null, null, null);
    }
передам имя таблицы, вытащив его из интента:
Java
1
tableName = AutoServiceInfo.autoServices[autoServiceNo].getName();
и передав имя текущей таблицы в метод
Java
1
2
3
4
public Cursor getAllItems(String tableName) {
        database = dbOpenHelper.getReadableDatabase();
        return database.query(tableName, null, null, null, null, null, null);
    }
, то для первой таблицы все работает нормально, а когда я пытаюсь нажать на ResyclerView на второй элемент, то приложение крашется и пишет что Caused by: android.database.sqlite.SQLiteException: no such table: AUTORATE (code 1): , while compiling: SELECT * FROM AUTORATE.

Добавлено через 2 часа 47 минут
Если кому будет интересна эта новость, то решение ошибки - удалить приложение с устройства и поставить заного, так как я не проапгрейдил версию базы данных. ХЕХЕХ. и телефон при первом запуске запомнил первую версию БД с одной таблицой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 18:16     Прочитать данные из нужной БД
Посмотрите здесь:

Генератор звука нужной частоты - Программирование Android
Всем привет. Что то не могу найти на просторах Интернета, как можно воспроизвести звук нужной частоты? Вариант с файлом не подходит, ибо...

Прочитать часть файла - Программирование Android
Нужно открыть файл и, начиная от 4-го байта, все записать в массив byte. Такой код записывает все, но начиная с 4-го байта в массиве: ...

Прочитать большой JSON - Программирование Android
Есть очень большой JSON по ссылке http://api.giphy.com/v1/gifs/search?q=funny+cat&api_key=dc6zaTOxFJmzC Я его читаю следующим кодом ...

Прочитать XML с сайта - Программирование Android
продолжаю изучение программирования под Android, возник вопрос: допустим, у нас есть XML: http://informer.gismeteo.ru/xml/27612.xml ...

Как прочитать db файл? - Программирование Android
Как можно прочитать в приложении содержимое db файла который находится на телефоне ?? Добавлено через 22 минуты нужны root права для...

Как записать/прочитать картинку? - Программирование Android
как записать\прочитать картинку?

JSON прочитать объект в объекте - Программирование Android
Всем привет! Есть код, и он работает, все нормально. Но мне нужно прочитать URL на картинку, которая находится "объект в объекте" Вот...

Прочитать значение настройки из ListPreference - Программирование Android
Есть настройка: <ListPreference android:defaultValue="1" android:entries="@array/LoadDataArray" ...

Нужно прочитать html файл - Программирование Android
Мне необходимо скачать html - файл и прочитать.Не можете скинуть уроки,а лучши примеры,как это делать. Заранее спасибо.

Необходимо прочитать штрих-код - Программирование Android
Можете подсказать какой - нибудь пример с чтением PDF417 штрих - кода. Заранее благодарен.

Прочитать файл из res/raw - Программирование Android
Привет. Можно ли как нибуть прочитать файл из res/raw не с помощью openRawResource()? То есть получить его имя и прочитать самому, а не...

Почему не возможно прочитать файл - Программирование Android
File dir_image2 = new File(Environment.getExternalStorageDirectory()+ File.separator+"Ultimate Entity Detector"); ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dark-VIN
1 / 1 / 0
Регистрация: 16.01.2013
Сообщений: 66
25.06.2016, 10:31     Прочитать данные из нужной БД #2
Можно, конечно, создать два разных класса и в них создавать свою БД, но лучше всего создать одну БД и расформировать все по таблицам.
Ответ Создать тему
Опции темы

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