import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import quiz.DbConn;
public class SwingStuDB extends JFrame implements ActionListener{
DbConn db=new DbConn();
Container cp;
DefaultTableModel model;
JTable table;
JButton btnAdd,btnUpdate,btnDel;
//AddFrame생성
AddFrame addFrame=new AddFrame();
public SwingStuDB() {
super("스윙DB테이블");
cp=this.getContentPane();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(200, 100, 500, 400);
cp.setBackground(new Color(255,255,200));
this.initDesign();
this.setVisible(true);
}
//테이블에 출력하는 메소드...1
public void tablewrite()
{
//테이블초기화
model.setRowCount(0);
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
String sql="select * from student order by num asc";
conn=db.getCloudOracle();
try {
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next())
{
Vector<String>data=new Vector<String>();
data.add(rs.getString("num"));
data.add(rs.getString("name"));
data.add(rs.getString("ban"));
data.add(rs.getString("java"));
data.add(rs.getString("jsp"));
data.add(rs.getString("spring"));
data.add(rs.getString("total"));
data.add(rs.getString("average"));
//테이블에 추가
model.addRow(data);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
db.dbClose(rs, pstmt, conn);
}
}
//insert메서드….2
public void insertData()
{
String name=addFrame.tfName.getText();
String java=addFrame.tfJava.getText();
String jsp=addFrame.tfJsp.getText();
String spring=addFrame.tfSpring.getText();
String ban=(String)addFrame.cbBan.getSelectedItem();
int tot=Integer.parseInt(java)+Integer.parseInt(jsp)+Integer.parseInt(spring);
double avg=tot/3.0;
String sql="insert into student values(seq_test.nextval,?,?,?,?,?,?,?)";
Connection conn=null;
PreparedStatement pstmt=null;
conn=db.getCloudOracle();
try {
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, java);
pstmt.setString(3, jsp);
pstmt.setString(4, spring);
pstmt.setInt(5, tot);
pstmt.setDouble(6, avg);
pstmt.setString(7, ban);
pstmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
db.dbClose(pstmt, conn);
}
}
//삭제 메서드
public void deleteData(String num)
{
System.out.println("nim="+num);
//sql문
String sql="delete from student where num="+num;
//db연결
Connection conn=null;
Statement stmt=null;
conn=db.getCloudOracle();
try {
stmt=conn.createStatement();
int n= stmt.executeUpdate(sql);
//sql문 실행후 해당번호없을때 메세지,삭제되면 tablewrite다시호출
if(n==0)
JOptionPane.showMessageDialog(this, "없는데이타 번호입니다");
else
tablewrite();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
db.dbClose(stmt, conn);
}
}
public void initDesign()
{
String []title= {"번호","이름","반","Java","Jsp","Spring","총점","평균"};
model=new DefaultTableModel(title, 0);
table=new JTable(model);
this.add("Center",new JScrollPane(table));
//테이블에 전체데이타 출력
tablewrite();
JPanel pTop=new JPanel();
this.add("North", pTop);
btnAdd=new JButton("추가");
btnAdd.addActionListener(this); //메인add액션
pTop.add(btnAdd);
btnDel=new JButton("삭제");
btnDel.addActionListener(this); //메인 del액
pTop.add(btnDel);
btnUpdate=new JButton("수정");
btnUpdate.addActionListener(this); //메인update액션 추가
pTop.add(btnUpdate);
addFrame.btnAdd.addActionListener(this); //AddFrame의 추가버튼
}
@Override
public void actionPerformed(ActionEvent e) {
Object ob=e.getSource();
if(ob==btnAdd)
{
addFrame.setVisible(true);
}else if(ob==addFrame.btnAdd)
{
//입력데이타 읽어와서 db추가
insertData();
//테이블 다시출력
this.tablewrite();
//초기화
addFrame.tfName.setText("");
addFrame.tfJava.setText("");
addFrame.tfJsp.setText("");
addFrame.tfSpring.setText("");
addFrame.tfName.requestFocus();
//추가폼은 사라져야
addFrame.setVisible(false);
}
else if(ob==btnDel)
{
String num=JOptionPane.showInputDialog("삭제할 데이타의 번호를 입력해 주세요");
deleteData(num); //데이타 삭제
}else if(ob==btnUpdate)
{
System.out.println("update");
}
}
public static void main(String[] args) {
new SwingStuDB();
}
}
AddFrame
package day0906;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class AddFrame extends JFrame{
Container cp;
JTextField tfName,tfJava,tfJsp,tfSpring;
JComboBox<String> cbBan;
JButton btnAdd;
public AddFrame() {
super("데이타입력폼");
cp=this.getContentPane();
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(200, 100, 200, 250);
cp.setBackground(new Color(255,255,200));
this.initDesign();
//this.setVisible(true);
}
public void initDesign()
{
this.setLayout(null);
JLabel title1=new JLabel("이름");
JLabel title2=new JLabel("반");
JLabel title3=new JLabel("JAVA");
JLabel title4=new JLabel("JSP");
JLabel title5=new JLabel("SPRING");
title1.setBounds(30, 10, 50, 30);
this.add(title1);
title2.setBounds(30, 40, 50, 30);
this.add(title2);
title3.setBounds(30, 70, 50, 30);
this.add(title3);
title4.setBounds(30, 100, 50, 30);
this.add(title4);
title5.setBounds(30, 130, 50, 30);
this.add(title5);
tfName=new JTextField(4);
tfJava=new JTextField(3);
tfJsp=new JTextField(3);
tfSpring=new JTextField(3);
String[] ban= {"a반","b반","c반","d반"};
cbBan=new JComboBox<String>(ban);
tfName.setBounds(100, 15, 70, 25);
this.add(tfName);
cbBan.setBounds(100, 45, 70, 25);
this.add(cbBan);
tfJava.setBounds(100, 75, 70, 25);
this.add(tfJava);
tfJsp.setBounds(100, 105, 70, 25);
this.add(tfJsp);
tfSpring.setBounds(100, 135, 70, 25);
this.add(tfSpring);
btnAdd=new JButton("추가");
btnAdd.setBounds(70, 170, 60, 20);
this.add(btnAdd);
}
// public static void main(String[] args) {
// new AddFrame();
// } //디자인 확인후 주석...메인에서 호출할것이므로
}
UpdateFrame_수정폼_AddFrame 복사해서 변수수정
package day0906;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class UpdateFrame extends JFrame{
Container cp;
JTextField tfName,tfJava,tfJsp,tfSpring;
JComboBox<String> cbBan;
JButton btnMod; //수정후 메인으로 전송할버튼
String num; //수정할 번호
public UpdateFrame() {
super("수정폼");
cp=this.getContentPane();
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(200, 100, 200, 250);
cp.setBackground(new Color(155,155,200));
this.initDesign();
//this.setVisible(true);
}
public void initDesign()
{
this.setLayout(null);
JLabel title1=new JLabel("이름");
JLabel title2=new JLabel("반");
JLabel title3=new JLabel("JAVA");
JLabel title4=new JLabel("JSP");
JLabel title5=new JLabel("SPRING");
title1.setBounds(30, 10, 50, 30);
this.add(title1);
title2.setBounds(30, 40, 50, 30);
this.add(title2);
title3.setBounds(30, 70, 50, 30);
this.add(title3);
title4.setBounds(30, 100, 50, 30);
this.add(title4);
title5.setBounds(30, 130, 50, 30);
this.add(title5);
tfName=new JTextField(4);
tfJava=new JTextField(3);
tfJsp=new JTextField(3);
tfSpring=new JTextField(3);
String[] ban= {"a반","b반","c반","d반"};
cbBan=new JComboBox<String>(ban);
tfName.setBounds(100, 15, 70, 25);
this.add(tfName);
cbBan.setBounds(100, 45, 70, 25);
this.add(cbBan);
tfJava.setBounds(100, 75, 70, 25);
this.add(tfJava);
tfJsp.setBounds(100, 105, 70, 25);
this.add(tfJsp);
tfSpring.setBounds(100, 135, 70, 25);
this.add(tfSpring);
btnMod=new JButton("수정");
btnMod.setBounds(70, 170, 60, 20);
this.add(btnMod);
}
// public static void main(String[] args) {
// new UpdateFrame();
// }
}
Q. 문제
수정버튼 누르면 몇번을 수정하시겠습니까?
4번누르면 4번이 가지고 있는 데이타를 UpdateFrame 창에 표시하여 열린다
데이타 수정후 수정버튼 누르면 수정폼 사라지고 메인창에 수정된 내용이 보여야 한다
캡쳐 2개_수정전,다이얼로그창에 번호입력한것,수정된거 캡쳐
카페: 0906_스윙jdbc_홍길동
}else if(ob==btnUpdate)
{
//System.out.println("update");
String num=JOptionPane.showInputDialog("수정할 데이터의 번호를 입력하세요");
String sql="select * from student where num="+num;
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
conn=db.getCloudOracle();
try {
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
//전체데이타 조회는 while,하나의 데이터 조회는 if
if(rs.next())//데이타가 있는경우
{
uFrame.num=num; //프레임에는 없으나 반드시 해당num값 넘긴다
uFrame.tfName.setText(rs.getString("name"));
uFrame.tfJava.setText(rs.getString("java"));
uFrame.tfJsp.setText(rs.getString("jsp"));
uFrame.tfSpring.setText(rs.getString("spring"));
uFrame.cbBan.setSelectedItem(rs.getString("ban"));
uFrame.setVisible(true);
}else
{
//데이타가 없는경우
JOptionPane.showMessageDialog(this, "해당번호는 없는 데이타 입니다");
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally {
db.dbClose(rs, stmt, conn);
}
//요기까지 한후 메인의 수정창을 누르면 해당num의 데이터가 수정창에 표기되는지 확인후 update한다
}else if(ob==uFrame.btnMod)
{
updateData();
tablewrite();
uFrame.setVisible(false);
}
}
//update
public void updateData()
{
String num=uFrame.num;
String name=uFrame.tfName.getText();
String java=uFrame.tfJava.getText();
String jsp=uFrame.tfJsp.getText();
String spring=uFrame.tfSpring.getText();
String ban=(String)uFrame.cbBan.getSelectedItem();
int tot=Integer.parseInt(java)+Integer.parseInt(jsp)+Integer.parseInt(spring);
double avg=tot/3.0;
String sql="update student set "
+ "name=?,java=?,jsp=?,spring=?,total="+tot+",average="+avg+",ban=? "
+ "where num="+num;
System.out.println(sql);
Connection conn=null;
PreparedStatement pstmt=null;
conn=db.getCloudOracle();
try {
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, java);
pstmt.setString(3, jsp);
pstmt.setString(4, spring);
pstmt.setString(5, ban);
pstmt.execute();
} catch (SQLException e) {
}finally {
db.dbClose(pstmt, conn);
}
}
'JAVA' 카테고리의 다른 글
210903_이클립스를 통해 오라클 출력(select,update,delete,insert,search) (0) | 2021.09.06 |
---|---|
210903_이클립스에 오라클 db 연결용 클래스 생성 (0) | 2021.09.03 |
210903_이클립스 콘솔창 입력으로 오라클 출력(scanner,insert,select,delete,update) (0) | 2021.09.03 |
210902_오라클 클라우드를 이클립스에 연결 (0) | 2021.09.02 |
210826_Local IP+Local name (0) | 2021.08.26 |