· 6 years ago · Aug 30, 2019, 02:02 PM
1import { openDatabase, enablePromise } from "react-native-sqlite-storage";
2
3export class StudentDatasource {
4 _executeSql(sql, params = undefined) {
5 enablePromise(true)
6
7 return new Promise((resolve, reject) => {
8 openDatabase({
9 name: 'sekolahku.db',
10 location: 'default'
11 }).then((db) => {
12 let prepareTable = "CREATE TABLE IF NOT EXISTS siswa(" +
13 "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
14 "nama_depan TEXT, " +
15 "nama_belakang TEXT, " +
16 "no_hp TEXT, " +
17 "email TEXT, " +
18 "tgl_lahir TEXT, " +
19 "gender TEXT, " +
20 "jenjang TEXT, " +
21 "hobi TEXT, " +
22 "alamat TEXT)"
23 db.executeSql(prepareTable).then(() => {
24 db.executeSql(sql, params).then((result) => {
25 resolve(result)
26 console.log("Hasil Query: " + JSON.stringify(result));
27 }).catch(error => reject(error))
28 }).catch(error => reject(error))
29 }).catch((onRejected) => {
30 reject(onRejected)
31 })
32 })
33 }
34
35 save(siswa) {
36 let sql = "INSERT INTO siswa(nama_depan, nama_belakang, no_hp, email, " +
37 "tgl_lahir, gender, jenjang, hobi, alamat) " +
38 "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"
39 let params = [
40 siswa.firstName, siswa.lastName,
41 siswa.phoneNumber, siswa.email, siswa.birthDate, siswa.gender,
42 siswa.education, siswa.hobies, siswa.address
43 ]
44
45 return this._executeSql(sql, params)
46 }
47
48 findAll() {
49 let sql = "SELECT *FROM siswa"
50 let self = this
51
52 return new Promise((resolve, reject) => {
53 self._executeSql(sql).then((result) => {
54 let dataset = result[0].rows
55 let siswaList = []
56
57 for (let index = 0; index < dataset.length; index++) {
58 const data = dataset.item(index);
59 let siswa = {
60 id : data.id,
61 firstName : data.nama_depan,
62 lastName : data.nama_belakang,
63 phoneNumber : data.no_hp,
64 email : data.email,
65 birthDate : data.tgl_lahir,
66 gender : data.gender,
67 education : data.jenjang,
68 hobies : data.hobi,
69 address : data.alamat
70 }
71
72 siswaList.push(siswa)
73 }
74
75 resolve(siswaList)
76 })
77 })
78 }
79
80 delete(siswa) {
81 let sql = "DELETE FROM siswa WHERE id=?"
82 return this._executeSql(sql, [siswa.id])
83 }
84
85 update(siswa) {
86 let sql = "UPDATE siswa SET " +
87 "nama_depan=?, " +
88 "nama_belakang=?, " +
89 "no_hp=?, " +
90 "email=?, " +
91 "tgl_lahir=?, " +
92 "gender=?, " +
93 "jenjang=?, " +
94 "hobi=?, " +
95 "alamat=? " +
96 "WHERE id=?"
97 let params = [
98 siswa.firstName, siswa.lastName,
99 siswa.phoneNumber, siswa.email, siswa.birthDate, siswa.gender,
100 siswa.education, siswa.hobies, siswa.address,
101 siswa.id
102 ]
103
104 return this._executeSql(sql, params)
105 }
106
107 findByName(nama) {
108 let sql = "SELECT *FROM siswa WHERE nama_depan LIKE ? OR nama_belakang LIKE ?"
109 let self = this
110
111 return new Promise(function (resolve, reject) {
112 let siswaList = []
113 let params = ["%" + nama + "%", "%" + nama + "%"]
114
115 self._executeSql(sql, params).then((result) => {
116 for (let index = 0; index < result[0].rows.length; index++) {
117 const data = result[0].rows.item(index);
118 let siswa = {
119 id : data.id,
120 firstName : data.nama_depan,
121 lastName : data.nama_belakang,
122 phoneNumber : data.no_hp,
123 email : data.email,
124 birthDate : data.tgl_lahir,
125 gender : data.gender,
126 education : data.jenjang,
127 hobies : data.hobi,
128 address : data.alamat
129 }
130
131 siswaList.push(siswa)
132 }
133
134 resolve(siswaList)
135 })
136 })
137 }
138
139 findById(id) {
140 let sql = "SELECT *FROM siswa WHERE id=?"
141 let self = this
142
143 return new Promise(function (resolve, reject) {
144 let params = [id]
145 self._executeSql(sql, params).then((result) => {
146 const totalData = result[0].rows.length;
147 if (totalData > 0) {
148 let data = result[0].rows.item(0)
149 let siswa = {
150 id : data.id,
151 firstName : data.nama_depan,
152 lastName : data.nama_belakang,
153 phoneNumber : data.no_hp,
154 email : data.email,
155 birthDate : data.tgl_lahir,
156 gender : data.gender,
157 education : data.jenjang,
158 hobies : data.hobi,
159 address : data.alamat
160 }
161
162 resolve(siswa)
163 } else {
164 throw new Error("No student data with id : " + id)
165 }
166 })
167 })
168 }
169}