본문 바로가기
프로그래밍/Android

[Android] *.db 파일 넣기 (SQLite)

by Youngs_ 2022. 12. 12.
  • .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

 

[DB] SQL문 기본 문법 - 데이터 추가, 삭제, 갱신 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

 

출처: egloos.zum.com/adamjin/v/2875879

 

assets에 db넣고 사용하기 -개념이해-

assets에 db를 넣고 사용하는 방법은 두가지가 있다.Adapter를 사용하는 방법과 Activity에 Adapter를 생성해서 사용하는 방법이다.두가지 상황에 맞춰서 assets의 db를 불러오는 방법의 차이점을 아래의 ��

egloos.zum.com


ⓐ 양자화 올리기...

bugloss-chestnut.tistory.com/entry/Tensorflow-tflite%EB%A5%BC-Quantization%EC%96%91%EC%9E%90%ED%99%94%ED%95%98%EA%B8%B0python

 

[Tensorflow] .tflite를 Quantization(양자화)하기(python)

.tflite를 Quantization(양자화)하기(python) Python API는 quantization 옵션을 제공한다. 양자화는 float32로 학습된 weight값들을 단순화 시키는 작업을 말한다. 이 작업을 하게되면 .tflite이 파일크기가 대략..

bugloss-chestnut.tistory.com

 

 


출처 : https://bugloss-chestnut.tistory.com/entry/Android-db%ED%8C%8C%EC%9D%BC-Android-App%EC%97%90-%EB%84%A3%EA%B8%B0JAVA

 

[Android] .db파일 Android App에 넣기(JAVA)

.db파일 Android App에 넣기(JAVA) .db파일 Android App에 넣기 1. 먼저 assets 폴더를 만들어 줘야한다!! (assets 폴더 없으면 다음 링크를통행 assets 폴더 만들기!) bugloss-chestnut.tistory.com/entry/Android-h5-pb-tflite%EB%A

bugloss-chestnut.tistory.com

 

댓글