[ad_1]
あるテーブルからプライマリ自動インクリメント キーを取得し、これを MySQL コネクタと JDBC を使用して別のテーブルに保存しようとしています。 それは私にこのエラーを与えていますが –
「statement.executeupdate() は、結果セットを生成するステートメントを発行できません。」
整数変数の格納に関係していると思いますが、よくわかりません。
public void insertIntoWorkoutLogs(String field_setNumber, String field_repNumber, String field_weightAmount) { try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/workout","root",""); Statement statement =connection.createStatement(); String insert ="INSERT INTO `workout`.`workoutlogs`" + " (`SetNumber`, `RepNumber` , `WeightAmount`)" + "VALUES('" +field_setNumber+"','"+field_repNumber+"','"+field_weightAmount+"')"; statement.executeUpdate(insert); int workoutID = insertQueryGetId("SELECT workoutID FROM workout"); String insert2 ="INSERT INTO `workout`.`workoutlogs`" + " (`WorkoutID`)" + "VALUES('" +workoutID+"')"; statement.executeUpdate(insert2); connection.close(); }catch(Exception e) { System.out.println(e);} } public int insertQueryGetId(String query) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/workout","root",""); Statement statement =connection.createStatement(); int workoutID=0; int result=-1; try { workoutID = statement.executeUpdate(query, Statement.RETURN_GENERATED_KEYS); ResultSet rs = statement.getGeneratedKeys(); if (rs.next()){ result=rs.getInt(1); } rs.close(); statement.close(); } catch (Exception e) { e.printStackTrace(); } return result; }
私が試したこと:
これにはステートメントを使用してみましたが、機能させるにはステートメントを準備する必要があるかもしれないと考えていますが、これについてはよくわかりませんので、ガイダンスが必要です。
解決策 1
見積もり:C#insertQueryGetId("SELECT workoutID FROM workout") ... workoutID = statement.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
あなたは SELECT
へのクエリ executeUpdate
方法。 このエラーは、これがサポートされていないことを明確に示しています。
通り ドキュメント[^]、実際に渡す必要があります INSERT
このメソッドへのステートメントで、 RETURN_GENERATED_KEYS
オプションを選択してから、返されたキーを読み取ります。 ドキュメントにこれを行う方法の例があります。
しかし、もっと大きな問題があります: あなたのコードはほぼ確実に脆弱です。 SQL インジェクション[^]. 一度もない 文字列連結/補間を使用して SQL クエリを作成します。 いつも パラメータ化されたクエリを使用します。
SQL インジェクションについて知りたいことすべて (ただし、質問するのをためらっていました) | トロイ・ハント[^]
専門用語なしで SQL インジェクションを説明するにはどうすればよいですか? | | 情報セキュリティ スタック交換[^]
クエリのパラメーター化のチート シート | OWASP[^]
[ad_2]
コメント