Запишите файл dbf, используя проблему dbf_jdbc - PullRequest
0 голосов
/ 20 января 2012

Файл не может быть переименован после следующего выполнения кода:

private static final String URL = "jdbc:DBF:/C:\\TEST";
private static final String TABLE = "create table SAMPLE ( "
+ " SM VARCHAR(10), "
+ " PRIM  VARCHAR(10) " + ")"; 

...

Properties properties = new Properties();
properties.setProperty( "charSet", "cp866" );
properties.setProperty( "CODEPAGEID", "66" );

// instantiate it
Class.forName( "com.hxtt.sql.dbf.DBFDriver" ).newInstance();
Connection dbfConn = DriverManager.getConnection( URL, properties );
Statement stmt = dbfConn.createStatement();
stmt.executeUpdate( TABLE );
stmt.close();
PreparedStatement ps = dbfConn.prepareStatement( "INSERT INTO SAMPLE (SM, PRIM) VALUES (?,?);"  );
ps.setString( 1, "test11" );
ps.setString( 2, "test12" );
ps.executeUpdate();
ps.close();
dbfConn.close();
new File( "C:\\TESTarj\\SAMPLE.DBF").renameTo( new File( "C:\\TESTarj\\SAMPLE_renamed.DBF" ) );

При удалении ps.executeUpdate(); файл переименовывается. Проблема появилась только в последнюю пятницу 13-го . Раньше все работало нормально. dbf_jdbc, Java, версии tomcat не были изменены . Проблема появилась на нескольких ящиках одновременно. В качестве обходного пути я могу использовать javadbf, но в нашем случае это не лучший выбор.

Есть идеи, что может быть причиной проблемы?

1 Ответ

1 голос
/ 20 января 2012
 properties.setProperty( "delayedClose", "0" );

// delayedClose Указывает задержанные секунды для закрытия транзакции. Эта опция используется, чтобы избежать частых операций закрытия / открытия таблицы для следующих sqls. Автоматический временный индекс отключен, когда delayedClose <= 60 с. Вы можете использовать 0 ~ 120 секунд. По умолчанию: 3. </p>

...