Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Visual Foxpro dbf转换为dBaseIII_Java_Sql_Dbf_Visual Foxpro - Fatal编程技术网

Java 将Visual Foxpro dbf转换为dBaseIII

Java 将Visual Foxpro dbf转换为dBaseIII,java,sql,dbf,visual-foxpro,Java,Sql,Dbf,Visual Foxpro,编辑:我发现抛出这个错误是因为新数据文件是visualfoxpordbf格式,而我的主文件是dbaseii。关于如何以编程方式将VFP更改为dBaseIII,有什么建议吗 我正在打开两个.dbf文件。一个是主文件,另一个是包含新数据的文件。我希望将新数据插入主文件 我正在连接到保存文件的目录,如下所示: Connection connection = null; String dbString = "jdbc:odbc:Driver={Microsof

编辑:我发现抛出这个错误是因为新数据文件是visualfoxpordbf格式,而我的主文件是dbaseii。关于如何以编程方式将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都有完全相同的字段,并且在同一个目录中,所以我不确定我做错了什么,因为它不会将它们链接起来

有什么建议/想法吗

我的stacktrace如下所示:

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)
这取决于“dbaseii”如何定位表。以前的一些版本有不同的文件头信息,这可能就是问题所在。在这种情况下,您可能需要一次性打开VFP版本表并将其复制为dBaseIII格式,然后将其移动到连接的生产路径中

如果使用Microsoft Visual Foxpro OleDb提供程序,则可以连接到表所在的路径,并执行类似以下内容的脚本

USE YourTable
COPY to NewVersion TYPE FOXPLUS
旧的dBASE文件格式的缺点是,在未显式打开的情况下,它无法识别相应的索引文件,并且不会优化查询。。。但这同样是基于非常旧的dBASE文件格式


如果您有可用的Visual Foxpro,DRapp转换为FOXPLUS(兼容dBase III)格式的方法将非常有效。如果没有,,

您可以编辑文件的第一个字节以反映dBase III格式:0x2F对应于没有备注的简单dBase III/Foxbase DBF,或者0x8A(如果有备注,则为与.DBF同名但扩展名为.DBT的文件)


显然,如果您决定使用十六进制编辑器编辑DBF,请务必保存其备份副本。

我的版本不需要VFP,只需要VFP OleDBProvider,它还允许用户根据以前OleDB处理的示例链接执行脚本。我意识到我的问题可以通过另一种方式解决,但对于我自己和其他可能遇到此类问题的人来说,这是最有用的答案。太棒了,谢谢你!很好的解释和例子。