2017-03-18 10 views
0

の数と同じではありませんjava.sql.SQLSyntaxErrorException:割り当てられた値の数は、私は、データベースにデータを挿入するために、私のフロントエンドからURLを使用してJava関数を呼んでいる、指定または暗黙の列

これは私のURLです:

http://localhost:49779/BackEnd/mobile/rideshare/addride/1590105&toyota&4&Himalaya&10&good&12-04-2017 

これは、Javaメソッドである:

@Path("addride/{student_id}&{vehicle}&{seats}&{destination}&{price}&{description}&{datetime}") 
@GET 

public void addRide(@PathParam ("student_id") int S_id, @PathParam ("vehicle") String vehicle, @PathParam("seats") int seats, 
     @PathParam("destination") String destination, @PathParam("price") int price, @PathParam("description") String description,@PathParam("datetime") String datetime) throws ClassNotFoundException,SQLException{ 
    Connection myCon = null; 
    Class.forName("oracle.jdbc.OracleDriver"); 
    myCon=DriverManager.getConnection("jdbc:derby://localhost:1527/ride_share","yadhu","yadhu"); 
    Statement st=myCon.createStatement(); 

    st.executeUpdate("INSERT INTO RIDES (STUDENT_ID,VEHICLE,SEATS,DESTINATION,PRICE,DESCRIPTION,DATETIME) VALUES " 
      + "("+S_id+",'"+vehicle+"',"+seats+",'"+destination+"',"+price+",'"+description+"','"+datetime+"')"); 

} 

テーブルの乗り物は、自動インクリメントプロパティで作られている列のRIDES_IDを、持っています。

これは私がテーブルを作成する方法である:私は暗黙のうちにそれを行う際に

CREATE TABLE RIDES (RIDE_ID INTEGER GENERATED ALWAYS AS IDENTITY (start with 1000), STUDENT_ID INTEGER, VEHICLE VARCHAR(200), SEATS INTEGER, DESTINATION VARCHAR(200), PRICE INTEGER, DESCRIPTION VARCHAR(200), DATETIME VARCHAR(50)); 

挿入は動作しますが、私はそれがエラーを示すのURLを使用してメソッドを呼び出すとき。私は間違いが私を助けてください見つけることができませんでした。

+1

OracleまたはDerbyですか?あなたはOracleドライブを使用しているようですが、URLはDerbyデータベースを参照していますか?また、「暗黙のうちに」とはどういう意味ですか? –

+2

クエリに値を連結する代わりに、適切なパラメータを使用する必要があります。 [Bobby Tables:SQLインジェクションを防ぐガイド](http://bobby-tables.com/) – SqlZim

+0

@dsp_user '暗黙のうちに':netbeans内 –

答えて

0

エラーは、追加しようとしている列の数が、宣言された列の数と一致しないことを意味します。 IE。 IE。 table(col1、col2)の値(val1、val2、val3)に挿入します。

これは、URLからパラメータを読み取るときにコードエラーが原因である可能性があります。 これは、あなたが渡している値の1つに昏睡 "、"が含まれている場合もあります。

第1レベルのデバッグ:
実行前にステートメントにSYSTEM.OUT.PRINTLNを実行し、コンソールで結果をチェックしてエラーを特定します。

また、StatementではなくPreparedStatementを使用してください。これにより、コードにSQLインジェクションが発生せず、多くのエラーを回避できます。

+0

カラムの数はクエリとデータベースの両方で同じように見えます。 –

+0

urパラメータの1つの値に昏睡が含まれている場合は、2とみなされます。まず最初に提案を試しましたか? –

関連する問題