App.js 2.72 KB
Newer Older
Test User's avatar
Test User committed
1
2
3
4
5
6
7
8
/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 *
 * @format
 * @flow strict-local
 */

Test User's avatar
Test User committed
9
10
import React, {useEffect, useState} from 'react';
import {SafeAreaView, StyleSheet, Text, View, FlatList} from 'react-native';
Test User's avatar
Test User committed
11
12
13
14
15
16
17
18
import {DEBUG, enablePromise, openDatabase} from 'react-native-sqlite-storage';

DEBUG(true);
enablePromise(true);

const db = openDatabase({
  name: 'TestDB',
  location: 'default',
Test User's avatar
Test User committed
19
  createFromLocation: '~TestDB.db', // android/src/main/assets/TestDB.db 파일을 위치 시킴
Test User's avatar
Test User committed
20
21
22
});

const App = () => {
Test User's avatar
Test User committed
23
  const [users, setUsers] = useState([]);
Test User's avatar
Test User committed
24

Test User's avatar
Test User committed
25
26
  const populateDatabase = async DB => {
    await DB.transaction(queryUser); // 반드시 (await db)를 해야 프라미스가 성공
Test User's avatar
Test User committed
27
28
29
30
31
  };

  const loadAndQueryDB = async () => {
    try {
      console.log('load and db query ....');
Test User's avatar
Test User committed
32
      await populateDatabase(await db);
Test User's avatar
Test User committed
33
34
35
36
37
    } catch (error) {
      console.log(error);
    }
  };

Test User's avatar
Test User committed
38
39
  const closeDatabase = async DB => {
    if (DB) {
Test User's avatar
Test User committed
40
41
      console.log('closing database ...');
      try {
Test User's avatar
Test User committed
42
43
44
45
46
47
        (await DB).close(
          () => {
            console.log('Database was closed successfully');
          },
          err => console.log(err),
        );
Test User's avatar
Test User committed
48
49
50
51
52
53
54
55
56
57
58
59
60
      } catch (error) {
        console.log(error);
      }
    } else {
      console.log('Database was not opened');
    }
  };

  const queryUser = async tx => {
    console.log('Excuting user query');
    try {
      const [txn, results] = await tx.executeSql('SELECT * FROM users');
      console.log('item length', results.rows.length);
Test User's avatar
Test User committed
61
      const temp = [];
Test User's avatar
Test User committed
62
63
      for (let i = 0; i < results.rows.length; i++) {
        const element = results.rows.item(i);
Test User's avatar
Test User committed
64
        temp.push(element);
Test User's avatar
Test User committed
65
66
        console.log('item ', element);
      }
Test User's avatar
Test User committed
67
      setUsers(temp);
Test User's avatar
Test User committed
68
69
70
71
72
73
74
75
    } catch (error) {
      console.log('error in query user', error);
    }
  };

  useEffect(() => {
    loadAndQueryDB();
    return () => {
Test User's avatar
Test User committed
76
      // closeDatabase(await db); // 컴포넌트 없어질 때 디비 닫기 Error!!!
Test User's avatar
Test User committed
77
78
79
    };
  }, []);

Test User's avatar
Test User committed
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  let listViewItemSeparator = () => {
    return (
      <View style={{height: 0.2, width: '100%', backgroundColor: '#808080'}} />
    );
  };

  let listItemView = item => {
    console.log('item in list view', item);
    return (
      <View key={item.name}>
        <Text>Name: {item.name}</Text>
        <Text>Age: {item.age}</Text>
      </View>
    );
  };

  console.log('users', users);
Test User's avatar
Test User committed
97
98
99
  return (
    <SafeAreaView>
      <Text>Hello</Text>
Test User's avatar
Test User committed
100
101
102
103
104
105
106
107
      <View style={{backgroundColor: 'red'}}>
        <FlatList
          data={users}
          ItemSeparatorComponent={listViewItemSeparator}
          keyExtractor={(item, index) => index.toString()}
          renderItem={({item}) => listItemView(item)}
        />
      </View>
Test User's avatar
Test User committed
108
109
110
111
112
    </SafeAreaView>
  );
};

export default App;