-1

Java mysql データベース接続のサンプルと、ボタン クリック イベントでのレコードの挿入を取得できますか? これは私がjframeで使用するコードですが、エラーが発生して機能しません。

 private void btnlogActionPerformed(java.awt.event.ActionEvent evt) {                                       

     user=txtuser.getText();
      char[] pass=jPasswordField1.getPassword();
             String passString=new String(pass);
            try{                
                **Connection con =createConnection();**             


java.sql.PreparedStatement statement= con.prepareStatement ("INSERT INTO login(username,Password) VALUES ('" + user + "','" + passString + "')");

statement.setString(1,user);
    statement.setString(2,passString);
statement.execute();
            }
            catch(Exception e){
                JOptionPane.showMessageDialog(null,"Exception: "+ e.toString());
            }

public static void main(String args[]) {
 try {
            Class.forName("com.mysql.jdbc.Driver");
            String connectionUrl = "jdbc:mysql://localhost/Stock?"+
                                   "user=root&password=";
            Connection con = DriverManager.getConnection(connectionUrl);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,"SQL Exception: "+ e.toString());
        } catch (ClassNotFoundException cE) {
            JOptionPane.showMessageDialog(null,"Class Not Found Exception: "+ cE.toString());
        }
4

2 に答える 2

0

パラメータを宣言するときに使用する必要がparameter placeholder (?)あります。変数を連結しないでください。

String strQuery = "INSERT INTO login(username,Password) VALUES (?,?)";
java.sql.PreparedStatement statement = con.prepareStatement(strQuery);
statement.setString(1,user);
statement.setString(2,passString);

更新 1

private void btnlogActionPerformed(java.awt.event.ActionEvent evt) 
{                                       
    user=txtuser.getText();
    char[] pass=jPasswordField1.getPassword();
    String passString=new String(pass);
    try
    {                
        Connection con = createConnection();          
        String strQuery = "INSERT INTO login(username,Password) VALUES (?,?)";
        java.sql.PreparedStatement statement = con.prepareStatement(strQuery);
        statement.setString(1,user);
        statement.setString(2,passString);
        statement.executeUpdate();
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null,"Exception: "+ e.toString());
    }
}
于 2013-01-12T16:03:10.540 に答える
0

あなたのConnection変数はあなたのtry/catchブロックにスコープされています。宣言をブロックの外に移動し、次を使用する必要があります。

con = createConnection();

try/catchブロック自体の中に。

PreparedStatementプレースホルダー ( ) を使用?すると、正しい SQL 文字列が作成され、SQL インジェクション攻撃から保護されます。

PreparedStatement statement = 
   con.prepareStatement ("INSERT INTO login(username, Password) VALUES (?, ?)");

また、executeUpdate データベースの書き込み操作にも使用します。交換

statement.execute();

statement.executeUpdate();
于 2013-01-12T16:18:19.023 に答える