フロントエンド -> サーブレット -> データベースで構成される小さな 3 層プログラムを作成しました。
フロントエンド フォームに詳細を入力します。これらはサーブレットに渡され、サーブレットは HTML をレンダリングし、フォームに入力された値を表示すると同時に、クラス DatabaseHelper を呼び出します。その後、DatabaseHelper はこれらの同じ値をテーブルに接続して挿入します。
値が HTML に表示されているため、値がサーブレット クラスに渡されていることはわかっています。したがって、問題は準備されたステートメント内にあるに違いありません。問題は、ステートメント自体に問題が見られないことです。テーブル自体にクエリを実行すると、そこにデータがありません。
準備済みステートメントではなく、ハードコーディングされたステートメントを使用してデータベースに値を挿入できるため、データベース接続は機能します。
ここで、私が使用しているステートメントを見てみましょう。どんなアドバイスでも大歓迎です。
public void addRegisterDetails(String name, String email, String country, String password, ){
try{
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
// Make db connection
con = DriverManager.getConnection(url, USERNAME, PASSWORD);
st = con.createStatement();
String query = " INSERT INTO user_information (name, email, country, password)" + " VALUES (?, ?, ?, ?)";
PreparedStatement preparedStmt = con.prepareStatement(query);
preparedStmt.setString (1, name);
preparedStmt.setString (2, email);
preparedStmt.setString (3, country);
preparedStmt.setString (4, password);
preparedStmt.execute();
}catch(ClassNotFoundException ex) {
System.out.println(ex);
}catch(Exception e){
e.printStackTrace();
}
}
テーブル定義
id| 名前 | 電子メール | 国 | パスワード
INT 型の id を除くすべての VARCHAR。