Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера) / 25 сообщений из 27, страница 1 из 2
10.02.2006, 21:31
    #33538277
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
В общем создал я тему про передачу данных через jdbc в бинарном виде, никто толком не отреагировал. Ну вот ловите пример.

Connection db; // The connection to the database
Statement st; // Our statement to run queries with
PreparedStatement ps;
Class.forName("org.postgresql.Driver"); // Load the driver
db = DriverManager.getConnection(url, usr, pwd);
//подсоединились, тут конечно в url, usr, pwd надо предварительно положить что надо.

st = db.createStatement();
st.executeUpdate("create table basic (a int2, b float4 )"); //создали табличку
ps = db.prepareStatement("insert into basic values (?,?)");

float tt=(float) 1.90000009;
System.out.println(" insert value=" + tt );
ps.setInt(1, 1);
ps.setFloat(2, tt);
ps.executeUpdate();
ps.close();

System.out.println("performing a query");
ResultSet rs = st.executeQuery("select a, b from basic");

rs.next();
int a = rs.getInt("a");
float b = rs.getFloat("b");
System.out.println("value from table=" + b);
rs.close();


/////под посгресом на выдача такая

insert value=1.9000001
performing a query
value from table=1.9
//// вот такая вот фигня, как с этим бороться??? насколько я сам копался в исходниках драйвера, бинарной передачи для простых типов float, double, int, тама нету в принципе, может ещё какие дрова бывают? я выходов вижу только два либо менять субд где дрова нормальные, либо сворачивать свой обьект в массив байтов и запихивать это в базу в тип bytea. Но тогда как бы с таким же успехом можно пихать в файл всё это.

ЗЫ: я знаю что этот эффект можно побороть увеличив точность преобразования из float в текст, это нужно делать как на клинете так и на сервере, в принципе я даже знаю как это сделать. Но на мой взгляд это вообще маразм получиться, и так конструкци уродская так ещё более уродские заплатки на это ставить надо. У кого какие мысли?
...
Рейтинг: 0 / 0
10.02.2006, 21:45
    #33538286
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
Если это фсе прафда, и здеся никто не откликнится то:
1. Юзать http://archives.postgresql.org/pgsql-jdbc/ - для поиска проблемы
2. Юзать тоже, но сформулировав проблему.
...
Рейтинг: 0 / 0
10.02.2006, 22:55
    #33538351
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
мужчина учите мат часть и не сбивайте с толку людей!!!

читайте как хранятся данные в компьютере
читайте про типы в постгресе
учитесь, учитесь, учитесь!!!!

если вам нужна умопомрачительная точность например такая 0.9000000000001 то юзайте не флоат

попробуйте задать вот такой запрос из какого нить пгадмина и посмотрите что выйдет

Код: plaintext
INSERT INTO public.test_sch (float_t /*float4*/, num_t/*numeric*/) VALUES ( 1 . 90000009 ,  0 . 9000000000001 );

я Вам уже писал что драйвера работают нормально только используйте их правильно!!!
...
Рейтинг: 0 / 0
11.02.2006, 00:09
    #33538406
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
2vfabr.
мне не нужна умопомрачительная точность, проматчасть я думается знаю достаточно. Всего навсего требуется чтобы на выходе был то же набор битов что и на входе, и это не должно зависить от того как этот набор битов интрепретируется. Что вы на это скажете?
...
Рейтинг: 0 / 0
11.02.2006, 00:12
    #33538409
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
Andrey DaeronЕсли это фсе прафда, и здеся никто не откликнится то:
1. Юзать http://archives.postgresql.org/pgsql-jdbc/ - для поиска проблемы
2. Юзать тоже, но сформулировав проблему.

Самое смешное что это почемуто проблемой ни кто не считает. Вывод сделан из общения нa irc://irc.freenode.net/#postgresql. Т.е. через libpq всё нормально, а в jdbc это просто не реализованно. (бинарный режим)
...
Рейтинг: 0 / 0
11.02.2006, 00:25
    #33538416
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
vfabrмужчина учите мат часть и не сбивайте с толку людей!!!

читайте как хранятся данные в компьютере
читайте про типы в постгресе
учитесь, учитесь, учитесь!!!!

если вам нужна умопомрачительная точность например такая 0.9000000000001 то юзайте не флоат

попробуйте задать вот такой запрос из какого нить пгадмина и посмотрите что выйдет

Код: plaintext
INSERT INTO public.test_sch (float_t /*float4*/, num_t/*numeric*/) VALUES ( 1 . 90000009 ,  0 . 9000000000001 );

я Вам уже писал что драйвера работают нормально только используйте их правильно!!!

а по поводу мат части, не поскажете уважаемый чему равняются те числа которые привёл в качестве примера в hex виде а?? а я подскажу
1.90000009=1.90000009537=3FF33334
1.9= 1.89999997616=3FF33333

И чего это в последнем бите то отличие?? может быть это драйвер такой хороший, сами мат часть учите. У меня образование и работа связанна с вычислительной математикой.
...
Рейтинг: 0 / 0
11.02.2006, 00:43
    #33538434
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
я 5 постов переписал

лично мне удалось через ждбц драйвера положить число 0.9000000000001 в базу да я не использовал тип колонки флоат я взял нумерик

то что Вы математик только мешает (вот если бы инженер) и причем тут хексы? я думал компьютер работает на 1 и 0

и по Вашему же примеру джава тоже не должна Вас устраивать потому что
float tt=(float) 1.90000009;
System.out.println(" insert value=" + tt );
insert value=1.9000001
...
Рейтинг: 0 / 0
11.02.2006, 01:08
    #33538448
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
Вы наверное Александр +7-926-594-1685 студент или аспирант и у Вас ужастный юношеский максимализм :-) я кстати тоже туризмом увлекался только спортивным :-)
...
Рейтинг: 0 / 0
11.02.2006, 21:38
    #33539075
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
я и не студент и не аспирант.

обьясните математику уважаемый инженер, может ли вообще назывться нормальной система хранения данных в которых отсылаеш один набор битов а получаеш другой?? конкретно 3FF33334 и 3FF33333
...
Рейтинг: 0 / 0
12.02.2006, 22:01
    #33539732
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
значит даю ссылку на таблицу которая называется Numeric Types (числовые типы) я отправлял Вас к ней раз 5
http://www.postgresql.org/docs/8.0/interactive/datatype.html#DATATYPE-NUMERIC-TABLE

Вы используете тип float4 он же real найдите его в этой таблице и прочитайте ВСЕ колонки на строчке где описан тип real

напомню какое число вы хотели в него запихнуть 1.9000001

вот сопоставив эти 2 факта я надеюсь Вы как математик и человек с высшим образованием сможете догадаться в чем была Ваша ошибка ...

я мог сделать так с самого начала (ткнуть Вас носом), но обычно я привык общаться с вежливыми и умными людьми которым хватает просто намека на путь решения проблем

и еще что Вы мне своими хексами тычите? я в них неразбираюсь нолики и единички пожалуйста (это физический принцип действия компьютера) десятичная система пожалуйста (я в ней зарплату получаю) а хексы это не к нам убогим :-)
...
Рейтинг: 0 / 0
13.02.2006, 11:13
    #33540201
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
vfabr
и еще что Вы мне своими хексами тычите? я в них неразбираюсь нолики и единички пожалуйста (это физический принцип действия компьютера) десятичная система пожалуйста (я в ней зарплату получаю) а хексы это не к нам убогим :-)

так сразу и надо было говорить.
...
Рейтинг: 0 / 0
13.02.2006, 12:01
    #33540397
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
ну прояснилась ситуачия? почему меняются биты :-)))
...
Рейтинг: 0 / 0
13.02.2006, 14:10
    #33540916
Hordi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
float имеет точность 6 знаков после запятой.
...
Рейтинг: 0 / 0
13.02.2006, 18:32
    #33541777
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
Hordifloat имеет точность 6 знаков после запятой.
спасибо, я знаю но здесь это не существенно. (хотя вообще то 7)
...
Рейтинг: 0 / 0
13.02.2006, 19:33
    #33541908
Hordi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
stuav Hordifloat имеет точность 6 знаков после запятой.
спасибо, я знаю но здесь это не существенно. (хотя вообще то 7)

Почему 7? Я про то что постгрес учитывает
http://www.postgresql.org/docs/8.0/interactive/datatype.html#DATATYPE-NUMERIC-TABLE

А почему здесь это не существенно? Постгрес получил float - обработал 6 знаков после запятой как и записано в документации, после этого выдал тебе правильное значение.
Или я что-то не понял?
...
Рейтинг: 0 / 0
13.02.2006, 20:30
    #33542004
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
7 - это по IEEE стандарту. точная фраза: The precision is approximately one part in 2**23; typically 7 decimal digits.

Почему я полагаю это не имеет отношения к делу - это потому что я всё таки полагаю что нужно по хорошему передавать число как набор битов, а не как его текстовое представление в десятичном формате. Передача в битовом режиме снимает вопрос как с потерей точности так и связанный с невозможность хешировать составные обьекты в которые входит число с плавающей точкой.

Хотя в принципе с точки зрения документции конечно правильно, СУБД работает с числом как с обьектом и обрабатывает его в рамках допустимых документацией. Но всё равно не аккуратненько как то.
...
Рейтинг: 0 / 0
13.02.2006, 21:41
    #33542095
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
конечно те кто пишут базы данных и драйвера полные лохи вот Вас бы туда сразу бы все вопросы сняли бы
...
Рейтинг: 0 / 0
14.02.2006, 10:31
    #33542746
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
vfabrконечно те кто пишут базы данных полные лохив данном случае вы скорее правы, чем нет одни проблемы сруле чего стоят. очень срульные проблемы.
...
Рейтинг: 0 / 0
14.02.2006, 11:28
    #33542938
Shweik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
Странный треп... Неужели трудно понять что
1) JDBC в Постгресе еще достаточно сырой.
2) Подавляющее большинство здешнего народа его не использует.
3) Тех кто использует JDBC точность его работы с float не колышет.
Видимо математическое образование( в отличии от инженерного ) не позволяет сделать простейший вывод : "Если драйвер херовый - спасет только медитация над его исходниками или ежедневные мольбы к девелоперам " 8))
...
Рейтинг: 0 / 0
14.02.2006, 12:28
    #33543131
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
stuav7 - это по IEEE стандарту. точная фраза: The precision is approximately one part in 2**23; typically 7 decimal digits.

Почему я полагаю это не имеет отношения к делу - это потому что я всё таки полагаю что нужно по хорошему передавать число как набор битов, а не как его текстовое представление в десятичном формате. Передача в битовом режиме снимает вопрос как с потерей точности так и связанный с невозможность хешировать составные обьекты в которые входит число с плавающей точкой.

Хотя в принципе с точки зрения документции конечно правильно, СУБД работает с числом как с обьектом и обрабатывает его в рамках допустимых документацией. Но всё равно не аккуратненько как то.

Этот топик мне напоминает одну вещь:

"зачем ты пришел?"
...
- Ты знаешь, кто я?
- Да.
- Как ты мог догадаться?
- По тому, как ты начал разговор. Ты философ.
- Да, я философ. А ты - сантехник.
- Да, я сантехник. Hо почесать языком я тоже люблю. Где тут у вас бачок засорился?
...
Рейтинг: 0 / 0
14.02.2006, 12:54
    #33543245
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
stuavХотя в принципе с точки зрения документции конечно правильно, СУБД работает с числом как с обьектом и обрабатывает его в рамках допустимых документацией. Но всё равно не аккуратненько как то.
У PostgreSQL есть недостаток - он аккадемический. Т.е. если в стандарте написано, что без ORDER BY данные выводятся в произвольном порядке - то так оно и будет :) И т.д. Если в стандарте написано 7 знаков после запятой - значит так оно и будет, если в документации не указано другое.
Из более интерестных примеров - работа с датами и интервалами. Более правильной работы с этим типом я не встречал, хотя в некоторых моментах жутко неудобно, и приходится изобретать странные вещи.
...
Рейтинг: 0 / 0
14.02.2006, 13:48
    #33543481
stuav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
ShweikСтранный треп... Неужели трудно понять что
1) JDBC в Постгресе еще достаточно сырой.
2) Подавляющее большинство здешнего народа его не использует.
3) Тех кто использует JDBC точность его работы с float не колышет.
Видимо математическое образование( в отличии от инженерного ) не позволяет сделать простейший вывод : "Если драйвер херовый - спасет только медитация над его исходниками или ежедневные мольбы к девелоперам " 8))

Позволяет всё позволяет, даже в голову пришло сразу простейшее решение - СУБД поменять, благо всё ещё пока на этапе проектировния.
...
Рейтинг: 0 / 0
15.02.2006, 00:07
    #33544987
Shweik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
stuav
Позволяет всё позволяет, даже в голову пришло сразу простейшее решение - СУБД поменять, благо всё ещё пока на этапе проектировния.
Угу.... главное выбрать помаститее ну типа Оракл *)) а то
натолкнётесь гомологичные грабельки в FireBird/MySQL 8)
...
Рейтинг: 0 / 0
15.02.2006, 09:55
    #33545386
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
Shweik stuav
Позволяет всё позволяет, даже в голову пришло сразу простейшее решение - СУБД поменять, благо всё ещё пока на этапе проектировния.
Угу.... главное выбрать помаститее ну типа Оракл *)) а то
натолкнётесь гомологичные грабельки в FireBird/MySQL 8)
Да чего все на Оракуле помешались - ну нету в нем ничего хорошего, кроме афигенной масштабируемости и расширяемости. А так - такие же сырые дрова типа ODBC и т.д. в которых есть свои тараканы которые НЕ лечатся даже разработчиками. Пример - были проблемы с деланьем запроса обновляемым через ADO+ODBC. Не получилось, хотя почему - ниизвестно.
...
Рейтинг: 0 / 0
15.02.2006, 11:42
    #33545725
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера)
Andrey Daeron...Да чего все на Оракуле помешались - ну нету в нем ничего хорошего, кроме афигенной масштабируемости и расширяемости.

Там даже этого нет. В смысле - офигенной.

stuavПозволяет всё позволяет, даже в голову пришло сразу простейшее решение - СУБД поменять, благо всё ещё пока на этапе проектировния.

Ну попробуй что-ли IBM DB2.

А вообще доку читать надо. Программа должна работать так, как написано в документации, а не так, как приспичило пользователю.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / и как после этого юзать PostrgeSQL? (особенности работы jdbc драйвера) / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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