全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4032
推到 Plurk!
推到 Facebook!

如何用JAVA寫出正確的資料庫資料查詢功能?

尚未結案
過路的
一般會員


發表:11
回覆:17
積分:5
註冊:2004-04-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-28 08:12:08 IP:211.76.xxx.xxx 未訂閱
以下是我的資料查詢功能
sql="SELECT * FROM `card` WHERE 1 AND `ID` LIKE '1' AND `NAME` LIKE '林慶華'";
i=st.executeUpdate(sql);
rs=st.executeQuery("SELECT * FROM `card`");
getdata();//將rs取得的資料顯示出來
錯誤訊息:java.sql.SQLException: Before start of result set
問題是無法將查到的資料放進rs裡面,請問該用何種寫法解決?(推測可能是我設定的rs=st.executeQuery("SELECT * FROM `card`")或i=st.executeUpdate(sql)寫的不對吧,因為第一行的SQL語法我有用 phpMyAdmin 跑過,確實可以顯示出搜尋結果) PS:這應該是目前的最後一個問題了,之前問題多虧版主大大的幫忙,在此再說聲謝謝!
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-28 08:39:53 IP:61.56.xxx.xxx 未訂閱
由你的executeUpdate來想.你的第一個sql是要插入data吧? 所以,你的sql應該是: sql=insert into card (id,name) values ('1','林慶華'); st.executeUpdate(sql); //資料插入後:
ResultSet rs=st.executeQuery("SELECT * FROM card");
while(rs.next()){
 String name= rs.getString(2);//注意,resultset欄位是1base的
 ...
 ....
}
先去學一下SQL92吧.基本的insert/update/select是任一家database都會有的
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-28 18:37:12 IP:211.76.xxx.xxx 未訂閱
引言: [code]錯誤訊息:java.sql.SQLException: Before start of result set
ResultSet 要取出(第一筆)資料前,一定要先做一次 resultSet.next() ,因為 default 指標是指向第一筆之前的 null 位址 提供參考,是否是這個關係。 JackTasy
------
JackTasy
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-28 23:45:11 IP:61.56.xxx.xxx 未訂閱
Jack Tasy: 根據API文件說法,為什麼要有resulset.next,是預設指標是指在befor of resulset: ... ... Moves the cursor down one row from its current position. A ResultSet cursor is initially positioned before the first row; the first call to the method next makes the first row the current row; the second call makes the second row the current row, and so on. .... ... 參考: http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html#next()
過路的
一般會員


發表:11
回覆:17
積分:5
註冊:2004-04-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-29 11:04:54 IP:211.76.xxx.xxx 未訂閱
感謝版主大大和JackTasy大大的幫忙,給我了靈感,後來找到解答!    原本下面的程式是我從我的“編輯/修改”功能取出,因為我覺得“修改”這個功能需要給資料庫搜尋條件,讓資料庫找到該筆資料後能送回到程式以供修改,所以可以利用一部分的程式達成查詢資料的目的,但事實卻不然。
sql="SELECT * FROM `card` WHERE 1 AND `ID` LIKE '1' AND `NAME` LIKE '林慶華'";
i=st.executeUpdate(sql);//多餘的一行,要修改該筆資料才用到的程式碼,我居然也複製進來,真是....笨啊!
rs=st.executeQuery("SELECT * FROM `card`");//這段的SQL是要找出所有資料,所以跟我的目的根本不相同,我當初根本就不知道!多虧版大的說明,所以我去找了有關SQL92的資料才知道。
getdata();
其實上面2行可以拿掉,換成下面這一行就可以查詢了。
queryDataSet1.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(database1, sql, null,true, Load.ALL));
因為這問題是版主大大給我解決的,所以將分數給版主大大! 謝謝版主大大和JackTasy大大的幫忙。
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-29 16:57:00 IP:211.76.xxx.xxx 未訂閱
沒幫到什麼忙,看來是我誤會了題意了...
------
JackTasy
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-29 17:35:49 IP:61.56.xxx.xxx 未訂閱
引言: 感謝版主大大和JackTasy大大的幫忙,給我了靈感,後來找到解答! 原本下面的程式是我從我的“編輯/修改”功能取出,因為我覺得“修改”這個功能需要給資料庫搜尋條件,讓資料庫找到該筆資料後能送回到程式以供修改,所以可以利用一部分的程式達成查詢資料的目的,但事實卻不然。
sql="SELECT * FROM `card` WHERE 1 AND `ID` LIKE '1' AND `NAME` LIKE '林慶華'";
i=st.executeUpdate(sql);//多餘的一行,要修改該筆資料才用到的程式碼,我居然也複製進來,真是....笨啊!
rs=st.executeQuery("SELECT * FROM `card`");//這段的SQL是要找出所有資料,所以跟我的目的根本不相同,我當初根本就不知道!多虧版大的說明,所以我去找了有關SQL92的資料才知道。
getdata();
其實上面2行可以拿掉,換成下面這一行就可以查詢了。
queryDataSet1.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(database1, sql, null,true, Load.ALL));
因為這問題是版主大大給我解決的,所以將分數給版主大大! 謝謝版主大大和JackTasy大大的幫忙。
Dear 過路的: 敝人真的是不希望你用dbswing系列的東西. 之前我已經強調n次了,現在再強調一次: 一是可能的版權問題.如果貴公司沒有買jbuilder的話.可能要charge licensee 二是用別人的元件的壞處就是這樣.什麼錯誤不見的你都可以應付,如果是你要改寫他的code的話,沒有source code之下,太不方便.(要買他的source code嗎?) 三是如果基於安全性要放在internet上存取db的話,不太安全. 實務上都是會經過一層中間層(business logic tier).以防止不當對db的操作及資源的控制(如果你有一百個client的話,你的connection要開幾個?) 所以.由衷地建議你要先學會SQL,學會基本的resulset的操作,就算你不用swing,用jsp寫也是用到這東西的.不用再import borland這一系列的東西. 就算是用swing,可以自己再去包,例如把你的資料放入jcombobox的類別有以下的方式:
import java.sql.*;
import javax.swing.*;
import java.util.Vector
 ...
 ...
 Vector vct=new Vector();
 ...
 ....你的resuletset 產生方式.....
 ....
 while(rs.next()){
    vct.add(rs.getString(2));
 }
  JComboBox jcbx=new JComboBox(vct);
  ...
  ...
  ...
   jpanel1.add(jcbx,null);  //放入你的jpanel中
 } 
當然上例指的是直接操作database,而實務中,Vector是會存放由server傳遞來的序列化資料.不太可能是resultset(因為組成序列化資料之後,conection就會關閉,或是歸還到connection pool了) 相信經過這一系列的磨練,有了通盤的概念,就會應用自如了. (老句話,先把thinking in java這類的馬步書看一遍吧,不然,要是你遇到jsp的案子,要怎麼辦?) Dear JackTasy: 有參與,就有收獲,別氣餒,加油 畢竟web base的東西你比我行太多了. 發表人 - neoart 於 2004/08/29 17:40:20
系統時間:2024-11-21 23:51:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!