|
|
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Всем привет. нужна помощь выполняю sql запрос в БД oracle через sqlplus и через pl/sql developer возвращается строка "0,04" если выполняю тот же самый запрос через jdbc, то приходит ",04", при этом смотрю тип столбца - varchar2. java код крутится на glassfish4, коннектиться к БД через него. в чем может быть проблема? пример кода java: Context ctx = new InitialContext(); DataSource dataSource = (DataSource) ctx.lookup("jdbc/askd_cons_rpt"); Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select * from table (test.test())"); resultSet.next(); String columnTypeName = resultSet.getMetaData().getColumnTypeName(1); //VARCHAR2 String val = resultSet.getString(1); //,04 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 11:55 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Какой конкретно запрос? Если прямо в таблице тип колонки VARCHAR, то это предельно странно. Ноль может отрезаться при приведении числа к строке. А разное поведение может быть обусловлено локалью, например. Лучше конкретизировать SQL запрос и спросить в форуме по БД Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 12:06 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Да, это выглядит логично. но как с моей стороны это проверить? Админы говорят, что возвращается varchar2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 12:36 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
TivakДа, это выглядит логично. но как с моей стороны это проверить? Админы говорят, что возвращается varchar2 Что именно вы хотите проверить? При чем тут вообще админы? Они вам SQL пишут? Про то что "возвращается varchar2" вопроса нет. Вопрос в том откуда эти данные берутся и в какой момент приводятся к строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 12:40 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
TivakResultSet resultSet = statement.executeQuery("select * from table (test.test())"); убери звёздочку. Скорее всего где то невнимательность. Ищи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 13:02 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Судя по всему где-то на уровне БД происходит неявное преобразование, при этом это как-то зависит от клиента (или настроек на клиенте). SQL скрипты пишу не я, но по утверждения SQL разработчика test.test() возвращает именно varchar2. провел следующий эксперимент, поменял запрос на: select '__'||val as val from table (test.test()) при этом в sqlplus приходит "__0,04" а в jdbc приходит "__,04" Таким образом исключаем вероятность преобразования значения в драйвере. Если кто знает какая настройка может на это влиять, то напиши. Но в целом вопрос с java снят. надо задавать вопрос в oracle sql форуме. всем спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 15:40 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Откуда автор знает что мы получаем varchar2 Это типичный запрос к табличной функции Код: plsql 1. И ее desc мы не видим. Ну а тот забавный факт что мы получаем форматирование вещественного числа можно пояснить тем что функция возвращает как-раз number а мы (возможно) делаем кастинг в varchar2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 15:42 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
mayton, Скорее, у поля структуры, которая передается в pipe row, вместо number, тип varchar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 15:53 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Автор а попробуй Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 15:58 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Надо посмотреть, что внутри функции test.test(), которая возвращает коллекцию. Там скорее всего коллекция float (number(x,x)). А можно не смотреть и вместо String val = resultSet.getString(1); написать String val = NumberFormat.getInstance(Locale.ENGLISH).format(resultSet.getFloat(1)); Если получится так, то виновата Locale по-умолчанию, которую изменили на клиенте. (Можно и другие Locale попробовать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 16:13 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
maytonАвтор а попробуй Код: java 1. Попробовать могу, но в рамках задачи это не имеет смысл. т.к. sql должен отдавать полностью отформатированные значения. А мы их должны просто выводить. Поэтому мы ожидаем от sql именно varchar. но я конечно попробую ближе к вечеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 16:13 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 16:49 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 17:32 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
В целом я выше написал. проблема не в том, что тип не тот приходит. А проблема в том, что в SQL число по разному форматируется при разных коннектах. если подключаюсь через sqlPlus, что все ок, если через jdbc и glassfish, то все не так ок. при этом приходит строка. просто число отформатирована по другому. На мой взгляд надо лезть в кишки sql кода и смотреть как там формируется строчка из числа. Может там станет более понятно почему форматирование меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 17:36 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Tivak, сделай еще пару выборок из табличек: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. И посмотри как форматируется число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 18:00 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
TivakВ целом я выше написал. проблема не в том, что тип не тот приходит. А проблема в том, что в SQL число по разному форматируется при разных коннектах. Это не проблема. Это фича. Настройкой коннекта можно по разному просить по умолчанию делать многие вещи. Например, одним отделять дробную часть числа одним людям запятой, а другим точкой. Не нужно этого - делайте явное преобразование к той маске, которая нужна в рамках запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 09:15 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
первое , что надо знать - это ddl таблицы, а потом уже всё остальное, jdbc не делает преобразование типов. если на входе число - на выходе будет число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 09:38 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
TivakmaytonАвтор а попробуй Код: java 1. Попробовать могу, но в рамках задачи это не имеет смысл. т.к. sql должен отдавать полностью отформатированные значения. А мы их должны просто выводить. Поэтому мы ожидаем от sql именно varchar. но я конечно попробую ближе к вечеру. это имеет смысл для определения причины, чтоб не гадать на кофейной гуще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 09:41 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевTivakВ целом я выше написал. проблема не в том, что тип не тот приходит. А проблема в том, что в SQL число по разному форматируется при разных коннектах. Это не проблема. Это фича. Настройкой коннекта можно по разному просить по умолчанию делать многие вещи. Например, одним отделять дробную часть числа одним людям запятой, а другим точкой. Не нужно этого - делайте явное преобразование к той маске, которая нужна в рамках запроса. А как этой фичей воспользоваться? Как передавать формат числа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 10:44 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
вадяпервое , что надо знать - это ddl таблицы, а потом уже всё остальное, jdbc не делает преобразование типов. если на входе число - на выходе будет число. А можно по подробнее? или ссылочку ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 10:45 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
TivakА как этой фичей воспользоваться? сначала вот это Код: java 1. замените на что нибудь другое, с гарантированными типами и тестируйте. А то из за ерундового вопроса на страницы топика пойдём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 11:07 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Tivakвадяпервое , что надо знать - это ddl таблицы, а потом уже всё остальное, jdbc не делает преобразование типов. если на входе число - на выходе будет число. А можно по подробнее? или ссылочку ) сайты авторов jdbc? выложи, для начала, ddl таблицы , чтоб было о чем говорить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 11:59 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
вадя, говорил-же выше там нет таблицы. Там - табличная функция. Надо курить ее сорцы. Пример: https://docs.oracle.com/cd/B28359_01/appdev.111/b28425/pipe_paral_tbl.htm По поводу JDBC. Он состоит из двух частей. Есть генерализованная часть которая входит в состав JDK и представляет собой в основном набор абстрактных классов и интерфейсов. Собственно это и есть стандарт JDBC. В доке есть сведения но весьма сухие. Например вот фрагмент сорцов по интерфейсу геттера который мы дергаем. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И есть вторая часть - проприетарная. От производителя. Наш господин-ТС использует (скорее всего) oracle.jdbc.Driver. Со второй частью сложнее. Она может иметь разные версии (ojdbc14, ojdbc5, ojdbc6 e.t.c) и баги. Кроме того есть имплементации под OCI (это просто переходник к обычному нативному драйверу который просто должен быть как dll). Но лучше всего начать с того что взять сорцы этой таб-функции и переколбасить их на мок или прототип чтобы мы тут в форуме могли чето детально проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 12:32 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
maytonвадя, говорил-же выше там нет таблицы. Там - табличная функция. Надо курить ее сорцы. да. Но в контексте топика неважно. maytonНо лучше всего начать с того что взять сорцы этой таб-функции и переколбасить их Совершенно верно. Прежде чем кивать на JDBC или копать JDBC нужно со входом разобраться. Что он заведомо верный)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 12:41 |
|
||
|
jdbc, при получении данных меняется значение поля varchar2
|
|||
|---|---|---|---|
|
#18+
Petro123maytonвадя, говорил-же выше там нет таблицы. Там - табличная функция. Надо курить ее сорцы. да. Но в контексте топика неважно. maytonНо лучше всего начать с того что взять сорцы этой таб-функции и переколбасить их Совершенно верно. Прежде чем кивать на JDBC или копать JDBC нужно со входом разобраться. Что он заведомо верный)). +100500 если табличная функция - то jdbc здесь однозначно не виноват ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 15:10 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39277004&tid=2123874]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 351ms |

| 0 / 0 |
