- .db파일 Android App에 넣기
1. 먼저 assets 폴더를 만들어 줘야한다!!
2. assets 폴더를 만들면 그 안에 ####.db 파일을 넣어준다.
db 파일!
↑ 위와 같이 assets 폴더에 잘 넣어준다~
3. db파일을 잘 넣어줬다면 이제 안드로이드 app에서 코드 넣어볼 차례!
필자가 참고한 출처는 자바로 되어있는데 필자는 Object를 이용해 코틀린으로 만들었다.
사용할땐 아래와 같이 사용하면된다.
where절을 사용하는등 추가로 변수가 필요하다면 파라미터를 수정해서 사용하자
ConnectDB.ShowMushDBInfo(applicationContext,"테이블명")
package com.패키지명
import android.content.Context
import android.content.res.AssetManager
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.view.View
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
object ConnectDB {
// DB파일 불러오는 함수
// assets 폴더에 db파일 넣어주면됨~
val ROOT_DIR = "/data/data/com.패키지명/databases/"
val DB_NAME = "DB명.db"
val DB_FULLPATH = "${ROOT_DIR}${DB_NAME}"
fun setDB(ctx: Context) {
val folder = File(ROOT_DIR)
if (folder.exists()) {
} else {
folder.mkdirs()
}
if (File(DB_FULLPATH).isFile)
println("파일 존재")
else
println("파일 존재하지않음")
val assetManager: AssetManager = ctx.resources.assets
// db파일 이름 적어주기
val outfile = File("${ROOT_DIR}${DB_NAME}")
var `is`: InputStream? = null
var fo: FileOutputStream? = null
var filesize: Long = 0
try {
`is` = assetManager.open(DB_NAME, AssetManager.ACCESS_STREAMING)
filesize = `is`.available().toLong()
if (outfile.length() <= 0) {
val tempdata = ByteArray(filesize.toInt())
`is`.read(tempdata)
`is`.close()
outfile.createNewFile()
fo = FileOutputStream(outfile)
fo.write(tempdata)
fo.close()
}
} catch (e: IOException) {
}
}
// Cursor를 통해 .db파일의 내용을 보여주는 함수
var db: SQLiteDatabase? = null
lateinit var cursor: Cursor
var mHelper: ProductDBHelper? = null
fun selectTable(mContext : Context, tableName: String) {
DBDrop()
setDB(mContext)
mHelper = ProductDBHelper(mContext)
db = mHelper?.writableDatabase
val sql = "Select * FROM ${tableName}"
cursor = db!!.rawQuery(sql, null)
var i = 0
while (cursor.moveToNext()) { // 행
for (j in 0 until cursor.columnCount) { // 열
println(cursor.getString(j))
}
i++
// if (cursor.getString(1).equals(name)) {
// mushname = cursor.getString(1)
// mushtype = cursor.getString(2)
// mushsym = cursor.getString(3)
// mushsim = cursor.getString(4)
// }
}
println("i : ${i}")
}
/*
테이블 구조가 바뀌거나, insert, update를 하면 기존에 가지고 있는 DB 정보와 달라지므로 필자는 DB를 지우고, 다시받는 방식을 채택했다.
DB를 지우고, 다시 받는 구조가 싫다면 테이블이 변경 되었을때 onUpgrade에서 insert, update문 등을 실행하면된다.
*/
fun DBDrop() {
val dbFile = File(DB_FULLPATH)
if (dbFile.delete()) {
println(" 삭제 성공")
} else {
println(" 삭제 실패")
}
}
}
class ProductDBHelper (context: Context?) : SQLiteOpenHelper(context, "디비명.db", null, 1) {
override fun onCreate(db: SQLiteDatabase) {
// TODO Auto-generated method stub
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
// TODO Auto-generated method stub
}
}
원본 코드
- .db 파일 불러오는 Code
// DB파일 불러오는 함수
// assets 폴더에 db파일 넣어주면됨~
public static final String ROOT_DIR = "/data/data/com.~~~~~/databases/";
public static void setDB(Context ctx) {
File folder = new File(ROOT_DIR);
if(folder.exists()) {
} else {
folder.mkdirs();
}
AssetManager assetManager = ctx.getResources().getAssets();
// db파일 이름 적어주기
File outfile = new File(ROOT_DIR+"######.db");
InputStream is = null;
FileOutputStream fo = null;
long filesize = 0;
try {
is = assetManager.open("######.db", AssetManager.ACCESS_BUFFER);
filesize = is.available();
if (outfile.length() <= 0) {
byte[] tempdata = new byte[(int) filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
} else {}
} catch (IOException e) {
}
}
public static final String ROOT_DIR = "/data/data/com.~~~~~/databases/";
→ ~~~~~~에는 자신의 adroid package명을 써준다!
File outfile = new File(ROOT_DIR+"######.db");
is = assetManager.open("######.db", AssetManager.ACCESS_BUFFER);
→ ######에는 자신의 .db 파일의 이름을 써준다!
- cursor를 통해 .db파일에 있는 내용 보여주는 Code
// Cursor를 통해 .db파일의 내용을 보여주는 함수
public SQLiteDatabase db;
public Cursor cursor;
ProductDBHelper mHelper;
String DBname = "######";
private void ShowMushDBInfo(String name){
setDB(this);
mHelper=new ProductDBHelper(this);
db =mHelper.getWritableDatabase();
String mushname = null;
String mushtype= null;
String mushsym = null;
String mushsim = null;
String sql = "Select * FROM " + DBname;
cursor = db.rawQuery(sql , null);
while (cursor.moveToNext()) {
if(cursor.getString(1).equals(name)) {
mushname = cursor.getString(1);
mushtype = cursor.getString(2);
mushsym = cursor.getString(3);
mushsim = cursor.getString(4);
}
}
mname.setText(mushname);
mtype.setText(mushtype);
msym.setText(mushsym);
msim.setText(mushsim);
}
→ Textview에 내용들이 뜨게 해줬음~
String DBname = "######";
→ ######에는 SQLite로 만들때 테이블 이름을 적는다~
.db파일 테이블 총 5가지로 생성!
String sql = "Select * FROM " + DBname;
cursor = db.rawQuery(sql , null);
while (cursor.moveToNext()) {
if(cursor.getString(1).equals(name)) {
mushname = cursor.getString(1);
mushtype = cursor.getString(2);
mushsym = cursor.getString(3);
mushsim = cursor.getString(4);
}
}
→ DBname의 테이블에서 cursor로 테이블에 있는 내용 가르쳐줘서 그걸 textview 띄워주겠다라는 Code
→ cursor.getString(0) 부터 시작 !! but 나는 _ID는 필요없기때문에 cursor.getString(1) 부터 시작했다~
- SQLiteOpneHelper.java class 생성하기!
package com.~~~~~~;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class ProductDBHelper extends SQLiteOpenHelper { //새로 생성한 adapter 속성은 SQLiteOpenHelper이다.
public ProductDBHelper(Context context) {
super(context, "######.db", null, 1); // db명과 버전만 정의 한다.
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
package com.~~~~~~;
→ ~~~~~~에는 자신의 adroid package명을 써준다.
super(context, "######.db", null, 1); // db명과 버전만 정의 한다.
→ ######에는 자신의 .db 파일의 이름을 써준다.
- DB Browser for SQLite에서 SQL로 data insert 해주는 방법
INSERT INTO ######
VALUES (1,'~~~~~~', '~~~~~~', '~~~~~~','~~~~~~');
→ ###### 에는 자신의 db 파일 table name을 적어준다.
→ ~~~~~~에는 자신이 입력할 내용을 적는다.
- 참고: SQL문 기본 문법
gmlwjd9405.github.io/2019/05/13/db-sql-insert-update-delete.html
출처: egloos.zum.com/adamjin/v/2875879
ⓐ 양자화 올리기...
'프로그래밍 > Android' 카테고리의 다른 글
[Android] XML에서 자동완성이 되지 않을경우 해결법 (0) | 2022.12.29 |
---|---|
[Android] 지문인식 구현 (0) | 2022.12.26 |
[Android] 반복되는 레이아웃 재사용 (include 태그) (0) | 2022.12.09 |
[Kotlin] 코드 실행시간 측정 (0) | 2022.12.06 |
[Android] 중복클릭 막기 (0) | 2022.12.02 |
댓글