2016-11-16 16 views
0

更新表內的單個值與Java目前我有這樣的代碼:使用MySQL


 PreparedStatement prepCust = connection.prepareStatement("insert into Customer values (?, ?, ?, ?, ?, ?);"); 

     ResultSet results = connection.createStatement() 
       .executeQuery("SELECT phonenumber FROM customer WHERE phonenumber = " + cust.getPhoneNumber()); 
     results.next(); 
     try { 
      if (results.getString(1).equals(cust.getPhoneNumber())) { 
       System.out.println("User already exist in database, adding one to order count"); 
       results = connection.createStatement().executeQuery(
         "SELECT numberoforders FROM customer WHERE phonenumber = " + cust.getPhoneNumber()); 
       results.next(); 
       int updated = results.getInt(1) + 1; 
       System.out.println(updated); 
       results = connection.createStatement() 
         .executeQuery("SELECT * FROM customer WHERE phonenumber = " + cust.getPhoneNumber()); 
       results.next(); 
       prepCust.setString(1, results.getString(1)); 
       prepCust.setString(2, results.getString(2)); 
       prepCust.setString(3, results.getString(3)); 
       prepCust.setString(4, results.getString(4)); 
       prepCust.setInt(5, updated); 
       prepCust.setInt(6, results.getInt(6)); 
       prepCust.executeUpdate(); 
      } 
     } catch (SQLException sql) { 
      sql.printStackTrace(); 
      prepCust.setString(1, cust.getfName()); 
      prepCust.setString(2, cust.getlName()); 
      prepCust.setString(3, cust.getAddress()); 
      prepCust.setString(4, cust.getPhoneNumber()); 
      prepCust.setInt(5, 1); 
      prepCust.setInt(6, 0); 
      prepCust.executeUpdate(); 
     } 

而且它訪問表是:

create table customer(
    firstname varchar(50) NOT NULL, 
    lastname varchar(50) NOT NULL, 
    streetaddress varchar(150) NOT NULL, 
    phonenumber varchar(10) NOT NULL, 
    numberoforders int(11) default 1; 
    customer_id int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(customer_id,phonenumber) 
    UNIQUE KEY customer_id (customer_id) 

    ); 

我的問題是,當我嘗試使用prepCust.setInt(5,someInt);更新一個值,然後嘗試執行更新,我會得到一個異常,說我從不輸入任何用於prepCust.setString(1,無論)的任何內容;等等。對於用trycatch包圍代碼的想法是,如果代碼拋出異常,那麼這必定意味着該表不存在於表內,並創建一個包含所有輸入數據的新字段。如果代碼沒有拋出異常,這意味着電話號碼確實存在於表格內,並找到該電話號碼所在的行,並將其添加到客戶具有的訂單數量中。我現在用這個代碼的問題是,它會爲表添加一整列新信息,即使它具有相同的電話號碼和客戶ID,拋出一個異常告訴我,然後我堅持準確的值同樣的地方值不增加,我需要。我怎樣才能更新列中的單個值?無論如何要用準備好的聲明來做到這一點?

+1

請首先清理您的術語,字段,列,行......與他們混淆......這意味着什麼:「創建一個包含所有輸入數據的新字段」?它是一排嗎?等等......第二:你是否試圖用INSERT語句更新?第三:你的表不能有兩個具有相同customer_id和phonenumber的ROW(不是列)。不要試圖插入這樣的... – Vadim

+0

PS。在RDBMS中,關於TABLE結構只有兩個主要術語:COLUMN和ROW。有時候人們把COLUMN稱爲FIELD和ROW作爲RECORD,這是可以接受的...... – Vadim

+0

謝謝你的回覆,並且對於壞的術語感到抱歉,我對SQL很陌生。我想到了。我不得不使用準備好的語句中的SQL命令更新,並設置了numberoforders =? phonenumber =?然後將其設置爲使用setString和setInt mehtods。 – Varri

回答

0

問題是因爲當您要執行UPDATE語句時,您正在使用INSERT語句。由於該條目已存在,因此您希望更新存在於同一電話號碼中的那個值。當它不存在時,將您的prepCust插入語句放入您的catch塊中以創建新條目。

String phonenumber = cust.getPhoneNumber(); 
Statement s = connection.createStatement(); 
ResultSet results = s.executeQuery("SELECT phonenumber, numberoforders FROM customer WHERE phonenumber = " + phonenumber); 
results.next(); 
try { 
    if (results.getString(1).equals(phonenumber)) { 
     System.out.println("User already exist in database, adding one to order count"); 
     int updated = results.getInt(2) + 1; 
     System.out.println(updated); 

     PreparedStatement updateCust = connection.prepareStatement("UPDATE customer SET numberoforders = ? WHERE phonenumber = ?"); 
     updateCust.setInt(1, updated); 
     updateCust.setString(2, phonenumber); 
     updateCust.executeUpdate(); 
    } 
} catch (SQLException sql) { 
    sql.printStackTrace(); 
    try { 
     PreparedStatement prepCust = connection.prepareStatement("insert into Customer values (?, ?, ?, ?, ?, ?);"); 
     prepCust.setString(1, cust.getfName()); 
     prepCust.setString(2, cust.getlName()); 
     prepCust.setString(3, cust.getAddress()); 
     prepCust.setString(4, cust.getPhoneNumber()); 
     prepCust.setInt(5, 1); 
     prepCust.setInt(6, 0); 
     prepCust.executeUpdate(); 
    } catch (SQLException sql2) { 
     sql2.printStackTrace(); 
    } 
} 
+0

正是我所要做的。感謝您的答覆!我不知道我怎麼沒有馬上接受。 – Varri