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

請問一個JAVA控制資料庫的語法

尚未結案
過路的
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-25 14:01:56 IP:211.76.xxx.xxx 未訂閱
請問一下下面的語法是否正確: --------------------------------------------------------------------- sql="INSERT carddata01.card VALUES(" jname.getText() ",'" jcompany.getText() "')"; //將資料從文字方塊讀進來 int i=st.executeUpdate(sql); //下達SQL語法新增資料 rs=st.executeQuery("SELECT * FROM `card`"); //重新取得ResoultSet結果 rs.last(); //將資料筆數移至新增的資料中 --------------------------------------------------------------------- 因為我現在正在做一個可以新增一筆資料到資料庫的功能,但是我從書上看到的語法(上面的)照著操作,卻無法存進資料庫! 上面的注解是我照書裡面打的,但資料庫跟欄位是我自己設定的(carddata01是我的資料庫,card是我的資料表,jname、jcompany是我設定的文字方塊),請問能否有辦法解決?謝謝!
neoart
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-25 14:29:23 IP:61.56.xxx.xxx 未訂閱
請問你的code有發出什麼例外的訊息嗎?
try{
 String sql=....
 ...
  ....你的code....
 ...
}catch(Exception exp){
  exp.printStackTrace();
}
看一下有沒有什麼例外被丟出來.這樣比較好debug 又.insert的語法我個人是比較習慣寫成 insert tablename (field1,field2....) values (value1,vaule2....) 比較好吧 第二個可能的因素是...你的connection是沒有autoCommit的功能. 可否說明一下說你的database是哪一家的,driver是哪一版? 以便測試.
過路的
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-25 18:46:59 IP:211.76.xxx.xxx 未訂閱
例外的訊息沒有遇到(應該說我不知道大大所指的例外訊息是在哪邊顯示),而我用的資料庫是mysql-5.0.0a-alpha,DRIVER是mysql-connector-java-3.0.11-stable-bin.jar insert tablename (field1,field2....) values (value1,vaule2....) 這個寫法要怎麼套用啊?我試試看寫在下面,煩請大大指正! insert card (不知道填什麼) values (jname.getText(),jcompany.getText()); -------------------------------------------------------------------- 下面是我之前寫的新增功能,不知道貼出來有沒有用處: public void savedata(){ try{ if(jcreate.getText().equals("取消")){ sql="INSERT carddata01.card VALUES(" jname.getText() ",'" jegname.getText() "','" jjob.getText() "','" jcellphone.getText() "','" jemail.getText() "','" jcaddress.getText() "','" jcfxphone.getText() "','" jcweb.getText() "','" jcphone.getText() "','" jps.getText() "','" jcompany.getText() "')"; int i=st.executeUpdate(sql); rs=st.executeQuery("SELECT * FROM `card`"); rs.last(); jfirst.setEnabled(true); jlast.setEnabled(true); jprevious.setEnabled(true); jnext.setEnabled(true); jedit.setEnabled(true); jdelete.setEnabled(true); jsearch.setEnabled(true); jexit.setEnabled(true); jcreate.setText("新增"); } else{ JOptionPane.showMessageDialog(null,"錯誤的操作!","錯誤!",JOptionPane.INFORMATION_MESSAGE); } } catch(Exception e){} }
neoart
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-25 19:24:47 IP:61.56.xxx.xxx 未訂閱
不是說了嘛
try{
   ...
   ....
    ....
}catch(Exception exp){
  exp.printStackTrace();//<----在console中顯示錯誤的堆疊
}
另外,insert 的語法是 insert 表格名稱 (欄位1,欄位2,欄位3....) values (要插入欄位1的值,要插入欄位2的值,要插入欄位3的值....) 而select * from 某表格的話,不用加單引號,除非是where條件 如 select * from members where id='0101034' 對了, 注意排縮,以便後人查閱你的code 用[code ] ...你的程式碼...[/code ] ("e"與"]"之間是沒有空白的,如今為了顯示才這樣打的) mysql的connection印象中是autocommit is true的. 請先把excpetion.printStackTrace加上去. exception太重要了.就跟身上的病痛一樣.有事.光是吃只痛藥卻不去查出痛因(exception有catch卻不處置),那遲早代誌會很大條哦. 發表人 - neoart 於 2004/08/25 19:29:03
過路的
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-26 09:34:49 IP:211.76.xxx.xxx 未訂閱
public void savedata(){
try{
if(jcreate.getText().equals("取消")){
sql=INSERT card ( ID , NAME , ENGLISH NAME , JOB , TEL , CELL PHONE , MAIL , COMPANY NAME , COMPANY ADDRESS 1 , COMPANY ADDRESS 2 , COMPANY FAX TEL , COMPANY TEL 1 , COMPANY TEL 2 , COMPANY TEL 3 , COMPANY WEB , PICTURE , TEXT )VALUES (jnewid,jname.getText(),  jegname.getText(), jjob.getText(),, jcellphone.getText(), jemail.getText(),jcompany.getText(), jcaddress.getText(),, jcfxphone.getText(),jcphone.getText(),,, jcweb.getText(),jpicture.getText(), jps.getText());
        int i=st.executeUpdate(sql);
        rs=st.executeQuery("SELECT * FROM `card`");
        rs.last();
        jfirst.setEnabled(true);
        jlast.setEnabled(true);
        jprevious.setEnabled(true);
        jnext.setEnabled(true);
        jedit.setEnabled(true);
        jdelete.setEnabled(true);
        jsearch.setEnabled(true);
        jexit.setEnabled(true);
        jcreate.setText("新增");
      }
      else{
JOptionPane.showMessageDialog(null,"錯誤的操作!","錯誤!",JOptionPane.INFORMATION_MESSAGE);
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
  }
--------------------------------------------------------------------- 我依照版大的建議,加入e.printStackTrace()後,的確有訊息出來,大意是說我的SQL認定之前的語法是錯誤的,我將原訊息貼上
 java.sql.SQLException: Syntax error or access violation,  message from server: "You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near ''','','','','','','','','','')' at line 1"
所以我將程式改成版大建議的格式,不過出現蠻奇怪的錯誤訊息,
";"expected at line 166[166:20]
sql=INSERT card...  (訊息指的位置就是我的資料表)
結果我去找一下,他居然是指我的這個資料表前面要加入分號,這樣的語法我想應該是不可能有的,但是我這段程式的前後句結尾都有加;阿,真是太奇怪了,在此感謝版大的幫忙!
neoart
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-26 09:49:50 IP:61.64.xxx.xxx 未訂閱
values (jnewid,jname.getText(),  jegname.getText(), jjob.getText(),, jcellphone.getText(), jemail.getText(),jcompany.getText(), jcaddress.getText(),, jcfxphone.getText(),jcphone.getText(),,, jcweb.getText(),jpicture.getText(), jps.getText());
改要成
values ('" jnewid,jname.getText() "','"   jegname.getText() "','"  jjob.getText() "','" null "','"  jcellphone.getText() "','"  jemail.getText() "','" jcompany.getText() "','"  jcaddress.getText() "',null ,'"  jcfxphone.getText() "','" jcphone.getText() "','null,null ",'"  jcweb.getText() "','" jpicture.getText() "','"  jps.getText() "');
建議你用mysql admin console來先試行你的sql是不是對的 畢竟初學者要一次下對sql是不太可能的. 先看一下sql的基本語法吧(不管MS SQL或是 Oracle都是要符合SQL92的標準,java的跨db原則就是基於"標準化/規格化"的精神,才得以發揮)
系統時間:2024-04-27 17:17:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!