0

Ms Access 2010 64 ビットに接続するソリューションを開発するために Eclipse 64 ビットを使用しています。

Eclipse を使用してこのプロジェクトを実行している場合、この接続は完全に機能します。(データベースに接続し、挿入、更新、および削除を行います)。ただし、実行可能な *.jar ファイルとしてエクスポートして実行すると、このエラーが発生します

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

Eclipse で動作し、jar ファイルとして動作しないのはなぜですか??

また、この jar ファイルを 32 ビット コンピューターにコピーし、この jar ファイルをjre-7u6-windows-i586Java ランタイムで実行すると、完全に動作します。

64ビットコンピューターではなく32ビットコンピューターで動作する理由を誰か知っていますか??

ありがとう

4

2 に答える 2

0

このエラーは、JAR に Database Driver クラス (ODBC Driver Manager) がないことを示しています。そのファイルを含む jar を eclipse プロジェクトの /lib フォルダーにコピーし、プロジェクトの /lib が含まれるようにエクスポート用に jar を再コンパイルします。

于 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 ダイアログ ボックスが表示されます。UserDSn をクリックします。
    5. 追加ボタンをクリック
    6. Microsoft Access Driver(*.mdb) ドライバーを選択し、[完了] をクリックします。
    7. データ ソース名を付けます: student_base
    8. 次に、選択をクリックします
    9. 作成したデータベース名を参照してクリックします。student_base.mdb は、すべてのデータが保存されるデータベース ファイルです。
    10. [OK] をクリックします。DSN が作成されたら、この例を実行できます*/

      public class AddNewStudent extends JFrame implements ActionListener {

      プライベート JButton btnok,btnexit,btnaddnew; //buttons private JTextField tf1,tf2;//textfields private JLabel lblname,lbladd,lblmsg; //ラベル

      プライベート JPanel p1、p2、p3、psouth; //パネル

      public AddNewStudent() //constructor { //ボタンの初期化 btnok = new JButton("OK"); btnok.addActionListener(これ); btnexit = new JButton("Exit"); btnexit.addActionListener(これ); btnaddnew = new JButton("AddNew"); btnaddnew.addActionListener(これ);

    //テキストフィールドの初期化 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(新しい 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(新しい 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("クラスが見つかりませんエラー"); } } } // ボタン addnew をクリックすると、テキストフィールドは空になり、入力できます

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

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