场景介绍:——Java测试连接程序
    操作系统:XP SP3
    计算机名:roydd
    测试代码:import java.sql.*;public class JDBCDemo 
{
public static void main(String args[]) 
{ Connection connDbf = null;    
PreparedStatement psDbf = null;    
ResultSet rsDbf = null;    
//Foxprotest为foxpro数据库所在计算机名,xsd为共享文件夹名,X1.DBF为数据文件
String filePath = "//Foxprotest/xsd/X1.DBF";
//数据库表名    
String fileName = "X1";
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");    
String strurl = "jdbc:odbc:Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + filePath + ";Exclusive=No;";    
connDbf = DriverManager.getConnection(strurl);    
String sql = "select * from " + fileName;    
psDbf = connDbf.prepareStatement(sql);
rsDbf = psDbf.executeQuery();
while(rsDbf.next()){
System.out.println(rsDbf.getString("DZBH"));
}
}catch (ClassNotFoundException e) {
e.printStackTrace(System.err);
} catch (SQLException e) {
e.printStackTrace(System.err);
}
}
}*******************************************************************************************——VF数据库
    操作系统:win98
    计算机名:Foxprotest
    数据库版本: VF2.6
    自由表名: X1******************************************************************************************现在,我的代码在本地roydd机器上测试可以正常读取本地VF数据库,但是去读取Foxprotest上的VF数据库就报错java.sql.SQLException: [Microsoft][ODBC Visual FoxPro Driver]Fox Error 1
我已经将Foxprotest机器上的VF数据库项目目录共享在局域网上,在我本地roydd机器上已经可以打开该共享目录。请各位教我,我的Java应用程序为什么会报错,是路径写错,还是哪设置不到位?又或者

解决方案 »

  1.   

    你在VFP中直接
    use \\Foxprotest\xsd\X1.DBF
    能否成功
      

  2.   


    我对foxpro不大了解,你的意思是在本地roydd机器的VF上输入这个命令,看能访问到Foxprotest机器上的X1.DBF文件么?这个use \\Foxprotest\xsd\X1.DBF我还要查查教程在哪输入?!
      

  3.   

    我对foxpro不大了解,你的意思是在本地roydd机器的VF上输入这个命令,看能访问到Foxprotest机器上的X1.DBF文件么?yes
    在VFP的命令窗口下输入
      

  4.   

    为什么我的程序还是读不到Foxprotest机器的数据呢?
      

  5.   

    java对vfp数据库的操作
    --------------------------------------------------------------------------------
     
    一:创建新的ODBC数据资源
    1.windows2000的控制面板-》管理工具-》数据源(ODBC),出现下面的对话框,在对话框的”用户DSN”:选择“Visual FoxPro Database”的用户数据源,单击“添加”按纽。
    2.在出现的对话框里,选择使用“Microsoft Visual Foxpro Driver”驱动程序来安装数据资源,单击“完成”按纽。
    3.在弹出来的答话框,我们设置“Data Source Name”为JDBCDemo.java,“DataBase type”项为“Free Table directory”,然后在“path:”项指定JDBCDemo.java所在的目录为ODBC数据资源的目录。再选择”Options“,把Fetch data om background选上。Collating sequence: Machine
    2.JDBCDemo.java/*
     * @(#)JDBCDemo.java 2003/9/29
     */
    import java.sql.*;/**
     * 演示JDBC操作数据库的各项功能,包括表的创建
     * (CREATE)和删除(DROP),记录的插入(INSERT),
     * 选择(SELECT)和更改(UPDATE)等操作 。 */
    public class JDBCDemo 
    {
    public static void main(String args[]) 
    {
    try {
    Statement stmt;
    PreparedStatement pstmt;
    ResultSet rs;// 加载 jdbc-odbc 桥驱动程序
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//定义JDBC URL
    String url = "jdbc:odbc:JDBCDemo";//得到与数据库的连接
    Connection con DriverManager.getConnection (url);
    //显示URL和连接信息
    System.out.println("URL: " + url);
    System.out.println("Connection: " + con);//得到一个Statement对象
    stmt = con.createStatement();   //如果表DemoTable已经存在,则删除之,否则,抛掷一个异常
    System.out.println("DROP TABLE DemoTable, if it exists.");
    try{stmt.executeUpdate("DROP TABLE DemoTable");                   }catch(Exception e){
    System.out.print(e);
    System.out.println("No existing table to delete");
    }//在数据库中创建一个表DemoTable
    stmt.executeUpdate("CREATE TABLE DemoTable ("+ "test_id int,test_val char(15) not null)");
    System.out.println("table DemoTable created!");//在表中插入一些值
    stmt.executeUpdate("INSERT INTO DemoTable ("+ "test_id, test_val) VALUES(1,'One')");
    stmt.executeUpdate("INSERT INTO DemoTable ("+ "test_id, test_val) VALUES(2,'Two')");
    stmt.executeUpdate("INSERT INTO DemoTable ("+ "test_id, test_val) VALUES(3,'Three')");
    stmt.executeUpdate("INSERT INTO DemoTable ("+ "test_id, test_val) VALUES(4,'Four')");
    stmt.executeUpdate("INSERT INTO DemoTable ("+ "test_id, test_val) VALUES(5,'Five')");//得到另一个Statement对象
      stmt = con.createStatement();//查询数据库中的表DemoTable,得到以test_id排序后的所有记录,
    //并存储在ResultSet对象rs中
    rs = stmt.executeQuery("SELECT * from DemoTable ORDER BY test_id");//显示表DemoTable中的所有记录
    System.out.println("Display all results:");
    while(rs.next())
    {
    int theInt= rs.getInt("test_id");
    String str = rs.getString("test_val");
    System.out.println("\ttest_id= " + theInt + "\tstr = " + str);
    }// 创建已准备好的语句,更新“DemoTable”表中
    // 某条记录的test_val字段。
    // 已准备好的语句接受两个参数。
    pstmt = con.prepareStatement("UPDATE DemoTable SET test_val = ? WHERE test_id = ?");//更改表DemoTable中的第2条记录的test_val字段的值
    // 充填UPDATE语句中的“?”,并执行UPDATE语句
      pstmt.setString(1, "Hello!");//就是说第一个参数test_val为Hello!
      pstmt.setInt(2, 2);//就是说第二个参数test_id为2
      pstmt.executeUpdate();
     System.out.println("Update row number 2: OK.");//显示表DemoTable中更新后的第2条记录
     stmt = con.createStatement();
    rs = stmt.executeQuery("SELECT * from DemoTable ORDER BY test_id");
    System.out.println("Display row 2:");
    if (rs.next() && rs.next())
    {
    int theInt= rs.getInt("test_id");
    String str = rs.getString("test_val");
    System.out.println("\ttest_id= " + theInt + "\tstr = " + str);}con.close(); //关闭与数据库的连接
    }catch( Exception e ) {
    e.printStackTrace();
    }
    }
    }在windows2000+jdk1.3+Visual Foxpro 6.0上通过测试。
    以下小丑修正:以上代码是正确的,我测试了一下.只有一句:
    *********************************
    //得到与数据库的连接
    Connection con DriverManager.getConnection (url);
    ********************************
    掉了个=;我写了个简单的测试与数据库的连接.(ODBC的建立照以上,这里我取名为OdbcJava).这里在JDK1.5.0_07下测试通过.import java.sql.*;public class Jdbc {
    public static void main(String args[]) {
    Connection con;
    String driver="sun.jdbc.odbc.JdbcOdbcDriver";
    String url = "jdbc:odbc:OdbcJava";
    try{
    Class.forName(driver);
    }catch(Exception e){
    System.out.println("ODBC数据源连接错误:"+e.toString());
    }
    try{
    con=DriverManager.getConnection(url);
    }catch(Exception e){
    System.out.println("VFP数据库连接错误:"+e.toString());
    }
    System.out.println("OK..VFP数据库连接成功!");
    }
    }   
      

  6.   

    LS这位这个例子我google看过了,我现在的问题好想这个没用吧!我现在是读本地VF数据库的数据没问题,可读取服务器上的就报错了!
      

  7.   

    这是 OLEDB(ADO)方式连接串    标准连接:
         "Provider=vfpoledb;Data Source=C:\DatabasePath\MyDatabase.dbc;" 
        或
        "Provider=VFPOLEDB.1;Data Source=d:\temp;Password="";Collating Sequence=MACHINE"
        或
        "Provider=VFPOLEDB.1;Data Source=\\192.168.0.1\zz;Password="";Collating Sequence=MACHINE"
        或
        "provider=VFPOLEDB.1;data source=d:\;user id=admin;password="
        或老版本DBF,用JET 连接:
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\192.168.0.1\zz;Extended Properties=dbaSE 5.0;Persist Security Info=False"
      

  8.   

    ODBC方式连接串:  dBASE:
        " Driver={Microsoft dBASE Driver (*.dbf)}; DriverID=277;Dbq=c:\DatabasePath" 
        注意在书写sql语句时必须指定文件名(如"Select Name, Address From Clients.dbf").
        Visual Foxpro(有数据库容器):
        " Driver={Microsoft Visual Foxpro Driver};UID=; SourceType=DBC;SourceDB=C:\DatabasePath\MyDatabase.dbc;Exclusive=No"
        Visual Foxpro(无数据库容器):
        " Driver={Microsoft Visual Foxpro Driver};UID=; SourceType=DBF;SourceDB=C:\DbfPath\MyDdbf.dbf;Exclusive=No"  Driver={Microsoft Visual FoxproDriver};
    SourceType=DBF;SourceDB=\\192.168.0.1\temp;
    Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO"
        数据库表
    Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c:\myvfpdb.dbc;Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO;
        自由表
    Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\myvfpdbfolder;E
      

  9.   

    效果一样的,还是报一样的错误!
    java.sql.SQLException: [Microsoft][ODBC Visual FoxPro Driver]Fox Error 1
    很无奈啊~
      

  10.   


    我已经将foxpro的项目rsgl文件夹设置为共享,你说的本地文件夹映射是要另外在设置下的吗?因为我们系统处理的业务,需要客户老系统的数据做基础数据。
      

  11.   

    你好,从本地读取dbf数据文件的时候filePath 是这样写的吗? String filePath = "D://car.DBF";
    car.dbf 位于D盘的根目录下。
    测试了一下老是报下面的异常:
    java.sql.SQLException: [Microsoft][ODBC Visual FoxPro Driver]File 'car.dbf' does not exist.
    知道是哪里出问题吗