[자바] 도서관리 #1 Book 저장(Sqlite 사용)
- 카페 가입 : http://naver.me/x25ABeJv
- 참고 자료
- 자바에서 Sqlite 사용하기
- Sqlite DB에 값을 저장(INSERT)하는 자바 코딩
- Sqlite DB에 값을 수정(UPDATE)하는 자바 코딩
- AddrDAO 클래스 코딩
- 기타 필요한 것은 1차로 이 홈페이지에서 검색
2차로 google에서 검색
- 오류가 생겨 해결이 안될 때
- naver, google에서 검색해서 본인 어떻게든 해결
- Run – Debug 메뉴를 통해 1단계씩 실행시키면서 오류 찾기
- Run-Debug 기능이 느리지만 가장 효과적으로 실력이 향상됨
- 그래도 안되면 같은 조원들에게 묻기
- 그래도 안되면 언제든지 단톡에 묻기
- 답을 해줄 수 있는 학생이 답해주고,
- 그래도 안되면 내가 답해주겠음
(단, 컴파일 오류는 알려주지 않음, 실행오류만 묻길 바람)
- naver, google에서 검색해서 본인 어떻게든 해결
- 실행 결과
- mybook.db 생성 : Sqlite 사용
- tbook 테이블 생성
- 테이블의 필드와 DTO의 멤버필드 관계를 엑셀로 정리 : 다운로드
- 1차적으로 아래 소스 코드를 실행시켜보고 완성이 되면
우리학교 도서관 홈페이지를 참조하여 필드 추가 및 UI 추가 구성
- tbook 테이블 생성
- ConExam.java 소스 : 콘솔에서 데이터베이스에 값 넣기
12345678910111213141516171819202122232425262728293031323334353637383940414243444546package kr.ac.jj;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Scanner;public class ConExam {public static void main(String[] args) {// TODO Auto-generated method stubString file = "d:\\mybook.db";Connection conn = null;try {Class.forName("org.sqlite.JDBC");conn = DriverManager.getConnection("jdbc:sqlite:" + file);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Scanner scan = new Scanner(System.in);System.out.print("이름 : ");String name = scan.next();System.out.print("가격 : ");int pric = scan.nextInt();System.out.print("출판사 : ");String publ = scan.next();String sql = "INSERT INTO tbook(title, pric, publ) ";sql += " VALUES ('"+name+"', "+pric+", '"+publ+""');";PreparedStatement ps;try {ps = conn.prepareStatement(sql);ps.executeUpdate();conn.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}} - InsertForm.java 소스
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package kr.co.moak.summer2019;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class InsertForm extends JFrame implements ActionListener{JTextField jfTitle;JTextField jfPric;JTextField jfPubl;public InsertForm() {this.setTitle("도서관리");this.setSize(800, 600);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLayout(null);//도서명JLabel lblNo = new JLabel("도서명 : ");lblNo.setBounds(10, 10, 100, 25);this.add(lblNo);jfTitle = new JTextField();jfTitle.setBounds(120, 10, 100, 25);this.add(jfTitle);//가격JLabel lblName = new JLabel("가격 : ");lblName.setBounds(10, 50, 100, 25);this.add(lblName);jfPric = new JTextField();jfPric.setBounds(120, 50, 100, 25);this.add(jfPric);// 출판사JLabel lblDept = new JLabel("출판사 : ");lblDept.setBounds(10, 90, 100, 25);this.add(lblDept);jfPubl = new JTextField();jfPubl.setBounds(120, 90, 100, 25);this.add(jfPubl);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 500, 100, 50);this.add(btnSave);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew InsertForm();}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub}} - BookDTO.java 소스
123456789101112131415package kr.co.moak.summer2019;public class BookDTO {String title;int pric;String publ;public BookDTO() {}public BookDTO(String title, int pric, String publ) {this.title = title;this.pric = pric;this.publ = publ;}} - BookDAO.java 소스
1234567891011121314151617181920212223242526272829303132333435363738394041424344package kr.co.moak.summer2019;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;public class BookDAO {String tableName = "tbook";public Connection getConn() {Connection conn = null;try {Class.forName("org.sqlite.JDBC");conn = DriverManager.getConnection("jdbc:sqlite:" + MyConst.DB);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}public void insert(BookDTO dto) {Connection conn = null;PreparedStatement ps = null;String sql = "INSERT INTO " + tableName + "(titl, pric, publ) VALUES (?, ?, ?);";conn = getConn();try {ps = conn.prepareStatement(sql);ps.setString(1, dto.title);ps.setString(2, dto.publ);ps.setInt(3, dto.pric);ps.executeUpdate();conn.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}- 위 코드에는 오류가 3군데 있음, 고쳐서 사용하세요.
- MyConst.java 소스
12345package kr.co.moak.summer2019;public class MyConst {private String DB = "D:\\mybook.db";}- 위 코드에 DB 변수의 선언이 잘못됨, 고쳐서 사용하세요.
- InsertForm.java 소스의 actionPerformed() 완성
123456789101112131415161718@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubBookDAO dao;switch(e.getActionCommand()) {case "저장":String name = jfTitle.getText();int pric = Integer.parseInt(jfPric.getText());String dept = jfPubl.getText();BookDTO dto = new BookDTO(name, pric, dept);dao = new BookDAO();dao.insert(dto);break;}}- 위 코드는 치명적인 오류를 발생시킬 수 있음, 이를 찾아 해결해 보길.