RN

riteSql 사용

fullfish 2023. 12. 4. 23:02

라이브러리 다운

react-native-sqlite-storage

 

android/settions.gradle에 추가

include ':react-native-sqlite-storage'
project(':react-native-sqlite-storage').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sqlite-storage/platforms/android')

 

android/app/build.gradle에 추가

implementation project(':react-native-sqlite-storage')

 

app/src/main/java/{package}/MainApplication.java에 추가 

그런데 공식문서에서는 하라고 되어있는데 오히려 추가하면 에러가 남

이 부분은 안해도 잘 되었음

// 제일 위에
import org.pgsqlite.SQLitePluginPackage

// 해당 부분에
@Override
protected List<ReactPackage> getPackages() {
    @SuppressWarnings("UnnecessaryLocalVariable")
    List<ReactPackage> packages = new PackageList(this).getPackages();
    
    packages.add(new SQLitePluginPackage()); // 이 줄 추가
    return packages;
}

 

app/src/main/assets/www 경로에 db파일 추가(예시 : testDB.db)

 

코드

import SQLite from 'react-native-sqlite-storage';

// 데이터 베이스 열기
const db = SQLite.openDatabase(
      {name: 'testDB.db', createFromLocation: '~testDB.db'},
      successCB,
      errorCB,
    );
    function successCB() {
      console.log('데이터베이스가 성공적으로 열렸습니다.');
    }
    function errorCB(err) {
      console.log('데이터베이스 열기 오류:', err);
    }
    
// 테이블 생성
   const createTable = () => {
      db.transaction(tx => {
        tx.executeSql(
          'CREATE TABLE IF NOT EXISTS testTable (id INTEGER PRIMARY KEY AUTOINCREMENT, column1 TEXT, column2 TEXT)',
          [],
          () => {
            console.log('테이블 생성 완료');
          },
          error => {
            console.error('테이블 생성 오류:', error);
          },
        );
      });
    };
// 데이터 저장
const saveDataToDatabase = data => {
      db.transaction(tx => {
        // 데이터베이스에 쿼리 실행
        tx.executeSql(
          'INSERT INTO testTable (column1, column2) VALUES (?, ?)',
          [data.column1, data.column2], // 데이터 값
          (tx, results) => {
            if (results.rowsAffected > 0) {
              console.log('데이터가 성공적으로 저장되었습니다.');
            } else {
              console.log('데이터 저장에 실패했습니다.');
            }
          },
          error => {
            console.error('데이터 저장 오류:', error);
          },
        );
      });
    };
    const dataToSave = {
      column1: 'Value1',
      column2: 'Value2',
    };
    saveDataToDatabase(dataToSave)
    
 // 데이터 불러오기
     const loadDataFromDatabase = () => {
      db.transaction(tx => {
        // 데이터베이스에서 데이터 불러오기
        tx.executeSql(
          'SELECT * FROM testTable',
          [],
          (tx, results) => {
            const rows = results.rows;
            const data = [];

            for (let i = 0; i < rows.length; i++) {
              const item = rows.item(i);
              data.push(item);
            }

            console.log('데이터 불러오기 성공:', data);
          },
          error => {
            console.error('데이터 불러오기 오류:', error);
          },
        );
      });
    };

 

 

db파일을 드라이브에 업로드하고 싶은데

db파일이 존재하는 assets폴더는 fs로 직접 접근이 안되서 어떻게 해야할지 모르겠음

'RN' 카테고리의 다른 글

FlatList 격자형태로 이쁘게 나열하기  (0) 2023.12.08
style 따로 빼서 쓰기  (0) 2023.12.07
구글드라이브에 업로드  (0) 2023.12.04
구글 로그인  (0) 2023.12.01
RN & expo 배포  (0) 2023.11.30