2016-11-16 11 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で囲むことについての私の考えは、コードが例外をスローした場合、そのフィールドがテーブル内に存在しないことと、入力されたすべてのデータを含む新しいフィールドを作成する必要があることです。コードで例外がスローされない場合は、テーブル内に電話番号が存在し、電話番号がどの行にあるかを調べ、顧客の注文数に1を加算します。このコードで私の問題は、同じ電話番号と顧客IDを持っていても、テーブルに情報の新しい列を追加し、それを伝える例外をスローしてから、正確な値私が必要とする値が増えない場所と同じです。列内の単一の値を更新するにはどうすればよいですか?準備された声明でそれを行うためにとにかくありますか?

+1

まず、専門用語、フィールド、列、行を掃除してください。あなたはそれらを混乱させました。つまり、「入力されたすべてのデータを含む新しいフィールドを作成しますか?それは行についてですか?など... 2番目:INSERTステートメントで更新しようとしていますか?第3に、あなたのテーブルは、同じcustomer_idとphonenumberを持つ2つのROW(列ではない)を持つことはできません。そのようなものを挿入しようとしないでください... – Vadim

+0

PS。 RDBMSでは、TABLE構造に関する2つの主要な用語があります:列と行。いつか人々はCOLUMNをFIELDとROWとしてRECORDと呼びますが、それは受け入れられます... – Vadim

+0

返事をありがとう、悪い用語については申し訳ありませんが、私はSQLにはとても慣れています。私はそれを考え出した。私は準備された文の中でSQLコマンドの更新を使用しなければならず、numberoforders =を設定しましたか? phonenumber =? setStringとsetIntメソッドを使用してそれらを設定します。 – Varri

答えて

0

UPDATEステートメントを実行するときにINSERTステートメントを使用しているため、この問題が発生します。エントリがすでに存在するため、同じ電話番号の既存の値を更新する必要があります。それが存在しないときは、あなたのprepCustの挿入文をキャッチブロックに入れて新しいエントリを作成します。

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