Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android затруднена работа с Эклипсом http://www.cyberforum.ru/android-dev/thread1029462.html
есть три файла с разширениями: -.xml -.java -.java как их объединить в один контейнер для запуска? Eclipce Kepler android
Как получить выделенный текст Программирование Android
Как получить выделенный текст в TextView по долгому тапу. В идеале, чтобы не выплывало стандартное меню Copy, Select All. Если использовать свое собственное контекстное меню - текст не выделяется....
Загрузка образа Программирование Android
Добрый день! Есть вопрос. При запуске образа Android с помощью программы Genymotion появляется ошибка. Поделитесь опытом, если кто-нибудь видел что-нибудь подобное. Заранее большое спасибо!
Программирование Android Какой использовать элемент экрана для вывода текста? Здравствуйте. Во вкладке Pallete в Intellij IDEA доступны различные слои, виджеты, контейнеры и т.д. Что из них можно использовать для вывода текста и как? Т.е. в Паскале на основе введенной... http://www.cyberforum.ru/android-dev/thread1029284.html
Программирование Android Синтаксис в вызове onTouchEvent из WallpaperService.Engine http://www.cyberforum.ru/android-dev/thread1029212.html
Нужно вызывать метод onTouchEvent(MotionEvent e) из WallpaperService.Engine как это должно выглядеть? и как реализовать интерфейс ZTouchMoveListener, с методом onTouchOffsetChanged(float xOffset) в...
Программирование Android Определение объекта
Всем привет! Рисую на SurfaceView несколько объектов, каждый из них принадлежит отдельному классу. Каким образом определять по касанию какой из объектов выбран для дальнейших манипуляций с ним?...
Программирование Android Свой собственный прогресс бар
Доброй ночи ув. Программисты. 4й час в поисках и без результатно все одно и то же. А того что надо нет. Подскажите как реализовать следующее: - Есть AsyncTask который выполняет определённые...
Программирование Android GET/POST Запросы на страницу php Добрый вечер. Я впервые программирую на Android. Столкнулся с такой проблемой: есть страница на Php Code: <? $FIRST_NAME = $_GET; $SECOND_NAME = $_GET; http://www.cyberforum.ru/android-dev/thread1028631.html
Программирование Android Падает программа Navigation Drawer http://www.cyberforum.ru/android-dev/thread1028609.html
Собрал пример этот бокового меню http://developer.android.com/intl/ru/training/implementing-navigation/nav-drawer.html на планшете android 4.4 все работает на телефоне 2.3.3 запускается программа и...
Программирование Android После обновления записи в базе данных невозможно добавить новую запись Здравствуйте. У меня есть список, который формируется из базы данных. Добавление новых записей выполняется до тех пор, пока я не вызову контекстное меню для какой-то определенной записи и в этом меню... http://www.cyberforum.ru/android-dev/thread1028420.html
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
0

Использование готовой базы SqLite из ресурсов

05.12.2013, 21:35. Просмотров 3117. Ответов 7
Метки (Все метки)

Здравствуйте.

Мне необходимо в приложении использовать готовую базу, но для того чтобы её использовать я копирую её в то место где Android обычно хранит базы и начинаю её использовать. Всё работает хорошо, но есть одно НО. Если я захочу изменить в новой версии приложения готовую базу которую помещу в ресурсах Assets, то мое приложении никак на это не отреагирует. Помогите, мне сделать так, чтобы я как-то мог отслеживать, то, что базу которая в Android хранится необходимо заменить новой базой, так как в ресурсах (в новой версии приложения) она уже поменялась.

Вот код приложения:

Главный MainClass
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
78
79
80
81
82
83
import java.util.ArrayList;
 
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
 
public class IdevOwnSqliteDbActivity extends ListActivity {
 
    //Хорошей практикой является задание имен полей БД константами
    private static final String TABLE_NAME = "friends";
    private static final String FRIEND_ID = "_id";
    private static final String FRIEND_NAME = "name";
 
    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList friends;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        System.out.println(">>>> onCreate(IdevOwnSqliteDbActivity)()");
        
        //Наш ключевой хелпер
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this);
//        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();
        //Все, база открыта!
        fillFreinds();
        setUpList();
    }
 
private void setUpList() {
    
       System.out.println(">>>> setUpList()");
    
    //Используем стандартный адаптер и layout элемента для краткости
    setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, friends));
    listView = getListView();
 
    //Подарим себе тост — для души
    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view,
                        int position,long id) {
            Toast.makeText(getApplicationContext(),
                        ((TextView) view).getText() +
                         " could be iDev's friend",
                         Toast.LENGTH_SHORT).show();
        }
    });
}
 
//Извлечение элементов из базы данных
private void fillFreinds() {
    
    
       System.out.println(">>>> fillFreinds()");
    
    friends = new ArrayList<String>();
    Cursor friendCursor = database.query(TABLE_NAME,
                                             new String[] {FRIEND_ID, FRIEND_NAME},
                         null, null,null,null,
                                             FRIEND_NAME);
        friendCursor.moveToFirst();
        if(!friendCursor.isAfterLast()) {
            do {
                String name = friendCursor.getString(1);
                friends.add(name);
            } while (friendCursor.moveToNext());
        }
        friendCursor.close();
    }
}
и класс Halper
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
 
public class ExternalDbOpenHelper extends SQLiteOpenHelper {
 
    // Путь к папке с базами на устройстве
    private static String DB_PATH = "";
    // Имя файла с базой
    private static final String DB_NAME = "friends.sqlite";
    // версия базы данных
    private static final int DB_VERSION = 1;
    public SQLiteDatabase database;
    public final Context context;
 
    public SQLiteDatabase getDb() {
        System.out.println(">>>> getDb()");
        return database;
    }
 
    public ExternalDbOpenHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);// 1? its Database Version
 
        System.out.println(">>>> ExternalDbOpenHelper()");
 
        // Составим полный путь к базам для вашего приложения
        if (android.os.Build.VERSION.SDK_INT >= 4.2) {
            DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
        } else {
            DB_PATH = context.getString(R.string._data_data_)
                    + context.getPackageName() + "/databases/";
        }
        this.context = context;
    }
 
    // Создаст базу, если она не создана
    public void createDataBase() {
 
        System.out.println(">>>> createDataBase()");
 
        boolean dbExist = checkDataBase();
        if (!dbExist) {
            this.getReadableDatabase();
            try {
                copyDataBase();
            } catch (IOException e) {
                Log.e(this.getClass().toString(), "Copying error");
                throw new Error("Error copying database!");
            }
        } else {
            Log.i(this.getClass().toString(), "Database already exists");
        }
    }
 
    // Проверка существования базы данных
    private boolean checkDataBase() {
 
        System.out.println(">>>> checkDataBase()");
 
        File dbFile = new File(DB_PATH + DB_NAME);
        return dbFile.exists();
    }
 
    // Метод копирования базы
    private void copyDataBase() throws IOException {
 
        System.out.println(">>>> copyDataBase()");
 
        // Открываем поток для чтения из уже созданной нами БД
        // источник в assets
        InputStream externalDbStream = context.getAssets().open(DB_NAME);
 
        // Путь к уже созданной пустой базе в андроиде
        String outFileName = DB_PATH + DB_NAME;
 
        // Теперь создадим поток для записи в эту БД побайтно
        OutputStream localDbStream = new FileOutputStream(outFileName);
 
        // Собственно, копирование
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = externalDbStream.read(buffer)) > 0) {
            localDbStream.write(buffer, 0, bytesRead);
        }
        // закроем потоки
        localDbStream.close();
        externalDbStream.close();
 
    }
 
    public SQLiteDatabase openDataBase() throws SQLException {
 
        System.out.println(">>>> openDataBase()");
 
        String path = DB_PATH + DB_NAME;
        if (database == null) {
            createDataBase();
            database = SQLiteDatabase.openDatabase(path, null,
                    SQLiteDatabase.OPEN_READWRITE);
        }
        return database;
    }
 
    @Override
    public synchronized void close() {
 
        System.out.println(">>>> close()");
 
        if (database != null) {
            database.close();
        }
        super.close();
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
 
        System.out.println(">>>> onCreate()");
 
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
        if (newVersion > oldVersion) {
 
            System.out.println(">>>> onUpgrade - newVersion");
 
        }
 
        System.out.println(">>>> onUpgrade");
 
    }
}


Вернуться к обсуждению:
Использование готовой базы SqLite из ресурсов
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 21:35
Готовые ответы и решения:

Room использование готовой базы
У меня есть готовая база данных, которую хочу добавить в проект, возникает вопрос, как это сделать...

Работа с готовой SQLite базой на андроид
Здравствуйте! Пытаюсь подключить готовую sqlite базу с помощью этого кода, взятого из интернета:...

Импорт готовой базы в приложение
Нужно использовать в приложении готовую базу, около 22 тыс записей. В голову приходит 2 варианта:...

Использование готовой базы Djando
Как сгенерить модели из готовой худо-бедно описано (пришлось убрать схемы из постгре, но и ладно)....

Создание готовой программы из готовой базы данных
Добрый день. Есть полностью готовая база данных с таблицами, формами, отчетами. Короче полностью...

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