2016-01-13 47 views
0

我有一個方法,它應該從我的預設數據庫中獲取數據。該表已經在其中設置了信息。但我無法從我的Java程序中的表中檢索數據。剩下的代碼像setter和getters一樣正常工作。 我有一個寫入數據庫中的特定行的其他方法。這工作正常,所以我知道eclipse和我的數據庫之間有連接。在java中的mysql查詢不在數據庫中工作

我有什麼:

public void readCard(int id){ 

    try{  
    java.sql.Statement statement=con.connection.createStatement(); 
    this.id=id; 

    String gget; 
    gget= "SELECT DISTINCT * FROM addresscard WHERE (id = \""+ 
    this.id +"\");"; 

    ResultSet rs= statement.executeQuery(gget); 

    rs.next(); 

    this.id= rs.getInt(1); 
    this.name= rs.getString(2); 
    this.adress= rs.getString(3); 
    this.postcode= rs.getString(4); 
    this.place= rs.getString(5); 
    this.telephone= rs.getString(6); 

    System.out.println(this.id); 

    }catch(Exception e){ 
    System.out.println(" did not read anything"); 
     } 

我把 字符串研技總祕書處= 「SELECT DISTINCT * FROM adreskaart WHERE(ID = \」 「+ this.id +」 \ 「);」;
in mysql as: SELECT DISTINCT * FROM adreskaart WHERE id = 2;

與id 2對應的行被選中。所以我的數據庫工作正常。 我的猜測是我在eclipse中的sql代碼是錯誤的。 任何人都可以看到爲什麼我無法從數據庫中讀取數據。

非常感謝

編輯在我changeCard()我應該能夠在我的測試類像調整數據: Connectie CON =新Connectie(); AddressCard ac = new AddressCard();

ak.readCard(2); 
ak.setName("prof dr ir P chimp"); 
ak.changeCard(); 

Vector tabel; 

    tabel=ak.readAllCards(); 

當然所有的gui好東西在這裏。

public void changeCard(){ 

    try{ 
    java.sql.Statement statement= con.connection.createStatement(); 

String sset; 
sset= "UPDATE adresKaart " + " SET naam = '" + this.naam + "', "  + "adres='" + this.adres + "'," + 
     " postcode='" + this.postcode + "'," + "plaats='" +  this.plaats + "'," + "telefoon='" + this.telefoon 
      + "' " + " WHERE adreskaart.id = " + this.id; 

     statement.executeUpdate(sset);  

    }catch(Exception e){ 
     System.out.println(" did not change anything"); 
     e.printStackTrace(); 
    } 
    } 

似乎我有SQL錯誤,但似乎無法弄清楚。 在此先感謝。

回答

0

我覺得你的SLQ得到arry.So的結果,你應該viste結果:

所有的
while(rs.next()){ 
    this.id= rs.getInt(1); 
    this.name= rs.getString(2); 
    this.adress= rs.getString(3); 
    this.postcode= rs.getString(4); 
    this.place= rs.getString(5); 
    this.telephone= rs.getString(6); 
} 
+0

這似乎給出了和以前相同的結果。我認爲我改變數據的方法是錯誤的。 –

+0

rs.next()將強制編譯器轉到下一個查詢來執行並檢索給定的rs.getInt(1),r.getString(2)等等。對?那麼爲什麼要添加while()? –

1

首先,確保你的表名。是地址卡還是地址卡?

正如你寫,你的查詢應該是

SELECT DISTINCT * FROM addresscard WHERE id = 2 

但是,現在它是(額外的引號)

SELECT DISTINCT * FROM addresscard WHERE id = "2" 

如果存儲ID作爲一個整數,你不應該把這些報價。如果id存儲爲varchar,那麼你應該。而且,不需要在查詢的末尾添加分號。嘗試下面。

gget= "SELECT DISTINCT * FROM addresscard WHERE id = " + this.id; 
+0

感謝您的回覆, –

+0

感謝您的回覆,但似乎認爲字符串文字沒有正確關閉,而且必須添加雙引號。我以爲你必須用分號關閉才能關閉字符串並結束查詢?你能解釋一下你的意思嗎?我將int id作爲字符串進行比較?謝謝 。我仍然是一個JAVA noobie –

+0

編輯我的答案 –

相關問題