검색결과 리스트
글
JDBC2.0 커서이동
/*
현재 프로그램은 콘솔창에서 실행되는 프로그램이다.
* 전체 -> 1 추가 ->2 삭제 ->3 종료->4
* 위의 메뉴에 따라 키보드로부터 값을 받아서 처리해야 한다.
rs.last() // 커서를 마지막으로 이동
rs.getRow(); // 테이블의 행의 갯수를 리턴함
아래코드는 넷빈으로 작성된 코드인데 ui부분은 swing의jTable을 이용하였다.
JDBC2.0 을 이용해서 커서를 제어하는 부분만 보면 도움이 될것이다.
테스트를 위한 SQL 스크립트파일 및 넷빈에서 돌려볼수있는 JAVA 소스 첨부
*/
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
/*
* JDBC_JTable.java
*/
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
public class JDBC_JTable extends javax.swing.JFrame {
private Connection con;
private Statement stmt;
private PreparedStatement pstmt;
private CallableStatement cstmt;
private ResultSet rs;
int row_count,col_count;
public JDBC_JTable() {
initComponents();
setBounds(200,200,500,500);
connected();
}
private void connected(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:sg", "scott", "tiger");
/*
* Statement를 아래와 같이 만들어주는 이유는 아래의 Statement를 통하여 얻어지는 결과
* 객체(ResultSet)의 커서와 형태를 유동적 또는 유연하게 하기 위해 JDBC2.0 기술을 사용한다.
* ex> rs.last(); // 커서를 마지막 행으로 이동
* rs.beforeFirst(); // 커서를 첫행보다 앞으로 이동
* rs.first(); // 커서를 첫행으로 이동
*/
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
pstmt = con.prepareStatement(
"insert into phone_values(phone_t_idx.nextvla,?,?,?)");
cstmt = con.prepareCall("{call del_phone(?)}");
setTitle("db연결완료");
} catch (Exception exception) {}
}
private void closed(){
try {
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(pstmt!=null)
pstmt.close();
if(cstmt !=null)
cstmt.close();
if(con !=null)
con.close();
} catch (Exception e) {
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
table = new javax.swing.JTable();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
jMenuItem3 = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JSeparator();
jMenuItem4 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
jScrollPane1.setViewportView(table);
getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
jMenu1.setText("SQL");
jMenuItem1.setText("전체보기");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuItem2.setText("추가");
jMenu1.add(jMenuItem2);
jMenuItem3.setText("삭제");
jMenu1.add(jMenuItem3);
jMenu1.add(jSeparator1);
jMenuItem4.setText("종료");
jMenu1.add(jMenuItem4);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
pack();
}// </editor-fold>
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
rs = stmt.executeQuery("select * from phone_t");
/*결과 객체의 커서를 마지막 행으로 이동*/
rs.last();
row_count = rs.getRow(); // 레코드의 수 (1차원 배열의 수);
rs.beforeFirst(); // 결과 객체의 커서를 원위치
/*컬럼 명들을 가져오기 위한 작업*/
ResultSetMetaData rsmd = rs.getMetaData(); // 열들의 대한 정보객체
col_count = rsmd.getColumnCount();
String[] f = new String[col_count];
for(int i = 0 ; i<f.length ; i++){
f[i] = rsmd.getColumnName(i+1);
}
/* 윗 부분까지가 컬럼 작업완료*/
/*db의 자원을 Object형 2차원 배열로 재포장 작업*/
Object[][] data = new Object[row_count][col_count];
/*
* 실제 자원은 ResultSet이 가지고 있으므로 그곳에 있는 자원들을
* data라는 2차원 배열의 각 요소에 넣어주면된다.
*/
for(int r =0;rs.next();r++){ // 레코드 수만큼
for(int c = 0;c<col_count;c++){ //컬럼의 수만큼 반복하는 반복문
data[r][c] = rs.getString(c+1);
System.out.println(data[r][c]);
}
}
table.setModel(new MyModel(data,f));
} catch (Exception exception) {
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JDBC_JTable().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JMenuItem jMenuItem4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTable table;
// End of variables declaration
}
RECENT COMMENT