私は間違いを見ることができないので、これに2番目の目が必要です.挿入が機能しておらず、理由がわかりません. これは宿題用です。該当するコードは、CustomerDAO クラス内にあります。これは、Stripes フレームワークを使用して Java で構築された Web アプリケーション用です。問題のあるコードは次のとおりです。
public void create(Customer customer) {
String sql = "insert into customer (`firstname`, `lastname`, `email`, " +
"`username`, `password`) values (?, ?, ?, ?, ?)";
try {
PreparedStatement sth = this.dbh.getCon().prepareStatement(sql);
sth.setString(1, customer.getFirstName());
sth.setString(2, customer.getLastName());
sth.setString(3, customer.getEmailAddress());
sth.setString(4, customer.getUserName());
sth.setString(5, customer.getPassword());
sth.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();;
} catch (NullPointerException ex) {
ex.printStackTrace();
} finally {
this.dbh.closeConnection();
}
}
私が言ったように、このメソッドは私のDAOにあります。このメソッドは、登録フォームのアクション Bean から呼び出されます。ここに私がテストしたものがあります:
顧客オブジェクトが null ではありません。顧客フィールドはフォームから値を取得しており、正しいです。DAO が null ではありません。データベースが接続されました。
アクション Bean で条件をテストし、条件が true の場合は null を返し、それ以外の場合は RedirectResolution を返すことで、上記の項目を確認しました。
変数を SQL にバインドする 5 行をコメント アウトし、SQL 内の変数を挿入したい実際のデータに置き換えたところ、レコードが挿入されました。そのため、問題は次の 5 行のどこかにあると私は考えています。
sth.setString(1, customer.getFirstName());
sth.setString(2, customer.getLastName());
sth.setString(3, customer.getEmailAddress());
sth.setString(4, customer.getUserName());
sth.setString(5, customer.getPassword());
アクション Bean でこの if ステートメントを使用すると、完全に空のページにリダイレクトされました。これにより、値がモデルのフィールドにバインドされていることがわかります。
if (this.customer.getFirstName().equals("Tony")) {
return null;
}
アクション Bean からの送信メソッドは次のとおりです。
public Resolution submit() {
this.customer = this.getCustomer();
this.customerDao = this.getCustomerDao();
this.customerDao.create(customer);
return new RedirectResolution(RegisterFormActionBean.class);
}
フィールド値のテストは の下に挿入されthis.customer = this.getCustomer();
ました。そのテストをすべてのフォーム フィールドで個別に実行したところ、常に空白のページに転送されました。これを実行すると、登録ページにリダイレクトされますが、レコードは挿入されません。ドキュメントをチェックして、setString()
メソッドが正しく、そのように見えることを確認しました。
私が見落としているのはおそらくばかげたことだと思いますが、ここで車輪を回転させているだけです。
実際の質問: 値を SQL にハードコーディングすると挿入が機能するのに、値をステートメントにバインドすると機能しないのはなぜですか。