2016-04-05 7 views
1

jdbcのテキストフィールドからmysql DBにデータを挿入するコードを記述しました。このコードKids変数でオプションのフィールド値をjdbcのmysqlに挿入します

String res ="INSERT INTO reservation(check_in_date,check_out_date,cus_id,room_no,Username,nights,adults,kids) VALUES ('"+Startdate+"','"+Lastdate+"','"+cusNo+"','"+Roomno+"','"+Username+"','"+Nights +"','"+Adults +"','"+Kids +"')"; 

stm=link.prepareStatement(res); 
stm.execute(); 

nullになることができると私は、データベースにnullにそのデフォルト値を設定しています。

しかし、GUIからデータを入力するときは、常にKidsの値を入力する必要があります。それ以外の場合は、テーブルにデータを挿入できません。 そのフィールドを使用する必要がない場合は、必ずKidsにゼロを入力する必要があります。 フィールドを使用する必要がない場合、入力なしでデータを挿入する方法はありますか?Kids

答えて

0

あなたは間違ってPreparedStatementを使用しています。値をクエリに連結するのではなく、代わりにパラメータプレースホルダを使用する必要があります。これはSQLインジェクションを防止し、通常はよりクリーンです。

値をnullに設定できます。

String res = "INSERT INTO reservation(check_in_date,check_out_date,cus_id,room_no,Username,nights,adults,kids)" 
     + " VALUES (?,?,?,?,?,?,?,?)"; 
try (PreparedStatement stm=link.prepareStatement(res)) { 
    stmt.setDate(1, startDate); 
    // ... other variables 

    // Option 1, assuming kids is an object (eg Integer) 
    stm.setObject(7, kids); 

    // Option 2, kids is int and other condition used to determine if null, 
    // explicitly set null or set value: 
    if (kidsIsNull) { 
     stm.setNull(7, Types.INTEGER); 
    } else { 
     stm.setInt(7, kids); 
    } 
    stm.executeUpdate(); 
} 
1

あなたが文を準備し使用しているとして、あなたはこのようにPreparedStatement何かのためのsetNullメソッドを使用するためのロジックを追加することができます。

if(kids == null){ stm.setNull(#ParamerterNo ,java.sql.Types.INTEGER); }else{ stm.setInt(#ParamerterNo ,kids); }

+0

#ParamerterNoとは何ですか? –

+1

#ParameterNoをprepared statementのkidsのパラメータnoに置き換えます。 – Vijay

関連する問題