2017-09-18 3 views
0

私は、データベースへの接続を作成し、クエリINTO INSERTを実行しようとしていますが、コードが実行されるとき、私はエラーを取得:あなたが見ることができるようにcom.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'BLUE'.SQLクエリは、列名として値を見

を私のコードでは、 "BLUE"を列名の代わりに値として与えます。誰かが私が間違っていることを知っていますか? p.s. colorは列挙型であり、他のすべての値はdouble型です。

String query = "INSERT INTO [oval] " + 
       "(anchorX, anchorY, width, height, weight, color) VALUES " + 
       "(" + drawingItem.getAnchor().getX() + 
       ", " + drawingItem.getAnchor().getY() + 
       ", " + drawingItem.getWidth() + 
       ", " + drawingItem.getHeight() + 
       ", " + ((Oval) drawingItem).getWeight() + 
       ", " + drawingItem.getColor().toString() + ")"; 

initConnection(); 
Statement myStmt = con.createStatement(); 
rowsAffected = myStmt.executeUpdate(query); 
closeConnection(); 

EDITのANSWER:

String query = "INSERT INTO [oval] VALUES (?,?,?,?,?,?)"; 

initConnection(); 
PreparedStatement myPrepStmt = con.prepareStatement(query); 
myPrepStmt.setDouble(1, drawingItem.getAnchor().getX()); 
myPrepStmt.setDouble(2, drawingItem.getAnchor().getY()); 
myPrepStmt.setDouble(3, drawingItem.getWidth()); 
myPrepStmt.setDouble(4, drawingItem.getHeight()); 
myPrepStmt.setDouble(5, ((Oval)drawingItem).getWeight()); 
myPrepStmt.setString(6, drawingItem.getColor().toString()); 
rowsAffected = myPrepStmt.executeUpdate(); 
closeConnection(); 
+6

使用されるパラメータの代わりに、値を持つクエリ文字列をいじります。 –

答えて

3

示唆したように、SQLインジェクションを防ぐために、パラメータ化クエリを使用します。手元の問題に関しては、各文字列値に一重引用符を使用する必要があります。

例:

"('" + drawingItem.getAnchor().getX() + 
"', '" + 
+0

ありがとう!そのようなnoobieの間違いhihi(ちょうど初心者のプログラマー)のために申し訳ありません。私は他の人のために私の質問に正しいコードをアップロードしました。 – Svenmarim

1

正しい方法は次のようになります。

String query = "INSERT INTO [oval] " + 
       "(anchorX, anchorY, width, height, weight, color) VALUES " + 
       "(?, ?, ?, ?, ?, ?)"; 

initConnection(); 
int i = 1; 
Statement myStmt = con.prepareStatement(query); 
myStmt.setInt(i++, drawingItem.getAnchor().getX()); 
myStmt.setInt(i++, drawingItem.getAnchor().getY()); 
myStmt.setString(i++, drawingItem.getWidth()); 
myStmt.setString(i++, drawingItem.getHeight()); 
myStmt.setFloat(i++, ((Oval) drawingItem).getWeight()); 
myStmt.setString(i++, drawingItem.getColor().toString()); 
rowsAffected = myStmt.executeUpdate(); 
+1

'con.prepareStatement(query)'、そして 'myStmt.executeUpdate()'でなければなりません。 –

+0

訂正していただきありがとうございます。これをメモリから入力してください。 –

関連する問題