Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
Hi all. Есть клиент на жабе, общается с базой по jdbc, на базе есть таблица с колонкой типа float8, есть переменная типа double. Хочу одно в переслать в другое без промежуточного преобразования в текст (а то потеря точности и вобще непредсказуемые последствия). как сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 16:18 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
jdbc prepare statement там все должно быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 18:17 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
да я знаю, а есть уверенность что соотвествующий set, в данном случае setDouble, просто не конвертнёт это в стринг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 18:35 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
думаю можно не заморачиваться как это устроенно внутри (если очень хочется можно скачать исходники и глянуть я глянул увидел то что ожидал) :-) когда sql запрс пишите не боитесь что сработает что нибудь не так? вот и я о томже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 23:21 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
где там конкретно глятеть то? если не секрет? А что до sql запросов то всё достаточно хорошо документированно, а про этот момент вообще ни чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 14:14 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
господа вот нащёл в libpq функцию PQexecParams Submits a command to the server and waits for the result, with the ability to pass parameters separately from the SQL command text. PGresult *PQexecParams(PGconn *conn, const char *command, int nParams, const Oid *paramTypes, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat); PQexecParams is like PQexec, but offers additional functionality: parameter values can be specified separately from the command string proper, and query results can be requested in either text or binary format. насколько я понимаю она делает то что мне надо, но есть ли тоже самое на jdbc?????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 15:07 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
jdbc может работать удаленно с одного компа на другой. и у этих двух компов может быть например разный ордер битов. Так что это правильно конвертировать из бинарника в инвариантное предстваление (строку) а затем обратно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 22:59 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
Безон Так что это правильно конвертировать из бинарника в инвариантное предстваление (строку) а затем обратно.вот только "это может быть правильно, в случае сохранения точности при конверсии". ибо конвертируемая величина может быть и ключевой. и потом какакя ля ля сказала, что идиотская строка десятиричного представления - это и есть то самое искомое инвариантное пердставление? давайте найдем этого урода и ввалим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 10:43 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
4321 Безон Так что это правильно конвертировать из бинарника в инвариантное предстваление (строку) а затем обратно.вот только "это может быть правильно, в случае сохранения точности при конверсии". ибо конвертируемая величина может быть и ключевой. и потом какакя ля ля сказала, что идиотская строка десятиричного представления - это и есть то самое искомое инвариантное пердставление? давайте найдем этого урода и ввалим ломак спорить, давайте завалим того кто придумал точность для дабла 10 в -16. Используйте другое представление для хранения важного значения. Почему то погрешности джавы никого не волнуют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 12:41 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
Безондавайте завалим того кто придумал точность для дабла 10 в -16.а вот это без меня. на хлюпости я не писался. есть простая задача - клиент должен апдейтить запись. пусь клиент знает ключевое поле, но знает его с потерей точности. как ему отапдейтить запись? (пока единственный выход - иметь ключи с типом, для которого драйвер не теярет точности). т.е. на литце ограничение на структуру БД, накладываемое руками дровописца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 12:51 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
авторпока единственный выход - иметь ключи с типом, для которого драйвер не теярет точностиподписался. потому как по молодости и глупности однажды сделал таблицу с PK типа флоат. очень долго мучился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 18:00 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
Безонjdbc может работать удаленно с одного компа на другой. и у этих двух компов может быть например разный ордер битов. Так что это правильно конвертировать из бинарника в инвариантное предстваление (строку) а затем обратно. В постгресе при создании пользовательского типа (ну и соотвественно для встроенных уже есть), нужно задавать функции конвертации из внутренего текстового представления и обратно, и из бинарного представления в сети во внутреннее бинарное представление и обратно. см CREATE TYPE. Так что с этим вопросом там всё правильно проработано. Просто для JDBC ещё не реализованно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:06 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
если читать внимательно то написано следующее авторinput_function The name of a function that converts data from the type's external textual form to its internal form. output_function The name of a function that converts data from the type's internal form to its external textual form. те я могу передать в базу только строчки на входе и получить строчку на выходе, а внутри происходит конверт данных (если не верите то посмотрите примеры на С в конце страници про создание типов есть ссылка) и я никак немогу понять чего не реализовано в ЖДБЦ??? база на входе имеет стринг и ЖДБЦ работает с базой только через сетевой порт и отсылает ей стринг (вернее массив байтов из которого можно получить стринг). Если использовать prepare то происходит кеширование плана выполнения запроса (реализованно с помощью встроенного в постгрес prepare http://www.postgresql.org/docs/8.0/interactive/sql-prepare.html) это раз и второе можно упростить проверку неправельных данных отсылаемых серверу на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 15:43 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
я роюсь в доке и не могу вообще найти примера или намека как запихнуть в базу НЕТЕКСТОВЫЕ данные даже через либпэку может многоуважаемый stuav покажет где он видел подобные примеры? то что приведенно в начале треда тоже запихивает в базу стринги const char * const *paramValues ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 16:04 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
ага нашел это называется The Fast-Path Interface http://www.postgresql.org/docs/8.0/interactive/libpq-fastpath.html и делать это насколько я понял можно только с сервера (ну впринципе понятно почему именно так) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 16:10 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
vfabrя роюсь в доке и не могу вообще найти примера или намека как запихнуть в базу НЕТЕКСТОВЫЕ данные даже через либпэку может многоуважаемый stuav покажет где он видел подобные примеры? то что приведенно в начале треда тоже запихивает в базу стринги const char * const *paramValues смотри http://www.postgresql.org/docs/8.1/interactive/sql-createtype.html функции RECEIVE, SEND. The optional receive_function converts the type's external binary representation to the internal representation. If this function is not supplied, the type cannot participate in binary input. The binary representation should be chosen to be cheap to convert to internal form, while being reasonably portable. (For example, the standard integer data types use network byte order as the external binary representation, while the internal representation is in the machine's native byte order.) The receive function should perform adequate checking to ensure that the value is valid. The receive function may be declared as taking one argument of type internal, or as taking three arguments of types internal, oid, integer. The first argument is a pointer to a StringInfo buffer holding the received byte string; the optional arguments are the same as for the text input function. The receive function must return a value of the data type itself. Similarly, the optional send_function converts from the internal representation to the external binary representation. If this function is not supplied, the type cannot participate in binary output. The send function must be declared as taking one argument of the new data type. The send function must return type bytea. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2006, 18:53 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
авторOptionally, a user-defined type can provide binary input and output routines. Binary I/O is normally faster but less portable than textual I/O. As with textual I/O, it is up to you to define exactly what the external binary representation is. Most of the built-in data types try to provide a machine-independent binary representation. For complex, we will piggy-back on the binary I/O converters for type float8: 1) обычно быстрее, но менее кросплатформенно (сами понимаете что фишка джавы именно в этом) 2) большинство (а не все!!!) встроенных типов старается предоставить ... (см. пункт первый) в ЖДБЦ этого скорее всего никогда не реализуют потому что джава платформонезависима это действительно так, это действительно важно, и это действительно очень нужно (спорить на эту тему надо в другом форуме :-) ) так что думаю вопрос исчерпан и тему можно закрывать спасибо stuav за то что предоставили такую замечательную возможность с вами подискутировать. ИТОГО: - ЖДБЦ использует тексовое представление данных при передаче в силу сохранения своей кросплатформенности (и скорее всего никогда не будет реализованна возможность передавать данные в бинарном виде) - в топике где ЖДБЦ был обвинен в ошибке передачи точности виноват был не ЖДБЦ а неправильно выбранный разработчиком примера тип данных колонки float4 который имеет точность 6 знаков и в который пытались положить число 1.9000001 в итоге постгрес обрезал его до 1.9 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2006, 22:49 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
Реальзованно это будет и это 100% Посмотри драйвера от других баз, как коммерческих так и свободных. А платвормо зависимость здесь очень слабая, всего навсего идёт речь о Big endian byte или Little endian byte. Процессоры в которых используются модели бинарного представления чисел с плавающей точкой отличной от IEEE я не знаю, а если и есть такие то там врядли когда нить будет джава реализована, а если будет то этот вакт учтут. Ну и я уж не говорю о формате целого числа. Порядок байт можно перевернуть средствами самой джавы смотри Long.reverseBytes. Ну и навярняка как нить можно узнать средствами той же джавы соотвествует ли порядок на текущей машине Native network order или нет. Да и в конце концов это всё таки реализованно в очень многих СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 10:42 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
в каких свободных базах это реализованно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 12:30 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
HSQLDB, Firebird - это то с чем я работал. Этого просто в документации не пишут почему то, надо в исходниках ковыряться или эксперимент ставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 12:32 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
да естественно имелся в виду серверный режим СУБД а не embedded. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 12:39 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
пока [ , RECEIVE = receive_function ] находится в квадратных скобках эту возможность скорее всего не реализуют Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 13:54 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
да и еще посмотрите как Вам придется конвертить джавой данные в вид который необходим вашей платформе (то бишь процу) и операционке например тот же самый дабл выигрыш в скорости весьма неочевиден (выигрыша в точности не будет как мы выяснили и тот и другой способ работают одинаково хорошо :-) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 14:05 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
квадратные скобки всего лишь означают что это не обязательный параметр. А как конвертить я уже говорил см: Long.reverseBytes, Double.doubleToRawLongBits, Double.longBitsToDouble, Float.floatToRawIntBits,Float.intBitsToFloat. Как это состыковать думаю догадаться не трудно. Что до выигрыша в скорости, я думаю раз в 20 минимум, байты местами процессору переставить значительно быстрее чем конвертировать в десятичное представление, там же около сотни арифметических операций на одно число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 14:22 |
|
||
|
как с помомощью jdbc передавать double в бинарном виде
|
|||
|---|---|---|---|
|
#18+
авторквадратные скобки всего лишь означают что это не обязательный параметр. правильно не обязательный соответственно драйвера с большой вероятностью могут неработать потому что он напросто может быть не реализован. Для борьбы с этим придется менять/совершенствовать драйвера, серверную часть ну и тп. авторЧто до выигрыша в скорости, я думаю раз в 20 минимум, байты местами процессору переставить значительно быстрее чем конвертировать в десятичное представление, там же около сотни арифметических операций на одно число. грубая схема прохождения запроса 1) (запрос) -> 2) (передача данных по сети) -> 3) (парсинг запросов) -> 4) (выполнение запросов) -> 5) (результат) ... ну будут у Вас в 20 раз (в чем я сомневаюсь) быстрее конвертится данные пункт 3) в схеме, а какой суммарный выигрыш получится на селектах, инсертах, апдейтах? как Вы себе представляете процентное соотношение в выигрыше производительности этих блоков? Единтсвенное более менее ускорение будет при инсертах, а теперь прикинте на сколько увеличится сложность драйверов, серверной части и сколько потребуется времени на переделки и доделки. ЖДБЦ работают и разработанны именно под базу. Они работают нормально и стабильно. Если Вам не подходит база тогда ее надо менять. В бесплатном сегменте аналогов имхо нет. Комерческие продукты ну там может быть все что угодно но за это надо платить. я просто за то чтобы человек который случайно или неслучайно попал на этот форум не прочел Ваши категоричные заявления о том что все плохо которые зачастую основанны на ошибках. Скорее всего Вами неправильно выбранна платформа реализации, а не СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 16:13 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33531941&tid=2006614]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 273ms |
| total: | 500ms |

| 0 / 0 |
