Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER / 5 сообщений из 5, страница 1 из 1
28.03.2006, 12:34
    #33629280
myinter@mail.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER
Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER

Код: plaintext
1.
  NO_SEQ                     NUMBER( 1 ) ,
  VALUE                       NUMBER( 12 , 4 ),

Это надо для того, чтобы при выводе в JTable для поля с типом
NUMBER(1) - выводить целое число Integer,
а при выводе поля с типом NUMBER(12,4) - выводить Float

На даный момент все эти поля определяются так

Код: plaintext
1.
2.
3.
4.
5.
6.
Object RetField =  new  Object();

         if  (ColumnTypeName.equals("NUMBER"))
        {
          RetField =  new   Float (rs.getFloat(i));
        }
.....
...
Рейтинг: 0 / 0
28.03.2006, 13:12
    #33629432
myinter@mail.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER
Почитав доку все разрешилось самособой...
В моделе даных для JTable я перед загрузкой в Vector, вызываю некий метод,
для анализа типов данных..


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        int  RowCount =  0 ;
       rows =  new  Vector();
        while  (rs.next()) 
       {
         RowCount++;
         Vector newRow =  new  Vector();
          for  ( int  i =  1 ; i <= getColumnCount(); i++) 
         {
           newRow.addElement(OPF.PrepareField(rsmd, rs, i));
         }
         rows.addElement(newRow);
       }
Где PrepareField

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
   public  Object PrepareField (ResultSetMetaData rsmd, ResultSet rs,  int  i)
  {
    Object RetField =  new  Object();
     try 
    {
      String ColumnTypeName = rsmd.getColumnTypeName(i);
       int  Scale = rsmd.getScale(i);
       if  (rs.getString(i) !=  null )
      {
         if  ((ColumnTypeName == "CHAR") || (ColumnTypeName == "VARCHAR2"))
        {
          RetField =  new  String(rs.getString(i).trim());
        }
         else   if  (ColumnTypeName.equals("NUMBER") & Scale ==  0 )
        {
          RetField =  new  Integer(rs.getInt(i));
        }
         else   if  (ColumnTypeName.equals("NUMBER") & Scale >  0 )
        {
          RetField =  new   Float (rs.getFloat(i));
        }
         else 
        {
          RetField =  new  String(rs.getString(i).trim());
        }
      }
       else 
      {
         if  (ColumnTypeName.equals("NUMBER") & Scale ==  0 )
        {
          RetField =  new  Integer( 0 );
        }
         else   if  (ColumnTypeName.equals("NUMBER") & Scale >  0 )
        {
          RetField =  new   Float ( 0 );
        }
         else 
        {
          RetField =  new  String("");
        }
      }
    }
     catch  (SQLException ex) 
    {
      OraSQLException.GetSQLException(ex);
    }
     catch  (java.lang.Exception ex) 
    {
      ex.printStackTrace();
    }
     return  RetField;
  }
...
Рейтинг: 0 / 0
28.03.2006, 13:26
    #33629490
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER
Я тоже было попробовал, но получил нечто стоящее только в случае непосредственного запроса из таблицы. При самостоятельном же формировании полей Precision и Scale равны 0:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Statement st = con.createStatement();

ResultSet rs = st.executeQuery(
  "select 1 int_value\n" +
  "     , 1.234 float_value\n" +
  "from dual"
);

ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("Cols=" + rsmd.getColumnCount());
 for  ( int  i =  1 ; i <= rsmd.getColumnCount(); i++) {
  System.out.println("ColumnLabel   : " + rsmd.getColumnLabel(i));
  System.out.println("ColumnTypeName: " + rsmd.getColumnTypeName(i));
  System.out.println("Precision     : " + rsmd.getPrecision(i));
  System.out.println("Scale         : " + rsmd.getScale(i));
}
 while  (rs.next()) {
   for  ( int  i =  1 ; i <= rsmd.getColumnCount(); i++) {
    System.out.println(rs.getString(i));
  }
}  
...
Рейтинг: 0 / 0
28.03.2006, 13:56
    #33629603
southeast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER
а если не определять, для вывода получать из базы float, а потом форматировать DecimalFormat?
...
Рейтинг: 0 / 0
29.03.2006, 11:39
    #33631693
myinter@mail.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER
Denis Popov Я тоже было попробовал,
но получил нечто стоящее только в случае непосредственного запроса из таблицы.
При самостоятельном же формировании полей Precision и Scale равны 0:
Спасибо за дельный совет!
Действительно попробовал так сделать...
и действительно Precision и Scale равны 0.
Учту это при дальнейшей разработке.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как при получении даных с БД Oracle определить размер/точность поля типа NUMBER / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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