0

ユーザーが提供する姓名を取り、それらをMySqlデータベースに入力する簡単なプログラムがあります。firstそれらと呼ばれる 2 つの変数は、last単純なコマンド ライン プロンプトになるため、最初にスキャナ、最後にスキャナを指定します。次に、最初と最後を取り、MySql ステートメントに追加します。これが私が持っているコードですが、何らかの理由で正しい構文を取得できません。この例では、ステートメントを使用していますが、準備済みステートメントを使用できますし、使用するつもりです。現実の世界では、準備されたステートメントを使用しますが、このプロジェクトではステートメントでも機能します。

これは、1 つのスキャナー行を含む私のコードです。現在、コードは 2 つの定数値 Cathy と Jones で動作します。それらを変数にしたい。

class AddStudent 
{ 

    public static void main (String[] args) 
    { 
        try
        { 

            Connection conn = DriverManager.getConnection(url,user,pass); 
            Statement st = conn.createStatement(); 
            Scanner first = new Scanner(System.in);
            System.out.println(first.nextLine());


            String SQL = "INSERT INTO test VALUES ('Cathy', 'Jones')";
            st.executeUpdate(SQL);



              conn.close(); 

        } catch (Exception e) { 
            System.err.println("Got an exception! "); 
            System.err.println(e.getMessage()); 
        } 

    }

    private static String url = "jdbc:mysql://localhost:3306/registrar";
4

3 に答える 3

2

どうぞ、しかし、一緒に行くことはお勧めしませんStatement

Scanner first = new Scanner(System.in);
String f = first.nextLine();

Scanner last = new Scanner(System.in);
String l = last.nextLine();    

String SQL = "INSERT INTO test VALUES ('" + f + "','" + l + "')";
st.executeUpdate(SQL);

このように推奨されます:

PreparedStatement ps = conn.prepareStatement("INSERT INTO test VALUES (?, ?)");
ps.setString(1, f);
ps.setString(2, l);
ps.executeUpdate();

Java リファレンス

于 2012-08-22T18:23:29.127 に答える
1

非常に多くの潜在的なエラー。

  1. }クラスを閉じるため のクロージングがありません。
  2. データベースが実行されていると確信していますか?
  3. テーブルを作成しましたtestか?

4. スキャナーがおかしい。

 Scanner scanner = new Scanner(System.in);
 String first = scanner.nextLine();
 String last = scanner.nextLine();

5.

String SQL = "INSERT INTO test VALUES ('Cathy', 'Jones')";
st.executeUpdate(SQL);

する必要があります

String SQL = String.format("INSERT INTO test VALUES ('%s', '%s')", first, last);
st.executeUpdate(SQL);
于 2012-08-22T18:17:54.200 に答える
0

それを行う最良の方法は、次の方法です。これは以下のコードであり、目的を達成し、ユーザーによる悪意のある入力または予期しない入力によって引き起こされる SQL インジェクションやその他の問題を防ぎます。

String firstName = "Cathy";
String lastName = "Jones";
String query= "INSERT INTO test VALUES (?,?)";
PreparedStatement stmt = mysqlConnection.prepareStatement(query);
stmt.setString(1,firstName);
stmt.setString(2,lastName);
stmt.executeUpdate(SQL);
于 2012-08-22T18:31:08.000 に答える