[学習][JSP]-JDBCを使用してJSPとデータベースに接続

10412 ワード

JDBC ? それは何ですか.
定義#テイギ#
JAva標準インタフェースで、java/JSPプログラム内のデータベースに関連する操作の処理を支援します.
sql文を実行するJava API/Javaライブラリです.JDBC APIを使用すると、DBMSのタイプに関係なくデータベース操作を処理できます.
JDBCによるJSPとデータベースのバインド
❶ java.sql.* パッケージのインポート
Zeng JDBCドライバのロード
データベース接続の接続オブジェクトを作成
❹クエリ文を実行するState/preparedState/CalableStatement
オブジェクトの作成
クエリーの実行
クエリによる結果値の使用
使用したオブジェクトを閉じる
以下のコードは、Webホームプロジェクトの実施時にログイン処理中に使用されるコードです.
Connection conn=null;
String dbURL = "jdbc:mysql://localhost:3306/flowershop?characterEncoding=euckr";
String dbID = "root";
String dbPassword = "1234";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
				ResultSet rs=null;
				PreparedStatement pstmt=null;
				
				try {
					String sql = "select userID,userPassword from user where userID =?";
					
					pstmt = conn.prepareStatement(sql); 
				
				pstmt.setString(1,userID);
				rs=pstmt.executeQuery();
					if(rs.next()) { //다음 행으로 커서 이동 
					String rId=rs.getString("userID");
					String rPasswd=rs.getString("userPassword");
					if(userID.equals(rId)&&userPassword.equals(rPasswd)){
					session.setAttribute("userID", userID);
						out.println("<script> alert('로그인 성공') </script>");  // 일치하면 로그인성공
						out.println("<script> location.href='welcome.jsp' </script>"); 
						
					}
							else
							out.println("<script> alert('비밀번호가 틀렸습니다.') </script>");  //비밀번호가 틀렸으므로 비밀번호 틀립니다 출력 
					}
					else
					 out.println("<script> alert('아이디가 존재하지 않습니다.') </script>");  //존재하지 않는 아이디 출력 
				}catch (SQLException ex) {
				out.println("SQLException: "+ex.getMessage());
				}
				finally {
					if(rs!=null)
						rs.close();
					if(pstmt!=null)
						pstmt.close();
					if(conn!=null)
						conn.close();
			
			}
		%>
コードを分析し、JDBCの適用方法を説明します.
1.JDBCのロード
Connection conn=null;
String dbURL = "jdbc:mysql://localhost:3306/flowershop?characterEncoding=euckr";
String dbID = "root";
String dbPassword = "1234";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
Class.forName("com.mysql.jdbc.Driver");
Class.forName()を使用してJDBCドライバをロードします.
JDBCドライバをロードすると、自動的にオブジェクトが作成されます.
DriverManagerクラスに登録します.
このようにJDBCドライバをロードするプロセスは、プログラムを実行する際に1回しか必要ありません.
2.Connectionオブジェクトの作成
Connection conn=null;
DriverManager.getConnection(dbURL, dbID, dbPassword);
データベースに関連付けられたインタフェースは、DriveManagerクラスのgetConnection()メソッドを使用してJDBCドライバから取得します.
オブジェクトを作成するときは、JDBCドライバを検索し、見つかったドライバを使用して接続オブジェクトを作成して返します.
com.mysql.jdbc.Driverドライバを検索し、接続オブジェクト(conn)を作成して返します.
3.データベース接続を閉じる
finally {
if(rs!=null)
rs.close();
if(pstmt!=null)
pstmt.close();
if(conn!=null)
conn.close(); }
データベース接続が不要な場合は、
作成した接続はclose()メソッドを使用して無効にする必要があります.
通常、データベース・リソースを使用しないためには、使用が終了したらすぐにリソースを解放することが望ましい.
データベース・クエリーの実行
文オブジェクト
1)静的クエリ用
2)クエリーの使用->使用不可
3)クエリの終了->close()
すぐに閉じない場合は、無視できないスペースが必要です->ページは、他の操作を実行しても停止しません.
4)複雑でない単純なクエリ文を使用します.
PreparedStatementオブジェクト
1)動的クエリー
2)1つのオブジェクトが複数のクエリーを実行できる
->同じクエリ文を複数実行の特定の値に置き換える必要がある場合、パラメータが多すぎてクエリ文をクリーンアップする必要がある場合に便利です.
 PreparedStatement pstmt=null;
					
  try {
	String sql = "select userID,userPassword from user where userID =?";
						
	pstmt = conn.prepareStatement(sql);
rs=pstmt.executeQuery();
						if(rs.next()) { //다음 행으로 커서 이동 
						String rId=rs.getString("userID");
						String rPasswd=rs.getString("userPassword");
						if(userID.equals(rId)&&userPassword.equals(rPasswd)){
						session.setAttribute("userID", userID);
							out.println("<script> alert('로그인 성공') </script>");  // 일치하면 로그인성공
							out.println("<script> location.href='welcome.jsp' </script>"); 
							
						}
  • executeUpdate()メソッドを使用して、データを挿入、変更、削除します.
  • ResultSetオブジェクト
    select文をStatemt/preparedStateオブジェクトとして使用して、レコード値をテーブル形式で取得するオブジェクト
    ResultSet rs=null;
    rs=pstmt.executeQuery();
    		if(rs.next()) { //다음 행으로 커서 이동 
    						String rId=rs.getString("userID");
    						String rPasswd=rs.getString("userPassword");
    						if(userID.equals(rId)&&userPassword.equals(rPasswd)){
    						session.setAttribute("userID", userID);
    							out.println("<script> alert('로그인 성공') </script>");  // 일치하면 로그인성공
    							out.println("<script> location.href='welcome.jsp' </script>"); 
    							
    						}
    								else
    								out.println("<script> alert('비밀번호가 틀렸습니다.') </script>");  //비밀번호가 틀렸으므로 비밀번호 틀립니다 출력 
    						}
    						else
    						 out.println("<script> alert('아이디가 존재하지 않습니다.') </script>");  //존재하지 않는 아이디 출력 
    					}catch (SQLException ex) {
    					out.println("SQLException: "+ex.getMessage());
    					}
    					finally {
    						if(rs!=null)
    							rs.close();
    
    PreparedStatementオブジェクトselect文で取得したレコード値(userID、userPassword)をResultオブジェクトとして使用し、フォームに入力したuserIDとuserPa剣値を比較することでログイン通知ウィンドウを開きます.