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

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

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

Создать базу данных на sdcard - Программирование Android

22.03.2013, 10:57. Просмотров 1756. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 10:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать базу данных на sdcard (Программирование Android):

Создать базу данных по нажатию кнопки - Программирование Android
Есть такой код, как мне сделать так, что бы при нажатии кнопки (метод onClickCreateButton) создавалась база данных с названием равным...

Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД) - Программирование Android
В задание для курсовой работы по БД входят вот такие пункты: 1.2 Создание функции БД. 1.3 Создание процедуры БД 1.4 Создание...

Ждать, пока смонтируется sdcard - Программирование Android
Здравствуйте друзья! не раз выручали меня, не оставите и в этот раз... база данных хранится на карте, информация о виджетах тоже хранится...

ImageView - загрузка картинки из SDCARD - Программирование Android
Написал класс который отображает в ImageView картинку которая лежит в SDCARD. public class ShowPictureInSD { public static...

Не могу получить доступ к sdcard на android 6 и 7 - Программирование Android
В манивесте прописаны &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt; &lt;uses-permission...

Эмулятор, использование SDcard (импорт сертификата fiddler) - Программирование Android
Приветствую! Задача такая - я просматриваю траффик идущий с эмулятора через локальный прокси fiddler. На эмуляторе я не могу зайти на...

2
dr_yand
156 / 138 / 6
Регистрация: 13.03.2013
Сообщений: 321
Записей в блоге: 3
22.03.2013, 11:04 #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"/>
0
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
22.03.2013, 12:53 #3
Лучше используй вместо mnt/sdcard/baza.sqlite что-то вроде этого:

Java
1
String PATH = Environment.getExternalStorageDirectory().getPath() + "/baza.sqlite";
так как на разных устройствах путь до sdcard отличается на некоторых (а может и всех) самсунгах например "/mnt/sdcard/external_sd" а не "/mnt/sdcard/"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 12:53
Привет! Вот еще темы с ответами:

Связать базу данных - Программирование Android
Добрый вечер! Объясните пожалуйста новичку, как связать веб-сервер с андроид-приложением? (На сервере я управляю базой данных, содержимое...

Передача даты в базу данных - Программирование Android
как из массива строк и в каком формате записать в бд в столбец типа date дату?

Сохранение фото в базу данных - Программирование Android
Ребят помогите пожалуйста ! Суть такова есть Activity в ней EditText, ImageButton, Button и база данных. Как в ImageButton загонять фото...

Добавление записи в Базу данных - Программирование Android
Добрый вечер, Есть работающее приложение для чтения и отправки сообщений. Необходимо записать входящие сообщения в бд. Пытаюсь пытаюсь...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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