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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
fedormoore
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 16
#1

Создать базу данных на sdcard - Android

22.03.2013, 10:57. Просмотров 1637. Ответов 2
Метки нет (Все метки)

Здравствуйте! не как не могу создать базу на карточке

Файл DataBaseHelper.java:
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
package com.example.test;
 
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
 
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
 
public class DataBaseHelper extends SQLiteOpenHelper {
 
    private static String DB_PATH = "mnt/sdcard/"; //путь к базе данных 
    private static String DB_NAME = "baza.sqlite"; //имя файла базы данных
    private SQLiteDatabase myDataBase;  
    private final Context myContext;
 
    public DataBaseHelper(Context context) {
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }   
 
    public void createDataBase() throws IOException{
        boolean dbExist = checkDataBase();
        if(!dbExist){ //если наша база не существует – скопировать её с ресурсов приложения
            getReadableDatabase();
            try {
                copyDataBase();
            } catch (IOException e) {}
        }
    }
 
    private boolean checkDataBase(){ //проверка на существования файла базы данных
        SQLiteDatabase checkDB = null;
        try{
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
        }catch(SQLiteException e){}
        if(checkDB != null)
            checkDB.close();
        return checkDB != null ? true : false;
    }
 
    private void copyDataBase() throws IOException{ //копировать базу данных из ресурсов
        InputStream myInput = myContext.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream myOutput = new FileOutputStream(outFileName);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }
        myOutput.close();
        myInput.close();
    }
 
    public void openDataBase() throws SQLException{//открыть базу
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }
 
    @Override
    public void close() {
        if(myDataBase != null)
            myDataBase.close();
        super.close();
    }
 
    public void exec(String query){//отправка SQL-запроса
        myDataBase.execSQL(query);
    }
 
    public void selectData(ArrayList<String> list) {//выбор полученых данных
        Cursor cursor = myDataBase.query("mytable", new String[] {"text"}, null, null, null, null, "text ASC"); //используем класс Cursor для работы с получеными данными
        if (cursor.moveToFirst()) {//выбираем записи и заносим в ArrayList пока они есть
            do {
                list.add(cursor.getString(0)); //выбираем первый столбец из нашей выборки данных
            } while (cursor.moveToNext());
        }
        if ((cursor != null) && !(cursor.isClosed()))
            cursor.close();
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}
Файл MainActivity.java:
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
package com.example.test;
 
import java.io.IOException;
import java.util.ArrayList;
 
import android.os.Bundle;
import android.app.Activity;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.Menu;
 
public class MainActivity extends Activity {
    
    DataBaseHelper mDbHelper = new DataBaseHelper(this);
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onResume(){
        super.onResume();
        DataBaseHelper myDbHelper = new DataBaseHelper(this);
        ArrayList<String> list = new ArrayList<String>(0);
        try {
            //Если нету базы - создаем её
            myDbHelper.createDataBase();
        } catch (IOException ioe) {}
        try {
            //Открываем базу данных
            myDbHelper.openDataBase();
            //Делаем запрос на выборку данных
            myDbHelper.selectData(list);
            //Закрываем базу данных
            myDbHelper.close();
        }catch(SQLException sqle){}
        //Выводим результаты запроса в LogCat
        for(String item : list)
            Log.v("LIST", item);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
(сама база в проекте лежит в папочке assets)

и не смотря на то что путь у меня указан DB_PATH = "mnt/sdcard/" база создается по пути /data/data/com.example.test/databasesb
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 10:57     Создать базу данных на sdcard
Посмотрите здесь:

Ждать, пока смонтируется sdcard Android
Android Сохранение фото в базу данных
Android Ошибка при добавлении в базу данных
Android ImageView - загрузка картинки из SDCARD
Android Эмулятор, использование SDcard (импорт сертификата fiddler)
Android Передача даты в базу данных
Android Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД)
Android Добавление записи в Базу данных
Связать базу данных Android
Добавление таблиц в базу данных Android
Android Загрузить собственную базу данных
Создать базу данных по нажатию кнопки Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dr_yand
156 / 138 / 6
Регистрация: 13.03.2013
Сообщений: 321
Записей в блоге: 3
22.03.2013, 11:04     Создать базу данных на sdcard #2
Сам не пробовал, но вот что пишут
Java
1
2
File dbfile = new File("/sdcard/android/com.myapp/databases/mydatabase.db" ); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
http://stackoverflow.com/questions/7...ase-on-sd-card
XML
1
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
22.03.2013, 12:53     Создать базу данных на sdcard #3
Лучше используй вместо mnt/sdcard/baza.sqlite что-то вроде этого:

Java
1
String PATH = Environment.getExternalStorageDirectory().getPath() + "/baza.sqlite";
так как на разных устройствах путь до sdcard отличается на некоторых (а может и всех) самсунгах например "/mnt/sdcard/external_sd" а не "/mnt/sdcard/"
Yandex
Объявления
22.03.2013, 12:53     Создать базу данных на sdcard
Ответ Создать тему
Опции темы

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