读书人

Java应用程序联接VF数据库

发布时间: 2012-09-01 09:33:02 作者: rapoo

Java应用程序连接VF数据库
场景介绍:

——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应用程序为什么会报错,是路径写错,还是哪设置不到位?又或者。。。。。。

[解决办法]
你在VFP中直接
use \\Foxprotest\xsd\X1.DBF
能否成功
[解决办法]
我对foxpro不大了解,你的意思是在本地roydd机器的VF上输入这个命令,看能访问到Foxprotest机器上的X1.DBF文件么?

yes
在VFP的命令窗口下输入
[解决办法]

VB code
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: Machine2.JDBCDemo.java/* * @(#)JDBCDemo.java 2003/9/29 */import java.sql.*;/** * 演示JDBC操作数据库的各项功能,包括表的创建 * (CREATE)和删除—ROP),记录的插入(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 URLString 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");}//在数据库中创建一个表DemoTablestmt.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数据库连接成功!");    }} 

读书人网 >J2SE开发

热点推荐