안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2011년 8월 11일 목요일

[단어장] Java로 간단한 단어장을 만들어 보자.

 소스와 함께 간단하게 단어장을 만들어 보자.

 일단 단어장을 만들기 위해서 뭐가 필요할지에 대해 이야기 해 보겠다.

 1. 단어장을 만들기 위해서는 단어들을 저장할 DB가 필요하고

 2. 단어장에 넣을 단어들을 입력하기 위한 GUI 창이 필요하고

 3. 단어들을 보여줄 GUI가 필요하다.

 이 세 가지만 다룰 줄 안다면 간단하게 단어장을 만들 수 있다.

 1. DB 다루기

 MySql과 JDBC를 이용하여 자바에서 DB를 사용하도록 하자.

 MySql 과 JDBC를 저장하는 방법은 블로그 내 다른 글을 참조하도록 하자.

 그럼 이제 단어장을 만들기 위해 필요한 DB 연산 기능을 생각해 보자.

 우선 무엇보다도 저장할 공간 즉 Table이 필요하다.

 이를 위해서는 Create Table을 이용하여 DB를 만들어야 한다.

 그 후 입력한 단어들을 저장하기 위해서 Insert 문을 사용하게 된다.

 그리고 사용자가 원하는 단어를 뽑기 우해서 Select 문을 사용하고

 필요없는 단어를 지우기 위해 Delete 문을 사용하여야 한다.

 이 정도 기본적인 Sql 문들을 이용할 줄 알고 이를 Java에서 나타내기 위해

 JDBC를 잘 이용한다면 DB 구축은 쉽게 할 수 있다.

 현재 본인이 만들어 놓은 단어장에 들어 있는 DB 관련 소스이다.


package dictionary;

import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import dictionary.DTable.RowListener;

public class D_DB {

static Connection con = null;
static Statement stmt = null;

static String userid = "root", password = "root";
static String url = "jdbc:mysql://localhost:3306/test";

public static Connection getConnection() {

try {
Class.forName("org.gjt.mm.mysql.Driver"); // Class.forName("myDriver.ClassName");
// ?

} catch (java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}

try {
con = DriverManager.getConnection(url, userid, password);

} catch (SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}

return con;
}

public static void createTables() {
Connection con = getConnection();
String query;
Statement stmt;

try {
query = "create table Word " + "(name varchar(32), "
+ "mean varchar(200), " + "importance TINYINT , "
+ "count SMALLINT)";
stmt = con.createStatement();
stmt.executeUpdate(query);
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void insertWord(String word, String mean, int importance) {
Connection con = getConnection();

String insert = "insert into Word values('" + word + "', '" + mean
+ "', " + importance + ", " + 1 + ")";
String select = "SELECT name, count FROM Word WHERE name = '" + word + "'";

try {

stmt = con.createStatement();
ResultSet result = stmt.executeQuery(select);
if (result.first() == false) {
stmt.executeUpdate(insert);
} else {
int count = result.getInt(2);
count++;
String update = "update Word set mean = '" + mean + "', count = " + count
+ " where name = '" + word+ "'";

stmt.executeUpdate(update);
}

stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void showTable() {
Connection con = getConnection();

String select = "SELECT * FROM Word ";

try {
stmt = con.createStatement();
ResultSet result = stmt.executeQuery(select);

while(result.next()){
String word = result.getString(1);
String mean = result.getString(2);
int imp = result.getInt(3);
int count = result.getInt(4);

System.out.println("영어 단어 " + word + " 영어 뜻 " +
mean + " 중요도" + imp + " 저장횟수 " + count);
}
stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void DeleteWord(String word) {
Connection con = getConnection();

String delete = "DELETE FROM Word where name = '" + word + "'";

try {
stmt = con.createStatement();
stmt.executeUpdate(delete);

stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void setTable(JTable table,DefaultTableModel model) {
Connection con = D_DB.getConnection();
String select = "SELECT name FROM Word";

String title = "word";

try {
stmt = con.createStatement();
ResultSet result = stmt.executeQuery(select);

model.addColumn(title);
while (result.next()) {
String word = result.getString(1);

model.addRow(new Object[] { word });

}
stmt.close();
con.close();

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void getData(String[] data, String word){
Connection con = getConnection();

String select = "SELECT name,mean FROM Word where name = '" +
word + "'";

try {
stmt = con.createStatement();
ResultSet result = stmt.executeQuery(select);

while(result.next()){
data[0] = result.getString(1);
data[1] = result.getString(2);
}
stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


 이 Code를 D_DB.java 라는 클래스를 새로 만든 후 붙여 넣으면 된다.

 질문 사항이 있으면 댓글을 달아주시기 바랍니다.

 다음 번에는 단어장을 만들 때 필요한 GUI를 만드는 방법을 알려드리겠

 습니다.

댓글 없음:

댓글 쓰기