powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите настроить инсерт в DBF
18 сообщений из 18, страница 1 из 1
Помогите настроить инсерт в DBF
    #37204329
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброе время суток! Использую 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
Помогите настроить инсерт в DBF
    #37204371
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rowData[1] = new Double(10); не поможет?
...
Рейтинг: 0 / 0
Помогите настроить инсерт в DBF
    #37204375
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,

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

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

Alexey Kuznetsovqi_ip,может я че путаю, но попробуй new BigDecimal("10.00");
Либа сама ругается
com.linuxense.javadbf.DBFException: Invalid value for field 1 :(
...
Рейтинг: 0 / 0
Помогите настроить инсерт в DBF
    #37204646
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите настроить инсерт в DBF
    #37205053
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вы через какой просмоторщик смотрите?
Через Excel числа не показываются.

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

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



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

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

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

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

DBF файл вообще текстовый, все типы данных хранятся в нём в виде строк, а указывать типы надо для правильного их преобразования в нужные значения. Например, дата хранится в одном формате (американском), а отображена должна быть в зависимости от локализации операционной системы. Программы читающие DBF файлы, обычно учитывают это.
...
Рейтинг: 0 / 0
Помогите настроить инсерт в DBF
    #39276165
Т.е. получается при формировании DBF-файла можно использовать тип данных строка?
...
Рейтинг: 0 / 0
Помогите настроить инсерт в DBF
    #39276225
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр_БойковТ.е. получается при формировании 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
Помогите настроить инсерт в DBF
    #39281881
Спасибо за информацию.
Проблему с формированием dbf файла решена, но при загрузки данных с типом FIELD_TYPE_N возникает конфликт с региональными настройками.
Можете подсказать как при формировании dbf файла поменять точку на запятую.
...
Рейтинг: 0 / 0
Помогите настроить инсерт в DBF
    #39281960
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр_БойковСпасибо за информацию.
Проблему с формированием dbf файла решена, но при загрузки данных с типом FIELD_TYPE_N возникает конфликт с региональными настройками.
Можете подсказать как при формировании dbf файла поменять точку на запятую.

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


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


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