Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите настроить инсерт в DBF / 18 сообщений из 18, страница 1 из 1
07.04.2011, 12:26
    #37204329
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
Всем доброе время суток! Использую com.linuxense.javadbf. Создаю DBF ку и пытаюсь внести туда данные
Собственно код
Код: 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.
DBFWriter writer =  new  DBFWriter();
                writer.setCharactersetName("cp866");
                DBFField[] fields =  new  DBFField[ 3 ];
                
                fields[ 0 ] =  new  DBFField();
                fields[ 0 ].setName("NAME");
                fields[ 0 ].setDataType(DBFField.FIELD_TYPE_C);
                fields[ 0 ].setFieldLength( 39 );

                fields[ 1 ] =  new  DBFField();
                fields[ 1 ].setName("CHISLO");
                fields[ 1 ].setDataType(DBFField.FIELD_TYPE_N);
                fields[ 1 ].setFieldLength( 12 );
                fields[ 1 ].setDecimalCount( 2 );

                fields[ 2 ] =  new  DBFField();
                fields[ 2 ].setName("DATE");
                fields[ 2 ].setDataType(DBFField.FIELD_TYPE_D);

                writer.setFields(fields);
                Object rowData[] =  new  Object[ 3 ];

                 for  ( int  i =  1 ; i <  5 ; i++) {
                    rowData[ 0 ] = "текст";
                    rowData[ 1 ] =  10 . 00 ;
                    rowData[ 2 ] =  new  Date( 111 , 7 , 7 );
                    writer.addRecord(rowData);
                }

Когда открываю dbf ку то вместо 10 показывает 1,7E308 (любое число вношу все равно показывает 1,7E308)
Подскажите кто знает как правильно внести числа?
...
Рейтинг: 0 / 0
07.04.2011, 12:38
    #37204371
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
rowData[1] = new Double(10); не поможет?
...
Рейтинг: 0 / 0
07.04.2011, 12:39
    #37204375
Alexey Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
qi_ip,

может я че путаю, но попробуй new BigDecimal("10.00");
...
Рейтинг: 0 / 0
07.04.2011, 12:40
    #37204381
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
Alexey Kuznetsovqi_ip,

может я че путаю, но попробуй new BigDecimal("10.00");нет
...
Рейтинг: 0 / 0
07.04.2011, 13:00
    #37204430
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
grasoff.netrowData[1] = new Double(10); не поможет?
Результат тот же самый

Alexey Kuznetsovqi_ip,может я че путаю, но попробуй new BigDecimal("10.00");
Либа сама ругается
com.linuxense.javadbf.DBFException: Invalid value for field 1 :(
...
Рейтинг: 0 / 0
07.04.2011, 14:12
    #37204646
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
qi_ipgrasoff.netrowData[1] = new Double(10); не поможет?
Результат тот же самыйчто-то ты не так делаешь. у меня всё ок.

Код: 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.
 public   static   void  main(String[] args)  throws  Throwable {
        DBFWriter w =  new  DBFWriter( new  File("c:\\laka.dbf"));

        DBFField fields[] =  new  DBFField[ 3 ];

        fields[ 0 ] =  new  DBFField();
        fields[ 0 ].setName("lala_1");
        fields[ 0 ].setDataType(DBFField.FIELD_TYPE_C);
        fields[ 0 ].setFieldLength( 10 );

        fields[ 1 ] =  new  DBFField();
        fields[ 1 ].setName("lala_2");
        fields[ 1 ].setDataType(DBFField.FIELD_TYPE_C);
        fields[ 1 ].setFieldLength( 20 );

        fields[ 2 ] =  new  DBFField();
        fields[ 2 ].setName("lala_3");
        fields[ 2 ].setDataType(DBFField.FIELD_TYPE_N);
        fields[ 2 ].setFieldLength( 12 );
        fields[ 2 ].setDecimalCount( 2 );

        w.setFields(fields);

        Object rowData[] =  new  Object[ 3 ];
        rowData[ 0 ] = "XXXX";
        rowData[ 1 ] = "Lala1";
        rowData[ 2 ] =  new   Double ( 10 );

        w.addRecord(rowData);

        rowData =  new  Object[ 3 ];
        rowData[ 0 ] = "YYYY";
        rowData[ 1 ] = "Lala2";
        rowData[ 2 ] =  new   Double ( 15 );

        w.addRecord(rowData);
        
        w.write();
}
...
Рейтинг: 0 / 0
07.04.2011, 16:05
    #37205053
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
А вы через какой просмоторщик смотрите?
Через Excel числа не показываются.

гы...я смотрел через xBaseView Database Explorer 8 числа нормально не отображались...
установил DBF Viewer 2000 - все показывает нормально....получается у мну глюк с просмоторщиками. :)
...
Рейтинг: 0 / 0
07.04.2011, 16:53
    #37205186
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
grasoff.netqi_ipпропущено...

Результат тот же самыйчто-то ты не так делаешь. у меня всё ок.



Спасибо за помощь!
...
Рейтинг: 0 / 0
07.04.2011, 17:03
    #37205210
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
qi_ipА вы через какой просмоторщик смотрите?[F3] в total commander
...
Рейтинг: 0 / 0
23.09.2011, 13:04
    #37453188
igor_ch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
Проблема с дробной частью. Если в
Код: plaintext
1.
rowData[ 2 ] =  new   Double ( 10 );

указать
Код: plaintext
1.
rowData[ 2 ] =  new   Double ( 10 . 3 );

то дробную часть обрезает...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.07.2016, 11:20
    #39276111
Помогите настроить инсерт в DBF
Доброго времени!
Можете подсказать как записать в BDF-файл тип данных Int и Time (формат HH:MM:SS)
...
Рейтинг: 0 / 0
19.07.2016, 11:47
    #39276136
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
Александр_БойковДоброго времени!
Можете подсказать как записать в BDF-файл тип данных Int и Time (формат HH:MM:SS)

В DBF все типы хранятся как строка.
...
Рейтинг: 0 / 0
19.07.2016, 12:02
    #39276151
Помогите настроить инсерт в DBF
mad_nazgul,
тогда не совсем понятно зачем при создании setName указывать setDataType, если все данные хранятся в строковом значении??????
...
Рейтинг: 0 / 0
19.07.2016, 12:23
    #39276162
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
Александр_Бойков,

DBF файл вообще текстовый, все типы данных хранятся в нём в виде строк, а указывать типы надо для правильного их преобразования в нужные значения. Например, дата хранится в одном формате (американском), а отображена должна быть в зависимости от локализации операционной системы. Программы читающие DBF файлы, обычно учитывают это.
...
Рейтинг: 0 / 0
19.07.2016, 12:28
    #39276165
Помогите настроить инсерт в DBF
Т.е. получается при формировании DBF-файла можно использовать тип данных строка?
...
Рейтинг: 0 / 0
19.07.2016, 13:26
    #39276225
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
Александр_БойковТ.е. получается при формировании DBF-файла можно использовать тип данных строка?

да можно но не стоит.

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


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

Все типы в DBF соответственно являются продолжением развития CSV или иначе говоря обыкновенная строка. (Имеется ввиду DBF III, потом DBF развивался и добавлялось разных вещей)

Например для типа DATE в DBF выделяется 8 символов, где день месяц и год указываются в определенном формате, но сути это таже строка внутри файла ГГГГММДД. А то что просмотрщик показывает 26/03/2012 это уже сам просморщик оформляет и форматирует красиво.

Тип NUMERIC по сути обыкновенное текстовое поле где дробная часть отделяется символом точки.


Это внутри DBF они хранятся как строки, и определены правила их хранения, и каждый просморщик знает как вычитанные данные распарсить и красиво их показать.


Вообще можно здесь посмотреть http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM#Table_7

Лучше сначала уточнить что за DBF формат требуется
...
Рейтинг: 0 / 0
28.07.2016, 13:39
    #39281881
Помогите настроить инсерт в DBF
Спасибо за информацию.
Проблему с формированием dbf файла решена, но при загрузки данных с типом FIELD_TYPE_N возникает конфликт с региональными настройками.
Можете подсказать как при формировании dbf файла поменять точку на запятую.
...
Рейтинг: 0 / 0
28.07.2016, 14:56
    #39281960
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите настроить инсерт в DBF
Александр_БойковСпасибо за информацию.
Проблему с формированием dbf файла решена, но при загрузки данных с типом FIELD_TYPE_N возникает конфликт с региональными настройками.
Можете подсказать как при формировании dbf файла поменять точку на запятую.

Никак. в dbf нет региональных настроек. правила numeric в формате dbf определены что дробная часть отделяется точкой.
Но можно парсить извлекаемое значение.


Запятая гарантирует что целую часть не отличить от дробной в jdbc драйвер, sdbf, dbf manager.
Будут интересные результаты с пропавшей дробной частью, много потраченного времени.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите настроить инсерт в DBF / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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