Я использую SQLite
в своих приложениях RN с помощью react-native-sqlite-storage
. Затем в одной из моих таблиц есть столбец, содержащий очень длинный string
. Когда я пытаюсь insert
string
, ошибок не возникает. Но когда я select
строку, она возвращается null
. Этот открытый вопрос похож на мою проблему.
Затем я нашел этот документация. Он сказал, что
During part of SQLite's INSERT and SELECT processing, the complete content of each row in the database is encoded as a single BLOB. So the SQLITE_MAX_LENGTH parameter also determines the maximum number of bytes in a row.
The maximum string or BLOB length can be lowered at run-time using the sqlite3_limit(db,SQLITE_LIMIT_LENGTH,size) interface.
Мой вопрос в том, есть ли у меня этот кусок рабочего кода для select
данных из таблицы:
const db = await SQLite.openDatabase('databasename', 'default');
db.executeSql('SELECT * FROM tablename', [], (res) => {
console.info(res.rows.item(0));
}, err => console.info(err));
Как реализовать sqlite3_limit(db, SQLITE_LIMIT_LENGTH, size)
в приведенном выше коде, чтобы увеличить SQLITE_LIMIT_LENGTH
?
Вы не можете легко. Реализация sqlite по умолчанию для Android не предоставляет к нему доступ. Вам нужно будет импортировать свою собственную версию библиотеки sqlite Java (которая на самом деле является библиотекой C, доступ к которой осуществляется через JNI), затем предоставить свой собственный модуль RN для доступа к ней в Java, а затем использовать только этот модуль для доступа к db вообще. Это много работы. Насколько велика эта строка? Возможно, вы захотите сохранить его в файле и поместить имя файла в базу данных.
Вопрос, который вы связали с особо упомянутыми изображениями. Sqlite не очень хорошее решение для хранения изображений по разным причинам. Используйте файл и сохраните для него имя файла.
Беглый взгляд на readme для react-native-sqlite-storage показывает, что он не предоставляет интерфейс для
sqlite3_limit()
. К сожалению, многие языковые привязки sqlite экспортируют только часть C API.