gpt4 book ai didi

java - 将 Visual Foxpro dbf 转换为 dBaseIII

转载 作者:行者123 更新时间:2023-12-01 13:56:56 26 4
gpt4 key购买 nike

编辑:我发现这个错误是由于新数据文件采用 Visual Foxpor dbf 形式而引发的,而我的主文件是 dBaseIII。关于如何以编程方式将 VFP 更改为 dBaseIII 有什么建议吗?

<小时/>

我正在打开两个 .dbf 文件。一种是主文件,另一种是包含新数据的文件。我希望将新数据插入主文件中。

我正在连接到保存文件的目录,如下所示:

 Connection connection = null;
String dbString = "jdbc:odbc:Driver={Microsoft dBASE Driver (*.dbf)};DBQ=" + dealerSNS + "\\";

try
{
System.out.println("Opening Database Directory " + dealerSNS );
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection = DriverManager.getConnection(dbString, "", "");
System.out.println("Connection established!");
}
catch (ClassNotFoundException cnfEx)
{
System.out.println("* Unable to load driver! *");
System.exit(1);
}
catch (SQLException sqlEx)
{
System.out.println(dbString);
System.out.println("* Cannot connect to database! * SQL = " + sqlEx);
System.exit(1);
}

然后我调用我准备好的声明:

 try
{
String update = "INSERT INTO fullSNS SELECT * FROM newSNS";
PreparedStatement ps = connection.prepareStatement(update);
ps.executeUpdate();
System.out.println("query: " + ps+ " worked!");
}
catch (SQLException se)
{
se.printStackTrace();

}

两个 .dbf 具有完全相同的字段并且位于同一目录中,因此我不确定我做错了什么,它不会将它们链接起来。

有什么建议/想法吗?

我的堆栈跟踪如下所示:

java.sql.SQLException: [Microsoft][ODBC dBase Driver] External table is not in the expected format.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3156)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:215)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:137)
at ads.SmooshNMoveFiles.checkNSmoosh(SmooshNMoveFiles.java:116)
at ads.ActiveTimer.reportToWork(ActiveTimer.java:82)
at ads.ActiveTimer.run(ActiveTimer.java:28)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

最佳答案

这取决于“dBaseIII”表的实际定位方式。一些早期版本具有不同的文件头信息,这可能是问题所在。在这种情况下,您可能需要一次性打开 VFP 版本表并将其复制为 dBaseIII 格式,然后将其移至连接的生产路径中。

如果您使用 Microsoft Visual Foxpro OleDb Provider,您可以连接到表所在的路径,并执行类似的脚本

USE YourTable
COPY to NewVersion TYPE FOXPLUS

较旧的 dBASE 文件格式的缺点是,在未显式打开的情况下,它无法识别相应的索引文件,并且不会优化查询...但这又是基于非常旧的 dBASE 文件格式。

Here's one showing a sample SQL Command for execution

关于java - 将 Visual Foxpro dbf 转换为 dBaseIII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com