http://sunfuture.springnote.com/pages/3364253
09/05/12 과제
09/05/12 과제 : 아래와 같이, Frame을 만들어서 JComboBox 와 JTextField 에 입력된 값을 SQL문으로 전송해서 아래에 출력하는 프로그램을 만들어라.
개선해야할 점 : jtf 에서 엔터키를 쳤을 때도 작동하도록 만드는 게 좋을 듯 하다.
출력결과가 리스트의 아래쪽에 나온다. ㅡㅅ-);; 제일 위로 이동해서 출력하게 하는 방법은 없을까?
아니면, 출력되어 있는 내용들을 쓰윽 지워버리는 것은... 안될까?? tablemodel 함수로 행의 수를 파악한 다음 위에서부터 삭제해!? For 문 돌려?
OTL... 해보지 않으면 모르는거지. ㅎㅎ
- import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.Vector;
public class JdbcFindMulti2 extends JFrame implements ActionListener {
// 변수선언부
JLabel jlb;
JButton jbtn;
JTextField jtf;
JComboBox jcb;
JPanel jp;
Vector article, title, rowData, first;
String coln, colv, sql;
DefaultTableModel model;
Container c;
String[] m = {"번호", "이름", "주소"};
//database() 에서 사용할 변수들
String db_connect = "jdbc:oracle:thin:@61.103.103.184:1521:cjedu"; //JDBC URL
String db_user = "scott";
String db_passwd = "tiger";
Connection conn;
Statement stat;
public JdbcFindMulti2(){
database(); //DB 준비작업
makeGUI(); //화면 구성
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent x){
try {
Window w = (Window)x.getSource();
w.setVisible(false);
w.dispose();//화면에 썼던 자원을 해지하는것.
stat.close();
conn.close();
System.exit(0); //프로세스 종료
}catch(Exception e){}
}
});
}
public void database() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection( db_connect, db_user, db_passwd );
stat = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
//database 에서 만들어진 자료를
public void makeGUI() {
c = getContentPane();
c.setLayout( new BorderLayout() );
//North에 들어갈 객체들
jlb = new JLabel("Data to Field");
jcb = new JComboBox(m);
jtf = new JTextField(20);
jbtn = new JButton("검색");
jcb.addActionListener(this);
jtf.addActionListener(this);
jbtn.addActionListener(this);
jp = new JPanel();
jp.add(jlb);
jp.add(jcb);
jp.add(jtf);
jp.add(jbtn);
c.add(jp, "North");
first = new Vector();
title = new Vector();
title.add("Num");
title.add("Name");
title.add("Address");
model = new DefaultTableModel();
model.setDataVector(first, title);
JTable table = new JTable(model);
JScrollPane sp = new JScrollPane(table);
c.add(sp,"Center");
}
public void actionPerformed(ActionEvent ae){
Object o = ae.getSource();
if ( o == jcb ) {
} else if ( o == jtf ) {
colv = jtf.getText();
} else if ( o == jbtn ) {
if (jcb.getSelectedItem().equals("번호")){
coln = "num";
} else if (jcb.getSelectedItem().equals("이름")) {
coln = "name";
} else{
coln = "address";
}
colv = jtf.getText();
sql = "SELECT * FROM customer WHERE "+ coln + " like '%" + colv + "%'";
if (jtf.getText().equals("")) {
System.out.println("데이터를 입력하세요.");
} else {
try {
ResultSet rs = stat.executeQuery(sql);
while(rs.next()) {
rowData = new Vector(); //새로운 행을 담을 벡터
rowData.add(rs.getString(1));
rowData.add(rs.getString(2));
rowData.add(rs.getString(3));
model.addRow(rowData);
jtf.setText("");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
JdbcFindMulti2 jfm = new JdbcFindMulti2();
jfm.pack();
jfm.setSize(500,500);
jfm.setVisible(true);
}
}
- // 위 코드와의 차이점이라고 한다면, database(String sql) 이라고 하는 메소드를 오버로딩으로 해서 하나 추가했다. 그리고
// DefaultTableModel newTable(); 이라고 하는 메소드 안에 넣어봤다. 쓸데없는 일일지도... - import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.Vector;
public class JdbcFindMulti2 extends JFrame implements ActionListener {
// 변수선언부
JLabel jlb;
JButton jbtn;
JTextField jtf;
JComboBox jcb;
JPanel jp;
Vector article, title, rowData, first;
String coln, colv, sql;
DefaultTableModel model;
Container c;
String[] m = {"번호", "이름", "주소"};
//database() 에서 사용할 변수들
String db_connect = "jdbc:oracle:thin:@61.103.103.184:1521:cjedu"; //JDBC URL
String db_user = "scott";
String db_passwd = "tiger";
Connection conn;
Statement stat;
public JdbcFindMulti2(){
database(); //DB 준비작업
makeGUI(); //화면 구성
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent x){
try {
Window w = (Window)x.getSource();
w.setVisible(false);
w.dispose();//화면에 썼던 자원을 해지하는것.
stat.close();
conn.close();
System.exit(0); //프로세스 종료
}catch(Exception e){}
}
});
}
public void database() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection( db_connect, db_user, db_passwd );
stat = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
//actionListener에서 검색 버튼을 눌렀을 경우, jtf 값이 Null이 아니면 호출된다.
public void database(String sql){
try {
ResultSet rs = stat.executeQuery(sql);
while(rs.next()) {
rowData = new Vector(); //새로운 행을 담을 벡터
rowData.add(rs.getString(1));
rowData.add(rs.getString(2));
rowData.add(rs.getString(3));
model.addRow(rowData);
jtf.setText("");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void newTable() {
model = new DefaultTableModel();
model.setDataVector(first, title);
JTable table = new JTable(model);
JScrollPane sp = new JScrollPane(table);
c.add(sp,"Center");
}
//database 에서 만들어진 자료를
public void makeGUI() {
c = getContentPane();
c.setLayout( new BorderLayout() );
//North에 들어갈 객체들
jlb = new JLabel("Data to Field");
jcb = new JComboBox(m);
jtf = new JTextField(20);
jbtn = new JButton("검색");
jcb.addActionListener(this);
jtf.addActionListener(this);
jbtn.addActionListener(this);
jp = new JPanel();
jp.add(jlb);
jp.add(jcb);
jp.add(jtf);
jp.add(jbtn);
c.add(jp, "North");
first = new Vector();
title = new Vector();
title.add("Num");
title.add("Name");
title.add("Address");
newTable();
}
public void actionPerformed(ActionEvent ae){
Object o = ae.getSource();
if ( o == jcb ) {
// 경우에 따라서는 선택된 항목에 따라서 정렬된 값을 출력할 수 있겠다.
} else if ( o == jtf ) {
colv = jtf.getText();
System.out.println(colv);
} else if ( o == jbtn ) {
if (jcb.getSelectedItem().equals("번호")){
coln = "num";
} else if (jcb.getSelectedItem().equals("이름")) {
coln = "name";
} else{
coln = "address";
}
colv = jtf.getText();
sql = "SELECT * FROM customer WHERE "+ coln + " like '%" + colv + "%'";
if (jtf.getText().equals("")) {
System.out.println("데이터를 입력하세요.");
} else {
this.database(sql);
}
}
}
public static void main(String[] args) {
JdbcFindMulti2 jfm = new JdbcFindMulti2();
jfm.pack();
// jfm.setSize(500,500);
jfm.setVisible(true);
}
}
다음검색