如何用JAVA寫出正確的資料庫資料查詢功能? |
尚未結案
|
過路的
一般會員 發表:11 回覆:17 積分:5 註冊:2004-04-01 發送簡訊給我 |
以下是我的資料查詢功能 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 發送簡訊給我 |
由你的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 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
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 發送簡訊給我 |
感謝版主大大和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 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
引言: 感謝版主大大和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的類別有以下的方式: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大大的幫忙。 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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |