Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
fedormoore
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 16
1

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

22.03.2013, 10:57. Просмотров 1915. Ответов 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
Ответы с готовыми решениями:

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

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

ImageView - загрузка картинки из SDCARD
Написал класс который отображает в ImageView картинку которая лежит в SDCARD. ...

Ждать, пока смонтируется sdcard
Здравствуйте друзья! не раз выручали меня, не оставите и в этот раз... база...

Не могу получить доступ к sdcard на android 6 и 7
В манивесте прописаны &lt;uses-permission...

2
dr_yand
157 / 138 / 15
Регистрация: 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
94 / 94 / 0
Регистрация: 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

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

Связать базу данных
Добрый вечер! Объясните пожалуйста новичку, как связать веб-сервер с...

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


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

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

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