Lendo banco de dados SQLite no Android
|
Categoria: Android
|
Publicado em 28 de Julho de 2011
|
Caso um banco de dados SQLite já exista, para usá-lo num aplicativo Android: a) Criar a classe DataBaseHelper: 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
| package fhu.com.br;
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.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseHelper extends SQLiteOpenHelper{
// Android's folder for all your databases. You only have to change
// "fhu.com.br" to match yours
private static String DB_PATH = "/data/data/fhu.com.br/databases/";
// Name of the database file
private static String DB_NAME = "nomebanco.sqlite";
// Internal variables
private SQLiteDatabase dbHandle;
private final Context dbContext;
/**
* Constructor
* Takes and keeps a reference of the passed context in order to access to the application assets and resources.
* @param context
*/
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.dbContext = context;
}
/**
* Creates a empty database on the system and rewrites it with your own database.
* */
public void createDataBase() throws IOException {
// Verifies if the database already exist
boolean dbExist = checkDataBase();
if (!dbExist) {
// By calling this method and empty database will be created into the default system path
// of your application so we are gonna be able to overwrite that database with our database.
this.getReadableDatabase();
try {
this.copyDataBase();
} catch (IOException e) {
throw new Error("Erro ao copiar banco de dados");
}
}
}
/**
* Check if the database already exist to avoid re-copying the file each time you open the application.
* @return true if it exists, false if it doesn't
*/
private boolean checkDataBase(){
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
// database does't exist yet.
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
/**
* Copies your database from your local assets-folder to the just created empty database in the
* system folder, from where it can be accessed and handled.
* This is done by transfering bytestream.
* */
private void copyDataBase() throws IOException{
// Openn local db as the input stream
InputStream myInput = dbContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
// Opens the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// Transfers bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
// Closes the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException{
// Open the database
String myPath = DB_PATH + DB_NAME;
dbHandle = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if (dbHandle != null)
dbHandle.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase dbHandle) {
}
@Override
public void onUpgrade(SQLiteDatabase dbHandle, int oldVersion, int newVersion) {
}
} |
b) Copiar o arquivo nomebanco.sqlite para o folder /assets/ do projeto Android. c) Na classe principal do aplicativo (Activity): 1
2
3
4
5
6
7
8
9
10
11
12
13
14
| DataBaseHelper myDbHelper;
myDbHelper = new DataBaseHelper(this);
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Não foi possível criar o banco de dados.");
}
try {
myDbHelper.openDataBase();
} catch (SQLException sqle){
throw sqle;
} |
NOTA: O plugin do Firefox SQLite Manager ou o aplicativo SQLite Database Browser são dois bons aplicativos gerenciadores de banco de dados SQLite, ambos gratuitos.
FONTE: Conteúdo original deste artigo em Using your own SQLite database in Android applications.
|