728x90

# executeQuery

- 질의 실행, 결과 가져오기, 출력

  ResultSet rset = stmt.executeQuery( "select dept_name, avg (salary)

                                                   from instructor

                                                   group by dept_name");

  while (rset.next()) {

         System.out.println(rset.getString("dept_name") + "" + rset.getFloat(2));}

 

- SQL 결과와 Java 변수 바인딩

  string d_name; float sal;

  ResultSet rset = stmt.executeQuery("select dept_name, avg (salary)

                                                  from instructor

                                                  group by dept_name");

  while (rset.next()) {

           d_name = rset.getString("dept_name");

           sal = rset.getFloat(2);

           System.out.println(d_name + " " + sal);

 }

 

- 결과 필드 얻기 (속성의 이름이나 위치) :

  rs.getString(“dept_name”) = rs.getString(1)

 

- null 값 처리

  int a = rs.getInt(“a”);

  if (rs.wasNull()) Systems.out.println(“Got null value”);

 

 

# executeUpdate

- 데이터베이스에 갱신

  try {

         stmt.executeUpdate("insert into instructor values(’77987’, ’Kim’, ’Physics’, 98000)");

  } catch (SQLException sqle)

  {

        System.out.println("Could not insert tuple. " + sqle);

  }

 

# 준비된 구문 preparedStatement

PreparedStatement pStmt = conn.prepareStatement(

                                               "insert into instructor values(?,?,?,?)");

pStmt.setString(1, "88877");

pStmt.setString(2, "Perry");

pStmt.setString(3, "Finance");

pStmt.setInt(4, 125000);

pStmt.executeUpdate();

pStmt.setString(1, "88878");

pStmt.executeUpdate();

 

 

# 메타데이터

- ResultSet metadata

- 질의를 실행한 후 결과 집합 rs를 가져올 때 :

  ResultSetMetaData rsmd = rs.getMetaData();

       for(int i = 1; i <= rsmd.getColumnCount(); i++) {

             System.out.println(rsmd.getColumnName(i));

             System.out.println(rsmd.getColumnTypeName(i))

       }

=> 결과 집합의 모든 열의 타입과 이름을 출력

- 메타데이터는 데이터베이스에 대한 아무 정보 없이 도출 가능

 

- DatabaseMetabase 인터페이스 :

데이터베이스에 대한 메타데이터를 찾는 방법을 제공함

객체를 반환하는 “getMetaData()” 메소드 가짐

DatabaseMetaData dbmd = conn.getMetaData();

ResultSet rs = dbmd.getColumns(null, "univdb", "department", "%");

while( rs.next()) {

       System.out.println(rs.getString("COLUMN_NAME"),

       rs.getString("TYPE_NAME");

}

- 다른 메소드 : 릴레이션, 외래 키 참조, 인증, 접속되는 최대 수

 

 

# JDBC에서 트랜잭션 처리

- 자동 커밋 (default)

- 자동 커밋 off

  conn.setAutoCommit(false);

트랜잭션을 커밋하거나 롤백 해야함

conn.commit();

conn.rollback();

- 자동 커밋 on

conn.setAutoCommit(true)

 

# 대형 객체 불러오기

- getBlob() getClob() 메소드

- blob clob 타입의 객체를 반환

- 객체 전체를 저장하는게 아니라 위치자(포인터)를 저장함

- getBytes()를 통해 객체에서 데이터 불러옴

)

Statement sta = con.createStatement();

ResultSet res = sta.executeQuery("SELECT * FROM Image");

int i = 0;

while (res.next() && i<3) {

        i++; System.out.println("Record ID: "+res.getInt("ID"));

        System.out.println(" Subject = "+res.getString("Subject"));

        Blob bodyOut = res.getBlob("Body");

        int length = (int) bodyOut.length();

        System.out.println(" Body Size = "+length);

        byte[ ] body = bodyOut.getBytes(1, length);

        String bodyHex = bytesToHex(body, 32);

        System.out.println(" Body in HEX = "+bodyHex+"...");

        // bodyOut.free(); // new in JDBC 4.0

}

res.close();

sta.close();

 

# 대형 객체 설정

- setBlob(int parameterIndex, InputStream inputStream)

- 입력 스트림에 연결함

)

String INSERT_PICTURE = "insert into blob1 values (?)";

FileInputStream fis = null;

PreparedStatement ps = null;

try {

      conn.setAutoCommit(false);

      File file = new File("1.wma");

      fis = new FileInputStream(file);

      byte b[ ] = new byte[(int)file.length()];

      fis.read(b);

      System.out.println(b.length);

      java.sql.Blob b2 = new SerialBlob(b);

      ps = conn.prepareStatement(INSERT_PICTURE);

      ps.setBlob(1,b2);

      ps.executeUpdate();

      conn.commit();

      System.out.println("Record inserted successfully");

} catch(Exception ex){

      ex.printStackTrace();

      throw ex;

}

finally {

      ps.close();

      fis.close();

}

반응형

'전공 공부 > 데이터베이스시스템' 카테고리의 다른 글

프로시저  (0) 2021.01.03
내장 SQL  (0) 2021.01.03
JDBC 코드 예시  (0) 2021.01.03
JDBC와 ODBC  (0) 2021.01.03
프로그래머스 MySQL (level 1)  (0) 2021.01.02
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기