JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » JDBC/SQL討論區 » 其他 Database  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
作者 (已解決)JDBC以ODBC連結Access(*.mdb檔)資料讀取空白
hunglong





發文: 13
積分: 0
於 2014-10-12 23:13 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
2014.10.21本題最後解決的方法:安裝舊版的JAVA..我這裡是安裝JDK1.4版....
新的問題要討論的是為什麼安裝新版我無法正確執行!如果有前輩知道再請給答案!
如尚未解則爬文完再開版討論,請各位集思廣義!
ANS:JDK8已經不支援ODBC-JDBC,要繼續使用 ACCESS 資料庫,要使用 X86 版的 JDK7U55 與 JRE .
=========================================================
2014.10.12
因為這個問題卡住整個資料庫的程式都無法再進行,上網目前看到的答案都仍無法修正錯誤,所以要麻煩各位前輩幫忙測試及解答。

關於JDBC連結Access的文章好像不多,大部份都是會用設定絕對路徑的方法設定如下:
"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\javatest\\mybook.mdb";

1.仍然無法修正問題!程式執行後跳出訊息:"sun.jdbc.odbc.JdbcOdbcDriver"
然後表格欄位完全讀取不到資料庫mybook.mdb的資料。(下圖一)

2.有設定以下動作:
ODBC資料來源管理員有設定名稱(下圖二)

3.系統為Windows7家用進階版32位元(下圖三)

4.資料庫檔案myBook.mdb,資料表欄位(下圖四)

5.使用編輯器:Eclipse

以下為範例完整程式碼
==========================================================

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

public class j03160301 extends JFrame
{
Connection ConnObj;
Statement SQLStatement;
ResultSet RS;
//========================
JPanel contentPane;
Panel panel1;
Label L1,L2,L3,L4;
TextField T1,T2,T3,T4;
Button B1,B2,B3,B4;

public j03160301()
{
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
//===========================================
panel1 = new Panel();
panel1.setBounds(0, 0, 290, 130);
panel1.setLayout(null);
panel1.setEnabled(false); //***********
/* 如此游標無法進入其內的 T1~T4,
但看起來不會像 T1.setEnabled(false) 的樣子*/
contentPane.add(panel1); //panel1 是加在 contentPane 內

//用來顯示一筆資料的元件是加在 panel1 內
L1 = new Label("ISBN:");
L1.setBounds(20, 10, 50, 25);
panel1.add(L1);
L2 = new Label("書名:");
L2.setBounds(20, 40, 50, 25);
panel1.add(L2);
L3 = new Label("作者:");
L3.setBounds(20, 70, 50, 25);
panel1.add(L3);
L4 = new Label("價格:");
L4.setBounds(20, 100, 50, 25);
panel1.add(L4);
T1 = new TextField();
T1.setBounds(70, 10, 200, 25);
panel1.add(T1);
T2 = new TextField();
T2.setBounds(70, 40, 200, 25);
panel1.add(T2);
T3 = new TextField();
T3.setBounds(70, 70, 200, 25);
panel1.add(T3);
T4 = new TextField();
T4.setBounds(70, 100, 200, 25);
panel1.add(T4);
//===========================================
B1 = new Button("第一筆");
B1.setBounds(new Rectangle(10, 150, 65, 20));
B1.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
B1_mouseClickedEnvelope; //程式碼較多,寫在另一個方法中
}
});
contentPane.add(B1);

B2 = new Button("上一筆");
B2.setBounds(80, 150, 65, 20);
B2.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
B2_mouseClickedEnvelope; //程式碼較多,寫在另一個方法中
}
});
contentPane.add(B2);

B3 = new Button("下一筆");
B3.setBounds(150, 150, 65, 20);
B3.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
B3_mouseClickedEnvelope; //程式碼較多,寫在另一個方法中
}
});
contentPane.add(B3);

B4 = new Button("最末筆");
B4.setBounds(220, 150, 65, 20);
B4.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
B4_mouseClickedEnvelope; //程式碼較多,寫在另一個方法中
}
});
contentPane.add(B4);
//===================================
this.setBounds(200,100,310,210);
this.setTitle("使用 Select 敘述");
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0); //結束
}
});
this.setVisible(true);
//===========================================
//載入 JDBC Driver、連結資料庫、送 SELECT 敘述、回傳資料集
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//載入JDBC Driver
ConnObj = DriverManager.getConnection("jdbc:odbc:myBook");
//連結 ODBC 設定的 myBook 資料來源,jdbc:subprotocol:Alias
SQLStatement = ConnObj.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY );
/* 其後由此 Statement 物件執行 SQL 指令時,
回傳的會是可捲動且唯讀的 ResultSet 物件。*/
RS = SQLStatement.executeQuery("SELECT * FROM BookData");
//執行 SELECT 敘述,會回傳一個資料集
//查詢 myBook 資料來源之 BookData 資料表全部欄位的記錄

//必須先向下移到第一筆: next(),因為一開始是指到第一筆之前
if( RS.next() )
{ //RS 內至少有一筆記錄,才會回傳 true
//有一筆記錄,才能擷取這筆記錄各欄位的資料
T1.setText( RS.getString("ISBN"));
T2.setText( RS.getString("BookName"));
T3.setText( RS.getString("Author"));
T4.setText( String.valueOf(RS.getInt("Price")));
/* 因 ISBN、BookName、Author 欄位都是 Access 的「文字」
而 Price 欄位是 Access 的「長整數」。 */
}
else
JOptionPane.showMessageDialog(
this,"myBook資料庫內,無任何資料" );
}
catch(Exception ecp)
{ /*為縮短範例程式碼的篇幅,故以 Exception 涵蓋各種例外*/


  JOptionPane.showMessageDialog(this, ecp.getMessage());
}
}//建構子 public j03160301() end

void B1_mouseClicked(MouseEvent e)
{
try
{
RS.first(); //移到第一筆記錄
T1.setText( RS.getString("ISBN"));
T2.setText( RS.getString("BookName"));
T3.setText( RS.getString("Author"));
T4.setText( String.valueOf(RS.getInt("Price")) );
}
catch(SQLException ecp){}
} //B1_mouseClicked(MouseEvent e) end;

void B2_mouseClicked(MouseEvent e)
{
try
{
if( RS.previous() )
{ //移到上一筆記錄
T1.setText( RS.getString("ISBN"));
T2.setText( RS.getString("BookName"));
T3.setText( RS.getString("Author"));
T4.setText( String.valueOf(RS.getInt("Price")) );
}
else
{ //回傳 false 表示移到了第一筆之前
RS.first(); //再移到第一筆
JOptionPane.showMessageDialog(B2, "已到第一筆" );
//不需改變 T1~T4 的文字,因為剛才已顯示第一筆內容
}
}
catch(SQLException ecp){}
} //B2_mouseClicked(MouseEvent e) end

void B3_mouseClicked(MouseEvent e)
{
try
{
if( RS.next() )
{ //移到下一筆記錄
T1.setText( RS.getString("ISBN"));
T2.setText( RS.getString("BookName"));
T3.setText( RS.getString("Author"));
T4.setText( String.valueOf(RS.getInt("Price")) );
}
else
{ //回傳 false 表示移到了最末筆之後
RS.last(); //再移到最末筆
JOptionPane.showMessageDialog(B3, "已到最末筆" );
//不需改變 T1~T4 的文字,因為剛才已顯示最末筆內容
}
}
catch(SQLException ecp){}
} //B3_mouseClicked(MouseEvent e) end


void B4_mouseClicked(MouseEvent e)
{
try
{
RS.last(); //移到最末筆記錄
T1.setText( RS.getString("ISBN"));
T2.setText( RS.getString("BookName"));
T3.setText( RS.getString("Author"));
T4.setText( String.valueOf(RS.getInt("Price")) );
}
catch(SQLException ecp){ }
} //B4_mouseClicked(MouseEvent e) end

public static void main(String[] args)
{
new j03160301();
}
} //public class j03160301 end

j03160301.java (6.71k)


hunglong edited on 2014-10-23 17:19
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
4253 (已解決)JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 7518 2014-10-12 23:13
4075 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 pclevin 50 2014-10-14 17:40
4128 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 plutotw 76 2014-10-14 21:23
4051 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 45 2014-10-16 17:21
4022 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 pclevin 197 2014-10-16 17:56
4053 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 130 2014-10-16 18:17
4029 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 pclevin 5 2014-10-16 22:04
4020 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 777 2014-10-18 13:15
3996 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 pclevin 23 2014-10-18 18:01
4056 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 119 2014-10-18 21:07
3973 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 pclevin 257 2014-10-19 21:59
4005 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 330 2014-10-20 01:15
4035 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 269 2014-10-21 01:23
3963 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 plutotw 67 2014-10-23 12:04
3965 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 hunglong 150 2014-10-23 17:17
3981 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 plutotw 97 2014-10-23 19:42
2221 Re:JDBC以ODBC連結Access(*.mdb檔)資料讀取空白 anderson1203 584 2016-12-09 02:02
» JWorld@TW »  JDBC/SQL討論區 » 其他 Database

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8