powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Доступ к BIGINT-полям в SQLite из JavaScript/Google Gears
4 сообщений из 4, страница 1 из 1
Доступ к BIGINT-полям в SQLite из JavaScript/Google Gears
    #36218259
Oleg Zhovtanyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Битый час бьюсь над проблемой: в "шестеренках" из кода на JavaScript можно положить в БД 8-байтовое целое, а вот достать его обратно... Доки читал, Гугл спрашивал, ответа не нашел.

Есть БД на SQLite, с целочисленными ключами (как известно, если в таблице есть целочисленный ключ, он становится синонимом для встроенного 8-байтного ROWID).

Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE Users (
  id INTEGER NOT NULL,
  email TEXT( 128 ) NOT NULL
  PRIMARY KEY (id)
)

Есть запись с достаточно большим значением ключа, чтобы занять все 8 байт.

Код: plaintext
1.
INSERT INTO Users (id, email) VALUES ('336583485862969345', 'user@domain.org');

В JavaScript нет 8-байтного целого, но id можно хранить в коде, как строку, и запихать в базу, как строку, SQLite сам сконвертит в число.

А вот код, вынимающий значение id

Код: plaintext
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.
<html>
<head>
<script type="text/javascript" src="js/gears_init.js"></script>
</head>
<body>

<script>
var db = google.gears.factory.create('beta.database');
var rs;
try {
	db.open("md");
	var sql = "SELECT * FROM Users WHERE email = ?";
	rs = db.execute(sql, ['user@domain.org']);
	var id = "";
	id = rs.fieldByName("id");
} catch (ex) {
	alert("SQL error: " + ex);
	throw ex;
} finally {
	if (rs != null) {
		rs.close();
	}
	if (db != null) {
		db.close();
	}
}
alert(id);
</script>

</body>
</html>

"ложится" с сообщением

Код: plaintext
1.
Error: Return value is out of range.

Дока по Gears говорит, что ResultSet.fieldByName() возвращает variant.
Но сконвертить его в строку не получается никак ! Падает раньше.

Может, кто уже сталкивался?
...
Рейтинг: 0 / 0
Доступ к BIGINT-полям в SQLite из JavaScript/Google Gears
    #36219066
Oleg Zhovtanyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно решение найдено - привожу для справки.

Можно явно сконвертировать в строку колонку в SQL-запросе с помощью CAST. Для приведенного примера:

Код: plaintext
1.
2.
3.
var sql = "SELECT CAST(id AS TEXT) AS sid, * FROM Users WHERE email = ?";
...
var id = rs.fieldByName("sid");

Такой вариант слегка корявый, т.к. приходится править SQL. Если кто знает, как вынуть BIGINT в виде строки для произвольного SELECT'а, велкам.
...
Рейтинг: 0 / 0
Доступ к BIGINT-полям в SQLite из JavaScript/Google Gears
    #36219216
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь есть форум по sqlite
http://www.sql.ru/forum/actualtopics.aspx?bid=69
...
Рейтинг: 0 / 0
Доступ к BIGINT-полям в SQLite из JavaScript/Google Gears
    #36223997
Oleg Zhovtanyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crtздесь есть форум по sqlite
http://www.sql.ru/forum/actualtopics.aspx?bid=69

Я в курсе. Проблема не в SQLite'е а в JS. Консольный клиент (sqlite3) любые числа вставляет и извлекается без проблем, а вот все, что связано с JS - глючит.

Если кому интересно, вот баг в Мозилловском трекере. Ребята советуют ждать JS2. :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Доступ к BIGINT-полям в SQLite из JavaScript/Google Gears
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]