JDBC의PreparedStatement 클래스에서 미리 컴파일된 종합 응용 분석

4675 단어
사전 컴파일링의 장점 1. Prepared Statement는 사전 컴파일링으로 대량 처리에 효율을 크게 높일 수 있다.JDBC 메모리 프로세스라고도 합니다.2. Statement 객체를 사용합니다.데이터베이스에 대한 일회성 액세스만 수행할 때 Statement 객체로 처리됩니다.Prepared Statement 대상의 비용이 Statement보다 많기 때문에 일회성 조작에 추가적인 이익을 가져오지 않습니다.3. statement는 매번 sql문장을 실행할 때마다 관련 데이터베이스에서 sql문장의 컴파일을 실행한다.preparedstatement는 미리 컴파일된 것이고,preparedstatement는 일괄 처리 4를 지원한다.PreparedStatement 대상은 SQL문장을 포함할 뿐만 아니라 대다수 상황에서 이 문장은 이미 미리 컴파일된 것이기 때문에 실행할 때 DBMSQL문장만 실행하고 먼저 컴파일할 필요가 없다.Statement 대상을 여러 번 실행해야 할 때Prepared Statement 대상은 운행 시간을 크게 낮출 뿐만 아니라 데이터베이스에 접근하는 속도도 빨라진다.이런 전환도 SQL 문장의 문법을 중복할 필요가 없고 변수의 값만 바꾸면 SQL 문장을 다시 실행할 수 있다.PreparedStatement 객체를 선택할 수 있는지 여부는 같은 문법의 SQL 문장이 여러 번 실행되었는지, 그리고 두 번 사이의 차이는 변수의 차이일 뿐이다.한 번만 실행했다면 일반적인 대상과 아무런 차이가 없었을 뿐만 아니라, 사전 번역의 우월성을 나타낼 수 없었을 것이다.5.PreparedStatement 대상은 Statement 대상보다 더 효과적이다. 특히 서로 다른 파라미터가 있는 같은 SQL 문장이 여러 번 실행될 때.PreparedStatement 대상은 데이터베이스에서 SQL 문장을 미리 컴파일할 수 있도록 함으로써 다음 실행에서 시간을 절약하고 코드의 가독성을 높일 수 있습니다.
미리 컴파일된 핵심 코드
 
  
// SQL :
String sql = "select * from student where year(birthday) between ? and ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "1987");
ps.setString(2, "1990");
rs = ps.executeQuery();

미리 컴파일된 간단한 범례 아래 방법의 첫 번째 파라미터는 SQL 문장이고 두 번째 파라미터는 조회가 필요한 범위이다.
 
  
 /**PreparedStatement */
 public ResultSet StartQuery(String sql,String s1, String s2) {
  getConnection();
  try {
   pStatement = connection.prepareStatement(sql);
   pStatement.setString(1, s1);
   pStatement.setString(2, s2);
   rSet = pStatement.executeQuery();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return rSet;
 }

응용 프로그램
 
  
  System.out.println(" :");
  ResultSet resultSet = jDemo1.StartQuery("select * from t_userr where year(birthdate) between ? and ?","1992","1992");
  jDemo1.AllResult(resultSet);

사전 컴파일된 확장 범례1(SQL 조회) 아래에 우리는 위의 방법을 확대하여 더욱 광범위한 상황에 적응할 수 있도록 한다.
첫 번째 매개변수는 SQL 명령문이고, 두 번째 매개변수는 질의의 매개변수 목록입니다.(배열 형식으로 저장)
 
  
 /** PreparedStatement */
 public ResultSet StartQueryLook(String sql,Object[] s) {
  getConnection();
  try {
   pStatement = connection.prepareStatement(sql);
   for (int i = 0; i < s.length; i++) {
    pStatement.setObject(i+1, s[i]);
   }
   rSet = pStatement.executeQuery();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return rSet;
 }

응용 프로그램
 
  
  // 1
  System.out.println(" :");
  String[] s1 = {"1992","1992"};
  ResultSet resultSet = jDemo1.StartQueryLook("select * from t_userr where year(birthdate) between ? and ?",s1);
  jDemo1.AllResult(resultSet);
  // 2
  System.out.println("ID :");
  String[] s2 = {"100","200"};
  ResultSet resultSet2 = jDemo1.StartQueryLook("select * from t_userr where id between ? and ?",s2);
  jDemo1.AllResult(resultSet2);

사전 컴파일된 확장 사례 2(SQL 추가, 삭제, 수정)
 
  
 /** PreparedStatement */
 public int StartQueryAll(String sql,Object[] objArr) {
  int count = 0;
  getConnection();
  try {
   pStatement = connection.prepareStatement(sql);
   if(objArr!=null && objArr.length>0) {
    for (int i = 0; i < objArr.length; i++) {
     pStatement.setObject(i+1, objArr[i]);
    }
   }
   count = pStatement.executeUpdate();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   close();
  }
  return count;
 }

응용 프로그램
 
  
  // :
  for (int i = 0; i < 10; i++) {
   Object[] s3 = {10,10};
   jDemo1.StartQueryAll("insert into jdbctest(username,password) values(?,?)",s3);
  }
  // :
  System.out.println(" :");
  jDemo1.StartQueryAll("delete from t_userr where id between ? and ?",new Object[]{"1010","1030"});

좋은 웹페이지 즐겨찾기