0

我正在使用 Eclipse 64 位开发连接到 Ms Access 2010 64 位的解决方案。

当我使用 eclipse 运行这个项目时,这个连接工作得很好。(是否连接到数据库并进行插入、更新和删除)。但是,当我将它导出为可执行的 *.jar 文件并运行它时,它会给我这个错误

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

为什么它在eclipse中工作并且不能作为jar文件工作?

此外,如果我将此 jar 文件复制到 32 位计算机并使用jre-7u6-windows-i586java 运行时执行此 jar 文件,它将完美运行。

有人知道为什么它在 32 位计算机上工作而不是在 64 位计算机上工作的原因吗?

谢谢

4

2 回答 2

0

错误告诉您的是您的 JAR 中缺少数据库驱动程序类(ODBC 驱动程序管理器)。将包含该文件的 jar 复制到 eclipse 项目中的 /lib 文件夹中,然后重新编译 jar 以进行导出,使其包含项目的 /lib。

于 2013-08-07T02:28:39.087 回答
0

这可能会帮助你

import java.sql.*;
import java.math.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;

/* 与 MS-Access 的数据库连接是通过在此示例中创建 DataSourceName(dsn) 完成的*/ /* 使用此示例的步骤:

  • 转到 ms-access 并创建一个名为“student_base”的表并为其命名为 student_base.mdb
    1. 转到控制面板
    2. 点击管理工具(windows 2000/xp),点击ODBC(win98)
    3. 点击 ODBC
    4. 然后,您将看到一个 ODBC 对话框。点击用户DSn
    5. 点击添加按钮
    6. 选择 Microsoft Access Driver(*.mdb) 驱动程序并点击完成
    7. 提供数据源名称:student_base
    8. 然后点击选择
    9. 浏览您创建的数据库名称并单击它:student_base.mdb 是一个将存储所有数据的数据库文件
    10. 单击确定。创建 DSN 后,您可以执行此示例 */

      公共类 AddNewStudent 扩展 JFrame 实现 ActionListener {

      私人 JButton btnok,btnexit,btnaddnew; //buttons private JTextField tf1,tf2;//文本字段 private JLabel lblname,lbladd,lblmsg; //标签

      私人JPanel p1,p2,p3,psouth;//面板

      public AddNewStudent() //constructor { //初始化按钮 btnok = new JButton("OK"); btnok.addActionListener(this); btnexit = new JButton("退出"); btnexit.addActionListener(this); btnaddnew = new JButton("AddNew"); btnaddnew.addActionListener(this);

    //初始化文本字段 tf1 = new JTextField(12); tf2 = 新的 JTextField(12); //初始化标签

lblname = new JLabel("名称:"); lbladd = new JLabel("地址:"); lblmsg = new JLabel("",JLabel.CENTER);

//initializing panels

p1 = 新的 JPanel(); p2 = 新的 JPanel(); p3 = 新的 JPanel(); psouth = 新的 JPanel();

//adding buttons and label to panel p1
//setting flowlayout

p1.setLayout(new FlowLayout());

p1.add(btnok); p1.add(btnexit); p1.add(btnaddnew); //将 lblmsg 添加到面板 p3 p3.add(lblmsg);

//adding both the panels to new panel,psouth
//settin layout 2:1


   psouth.setLayout(new GridLayout(2,1));
    psouth.add(p3);
    psouth.add(p1);


//adding label and textfields to panel p2

p2.setLayout(new GridLayout(3,1)); //设置面板p2的线条和标题边框 p2.setBorder(BorderFactory.createLineBorder(Color.red)); p2.setBorder(BorderFactory.createTitledBorder("输入您的详细信息")); p2.add(lblname); p2.add(tf1); p2.add(lbladd); p2.add(tf2);

//adding panel to container
    this.getContentPane().add(p2,"Center");
    this.getContentPane().add(psouth,"South");

    this.setSize(300,300);
    this.setLocation(100,200);
    this.show();


   }
   public static void main(String args[])
   {
      AddNewStudent ad = new AddNewStudent();
    }

//事件处理

 public void actionPerformed(ActionEvent e)
 {
   if(e.getSource()==btnok)
   {
      PreparedStatement pstm;
      ResultSet rs;
      String sql;
  //if no entries has been made and hit ok button throw an error
  //you can do this step using try clause as well

if((tf1.getText().equals("")&&(tf2.getText().equals("")))) { lblmsg.setText("输入您的详细信息"); lblmsg.setForeground(Color.magenta); }

别的 {

try { //加载驱动 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    //connection object created using DriverManager class
    //student_base is the name of the database
        Connection connect =
DriverManager.getConnection("jdbc:odbc:student_base");

    //creating prepared statement object pstm so that query can be

发送到数据库

        pstm=connect.prepareStatement("insert into student_base
values(?,?)");
        pstm.setString(1,tf1.getText());
        pstm.setString(2,tf2.getText());
        //execute method to execute the query
        pstm.executeUpdate();
        lblmsg.setText("Details have been added to database");



     //closing the prepared statement  and connection object


pstm.close();
 connect.close();

} catch(SQLException sqe) { System.out.println("SQl 错误"); } catch(ClassNotFoundException cnf) { System.out.println("找不到类错误"); } } } //点击按钮添加新,你的文本框将是空的输入

next record
    if(e.getSource()==btnaddnew)
    {
      tf1.setText("");
      tf2.setText("");
    }

    if(e.getSource()==btnexit)
    {
      System.exit(1);
     }
   }
 }
于 2013-08-07T02:35:45.703 回答