Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 04.04.2019
Сообщений: 28

Подключение глобальной БД в приложении React Native на андроид

15.11.2021, 20:30. Показов 2466. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет, пишу приложение для андроид на React Native. Нужно подключить файл бд и делать запросы с получением данных. Подключение сделал, ошибок с ним будто нет, но вот сделать запрос и получить данные не могу. Закомментировал куски кода, которыми пробовал сделать запрос. Заранее всех благодарю за помощь)

Тут вывел данные подключенной бд:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Promise {
  "_U": 0,
  "_V": 1,
  "_W": WebSQLDatabase {
    "_currentTask": null,
    "_db": SQLiteDatabase {
      "_closed": false,
      "_name": "database.db",
    },
    "_running": false,
    "_txnQueue": Queue {
      "length": 0,
    },
    "exec": [Function anonymous],
    "version": "1.0",
  },
  "_X": null,
}
Мой код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import  React, { useEffect, useState } from 'react';
import { StyleSheet, Button, Pressable, View, Text, TextInput, TouchableOpacity } from 'react-native';
import { gStyle } from '../../assets/styles/style';
import * as SQLite from 'expo-sqlite';
import * as FileSystem from 'expo-file-system';
import {Asset} from 'expo-asset';
 
async function openDatabase() {
  if (!(await FileSystem.getInfoAsync(FileSystem.documentDirectory + 'SQLite')).exists) {
    await FileSystem.makeDirectoryAsync(FileSystem.documentDirectory + 'SQLite');
  }
  await FileSystem.downloadAsync(
    Asset.fromModule(require('../../assets/db/database.db')).uri,
    FileSystem.documentDirectory + 'SQLite/database.db'
  );
  return SQLite.openDatabase('database.db');
}
 
const db = openDatabase({name: "database.db", createFromLocation: 1});
 
function Items() {
  useEffect(() => {
    db.transaction((tx) => {
      tx.executeSql(
        `SELECT * FROM list;`,
        [],
        (_, { rows: { _array } }) => console.log(_array)
      );
    });
  }, []);
 
  return (
    // console.log(items)
    null
  );
}
 
// useEffect(() => {
//   db.transaction(function (txn) {
//     txn.executeSql(
//       "SELECT Name FROM list",
//       [],
//       function (tx, res) {
//         console.log('item:', res.rows.length);
//       }
//     );
//   });
// }, []);
 
export default function ResultsScreen({ navigation }) {
  // function saveStudent() => {
  //   db.transaction((tx) => {
  //     tx.executeSql('select * from list', [], (_, { rows }) =>
  //       alert(JSON.stringify(rows))
  //       );
  //   });
  // };
  
  // const [text, setText] = useState(null);
  
  // useEffect(() => {
  //   db.transaction(
  //     (tx) => {
  //       tx.executeSql("select Name from list1", [], (_, { rows }) =>
  //         console.log(JSON.stringify(rows))
  //       );
  //     },
  //   );
  // }, []);
  
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: "#F9F9F9" }}>
        <TouchableOpacity style={gStyle.button} onPress={() => Items()}>
          <Text style={styles.text}>На главную</Text>
        </TouchableOpacity>
      </View>
    );
  }
 
  const styles = StyleSheet.create({
    full:{
      fontSize: 18,
      textAlign: "center",
      marginVertical: 15,
    },
    text:{
      color: "#2F3D37",
      fontSize: 15,
      //fontWeight: 20,
      alignItems: 'center'
    },
    textinput:{
      fontSize: 20,
      borderWidth: 1,
      marginTop: 20,
      padding: 10,
      borderColor: "silver",
      borderRadius: 10,
      backgroundColor: "#FFF0E2",
      textAlign: "center"
    },
  });
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2021, 20:30
Ответы с готовыми решениями:

В приложении React Native выдает ошибку "Cannot use 'in' operator to search for 'requestFullscreen' in null"
Добрый день! Я пишу андроид-приложение на React Native, и там у меня на одной из страниц есть видео. Идея такова, что я с главной...

Вакансия - Разработчик (Frontend Developer React, React Native)
Требуемый опыт работы: 1–3 года Полная занятость, удаленная работа Обязанности: Участие в командной разработке SaaS-сервисов в...

Разница между React и React native
Я хочу начать освоение React для фрондента, но при этом хотел бы иметь возможность писать мобильные приложения. И поэтому у меня вопрос:...

1
1 / 1 / 0
Регистрация: 04.04.2019
Сообщений: 28
16.11.2021, 14:09  [ТС]
В общем что могу сказать после 12 часов работы с SQLite в React Native через Expo: легко можно сделать пустую бд с которой уже можно спокойно работать, а вот подключить уже заполненную бд у меня немного не получилось. Буду дальше работать над решением подключения готовой бд, ну а если таки ничего не выйдет, то буду создавать пустую бд и заполнять ее уже в коде, после чего уже можно спокойно работать с данными. Конечно второй вариант немного заморочный, но лучшего решения пока не знаю. Для тех кому будет полезно оставляю код, ну а если есть кто-то, кто может хоть как-то помочь, рад услышать ваши предложения (за которые заранее благодарю )


Что получаю с бд:

Code
1
2
3
F:  Object {
  "Id": "014,19",
}
Сам код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import  React, { useEffect, useState } from 'react';
import { StyleSheet, Button, Pressable, View, Text, TextInput, TouchableOpacity } from 'react-native';
import { gStyle } from '../../assets/styles/style';
import * as SQLite from "expo-sqlite"
// import * as FileSystem from 'expo-file-system';
// import {Asset} from 'expo-asset';
 
function openDatabase() {
  if (Platform.OS === "web") {
    return {
      transaction: () => {
        return {
          executeSql: () => {},
        };
      },
    };
  }
 
  const db = SQLite.openDatabase("database.db");
  return db;
}
 
const db = openDatabase();
 
// db.exec([{ sql: 'PRAGMA foreign_keys = ON;', args: [] }], false, () =>
//   console.log('Foreign keys turned on')
// );
 
function useForceUpdate() {
  const [value, setValue] = useState(0);
  return [() => setValue(value + 1), value];
}
 
export default function ResultsScreen({ navigation }) {
  useEffect(() => {
    db.transaction((tx) => {
      tx.executeSql("CREATE TABLE IF NOT EXISTS list (Id number, Name text, Subject text, Priority int, Coefficient number, Minmark number);");
      tx.executeSql("INSERT INTO list (Id, Name, Subject, Priority, Coefficient, Minmark) values ('014,19', 'Середня освіта. Інформатика', 'Українська мова', 1, 0.3, 150)");
    });
  }, []);
  
  const [items, setItems] = useState(null);
  const [forceUpdate, forceUpdateId] = useForceUpdate();
  db.transaction((tx) => {
    // tx.executeSql("SELECT * FROM list;", 
    // [], (_, { rows }) =>
    // console.log(JSON.stringify(rows))
    // );
      tx.executeSql('SELECT Id FROM list',
      [], (tx, results) => {
        var row = results.rows.item(0);
        setItems(row);
      }
      );
  });
 
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: "#F9F9F9" }}>
        <TouchableOpacity style={gStyle.button} onPress={() => console.log("F: ", items)}>
          <Text style={styles.text}>На главную</Text>
        </TouchableOpacity>
      </View>
    );
  }
 
  const styles = StyleSheet.create({
    full:{
      fontSize: 18,
      textAlign: "center",
      marginVertical: 15,
    },
    text:{
      color: "#2F3D37",
      fontSize: 15,
      //fontWeight: 20,
      alignItems: 'center'
    },
    textinput:{
      fontSize: 20,
      borderWidth: 1,
      marginTop: 20,
      padding: 10,
      borderColor: "silver",
      borderRadius: 10,
      backgroundColor: "#FFF0E2",
      textAlign: "center"
    },
  });
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2021, 14:09
Помогаю со студенческими работами здесь

React Native
Привет всем, хотел узнать, может кто-нибудь сможет подсказать. Я начал изучать приложения на React Native, в Expo и столкнулся с...

React native
Всем ку , есть проблемка уже час сижу не могу понять в чем проблема . Вообщем нужно установить react native cli на мак , все скачал , node...

React Native Developer

React Native developer, we need you!
Become a part of the MaxyLogic team and let's beecome successful together. What we offer: • Cozy and modern office in a contemporary...

React Native developer, we need you!
Become a part of the MaxyLogic team and let's beecome successful together. What we offer: • Cozy and modern office in a contemporary...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru