Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
Народ, и снова я ;) В очередной раз прошу прощения за, может быть, глупый вопрос для кого-то, но сам не разобрался, а в форуме по запросу "however java.sql.Types" ничего не нашёл. Проблема в экзепшне, который вылетает при попытке получить от ф-ции out-параметр типа java.sql.Types.BIGINT функцией JDBC CallableStatement.getLong(int). Приведу фрагменты кода: Ф-ция в базе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Таблица Elements: Код: plaintext 1. 2. 3. 4. 5. Фрагмент ф-ции, использующей JDBC: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. При выполнении кода получаю Exception: Код: plaintext 1. Вроде, в ф-ции CallableStatement.GetLong написано: SunRetrieves the value of the designated JDBC BIGINT parameter as a long in the Java programming language. А все типы у меня проставлены правильно и out-параметр тоже зарегестрирован верно. Не пойму, в чём проблема. К тому же, если выполнять хранимую процедуру в базе, в простом запросе, то ответ получаю нормальный: Код: plaintext 1. 2. Кто встречался с этим, подскажите, а? Подозреваю, что дело в записи "nextval(('"public"."elements_elementid_seq"'::text)::regclass)", но она сформировалась автоматом после того, как я проставил тип SERIAL у этого поля. Заранее большое спасибо! И простите, если вопрос действительно глупый. Я с postgre только перехожу на "Ты" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 12:27 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
1.в посгре нету out параметров 2. Код: plaintext 1. 2. 3. 4. return забыл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 12:35 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
wbear1.в посгре нету out параметров Как это нету? А как же я определил ф-цию с параметрами "(name varchar, out newelementid bigint)"? И почему везде пишут, что out-параметры есть в PostgreSQL? Не понятно... wbear2. Код: plaintext 1. 2. 3. 4. return забыл. Если добавить RETURN - exception всё равно вылетает. Все симптомы остаются такими же. RETURN после SELECT'a ничего не меняет. Хочу ещё добавить, что хранимая процедура выполняется, то есть новая записть добавляется. Но при считывании out-параметра вылетает exception и получить этот параметр невозможно. :( Какие ещё мнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 12:41 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
Поискал тут в нете, нашёл где описываются константы типов SQL, вот тут весь файл Types.java. Я поискал у себя по дискам, такого файла нет нигде... Искал так же все файлы (*.*), содержащие public static final int BIGINT - тоже нет... Странно, как тогда JBuilder компилит и не ругается на java.sql.Types.BIGINT? Откуда же он берёт эту константу тогда? Может, я чего-то не знаю? По идее, экзепшн я разобрал - смысл в том, что регистрирую я null (public static final int NULL = 0;) , а ф-ция из БД возвращает BIGINT. Но в коде выше вы сами видели, что я не регистрирую NULL, а регистрирую как положено BIGINT... В общем, чудеса, да и только. Может, эти размышления навели кого-то на мысль, которая мне поможет? Высказывайтесь, пожалуйста! Спасибо заранее! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 16:59 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
Нашёл java.sql.Types в архиве rt.jar дистрибутива явы (C:\j2sdk1.4.2_04\jre\lib\). Нашёл исходники в архиве. В файле Types.java так и определено: public final static int BIGINT = -5; С этим понятно. Но почему не та константа регистрируется, а 0 - ума не приложу... Жду помощи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 17:10 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
да реально есть out.. чет я отстал от жизнни.. поаробуй так: CREATE OR REPLACE FUNCTION "public"."AddNewElement" (name varchar) RETURNS bigint AS $body$ BEGIN INSERT INTO "Elements" ("Name") VALUES(name); return currval('"public"."elements_elementid_seq"'); END; $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; а вызывай: select * from "public"."AddNewElement" ('xxx'); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 17:42 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
либо select "public"."AddNewElement" ('xxx')::bigint; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 17:43 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
Уважаемый wbear , так оно, ессно, работает, так как все ф-ции, работающие с простым ResultSet'ом у меня работают нормально. Тут нет проблем. Только что собрал, проверил - пашет. Мне, вот, интересно, что теперь надо переделывать все ф-ции Add*** c out-параметров на обычный возврат? Неужели, оно так и не будет работать? Ведь, если ф-цию с out-параметром вызвать просто из SQL-Editor'a, то она работает и даже пишет что возвращает! Значит, проблема в JDBC? Обходов нет? Странно, что так мало ответов, неужели, никто не использует больше out-параметры? Спасибо, wbear , остальным заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 18:21 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
Ребят? Больше никто из здесь зарегистрированных не использует out-параметры в ф-циях PostgreSQL? Значит, если вам необходимо вернуть всего одно значение, вы возвращаете его селектом? А если это простая ф-ция, от которой вы ждёте либо 0, либо 1, вы тоже прибегаете к селекту? Народ, отзовитесь, а? Мне нужно понять на чём остановиться и плюнуть ли на out-параметры из-за глюклв в JDBC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 15:17 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
в посгресе все функции селектом вызываются.. а аут параматрами видимо реально никто не пользуется.. потому как это неудобно.. покрайней мере мне.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 15:25 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
wbearв посгресе все функции селектом вызываются.. а аут параматрами видимо реально никто не пользуется.. потому как это неудобно.. покрайней мере мне.. Я имел в виду не вызывать селектом, а возвращать значение. Ведь, можно по-разному: либо присвоить аут-параметру значение, либо RETURN SELECT ....; В общем, понятно. Странная тенденция... в MS SQL успешно пользовался такими параметрами... и не я один. А тут такая тишина. Ладно, в любом случае, спасибо, хоть альтернатива есть, не совсем без выхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2006, 20:07 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
по-моему так как ты хочешь сделать не получится (насколько я понял из "32.4.3. Functions with Output Parameters"). в этом мне не сшиком нравится реализация out параметров в пг. какието они не очень понятные что ли, и для чего их сделали такими не совсем понятно (что б были?) вот так по идее должно сработать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2006, 16:24 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. лажанулся чуть ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2006, 16:28 |
|
||
|
Почему: return was of type java.sql.Types=-5 however type java.sql.Types=0 was registered?
|
|||
|---|---|---|---|
|
#18+
st_serg Код: plaintext 1. 2. 3. лажанулся чуть ) Правильно, это так, как говорил wbear . А в яве я именно так и делаю. Через ResultSet: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Спасибо за идею. Но мне кажется, что тут действительно придётся везде возвращать результаты SELECT... С out-параметрами что-то не то... В самой-то базе они пашут, но в JDBC какой-то баг, всё-таки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2006, 17:46 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=321&tid=2006396]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 322ms |

| 0 / 0 |
