2012-04-11 11 views
0

フォームから値を挿入中にエラーメッセージが表示されます。 エラーはです。カラムカウントはraw 1の値カウントと一致しません1。 私の5番目の文字列の値は、の日付というデータ型でsqlに格納する必要があります。mysqlの文字列型(java)と日付データ型を変換するには?

String s1=this.txtUsername.getText(); 
String s2=this.txtPassword.getText(); 
String s3=this.txtName.getText(); 
String s4=this.txtAddress.getText(); 
String s5=this.txtContractEndDetails.getText(); 


     connection getcon = new connection(); 
     Connection conn; 


    try{ 
     conn=getcon.creatConnection(); 
     Statement stmt=conn.createStatement(); 

     stmt.executeUpdate("insert into TravelGuide(username,password,name,address,contract_end_date)values ('"+s1+"','"+s2+"','"+s3+"','"+s4+"'+'"+s5+"')"); 



     } 
    catch(Exception ex){ 
     JOptionPane.showMessageDialog(PanelTG, ex.getMessage(),"Error Occured",2); 
    } 

これは、SQLクエリの関連テーブルです。

preparedStatement("insert into TravelGuide (username,password,name,address,contract_end_date) values (?, ?, ?, ?, ?)"); 

についてImが混乱し

を編集し

create table TravelGuide(
    username char(20), 
    password char(20), 
    name varchar(100), 
    address varchar(150), 
    contract_end_date date, 
    constraint TravelGuide_PK primary key(username) 
); 

uは、さらに、これを説明してもらえます。..

は、この権利ですか?内部**マークはエラーに表現の違法なスタートを与えているとシンボルを見つけることができませんコード..私を助けてください.. tryインサイド

try { 
    conn=getcon.creatConnection(); 

    **String sql="insert into TravelGuide("+"username,"+"password,,"+,"name,"+"address,"+"contract_end_date)"+"values(?,?,?,?,?)";** 
    PreparedStatement stmt = conn.**preparedStatement**(sql); 
    java.sql.Date dtValue = java.sql.Date.valueOf(s5); 

    stmt.setString(1, s1); 
    stmt.setString(2, s2); 
    stmt.setString(3, s3); 
    stmt.setString(4, s4); 
    stmt.setDate(5, dtValue); 
    stmt.executeUpdate();     
} 
+2

、私はされるべきだと思います!あなたは自分自身をSQLインジェクション攻撃にさらしています。 'PreparedStatement'とバインドパラメータを使用します。 – QuantumMechanic

+2

PreparedStatementsと変数をバインドして、次のようなことをする必要があります。http://stackoverflow.com/questions/370852/java-creating-a-date-object-from-a-string-and-inserting-into -mysql – Thilo

+1

私の名前は[Bobby Tables](http://xkcd.com/327/)です。どこのシステムにログインできますか? – Jesper

答えて

4

は、代わりに次の操作を行います。

conn = getconn.creatConnection(); 
PreparedStatement stmt = conn.prepareStatement("insert into TravelGuide (username,password,name,address,contract_end_date) values (?, ?, ?, ?, ?)"); 

java.sql.Date date = someFunctionToConvertYourDateStringToADate(s5); 

stmt.setString(1, s1); 
stmt.setString(2, s2); 
stmt.setString(3, s3); 
stmt.setString(4, s4); 
stmt.setDate(5, date); 
stmt.executeUpdate(); 

[and so on] 

をそのようにあなたはSQLインジェクション攻撃から保護されており、特定のデータベースがdate列に必要な形式に文字列をマッサージする方法について心配する必要はありません。 java.sql.Dateオブジェクトを指定すると、JDBCドライバがそれを処理します。

+0

+1。バリエーションは、日付を文字列として渡し、MySQLに、おそらくto_date関数を使ってそれを把握させることです。 – Thilo

+0

Imビットは、PreparedStatement( "ユーザー名、パスワード、名前、住所、契約日)の値(?、?、?、?、?あなたはこれをさらに説明することができます.. Btw私はこのように変換を変更しました java.sql.Date dtValue = java.sql.Date.valueOf(s5); – Precious

+0

申し訳ありません。私の最後にタイプミス。それは 'conn.preparedStatement'ではなく' conn.prepareStatement'です。 – QuantumMechanic

0
stmt.executeUpdate("insert into TravelGuide(username,password,name,address,contract_end_date)values ('"+s1+"','"+s2+"','"+s3+"','"+s4+"'**+**'"+s5+"')"); 

なぜ+、私は動的SQLを使用しないでください

関連する問題