본문으로 바로가기

Gradle로 Spring을 해보자 with Intelli J 14 - 제4편  mysql db와 연동을 확인 해보자





2015/04/11 - [Web개발/JAVA] - Gradle로 Spring을 해보자 with Intelli J 14 - 제1편 Gradle로 Java Project 생성하기

2015/04/13 - [Web개발/JAVA] - Gradle로 Spring을 해보자 with Intelli J 14 - 제2편 Gradle로 mysql jdbc driver dependency 설정하기

2015/04/13 - [Web개발/JAVA] - Gradle로 Spring을 해보자 with Intelli J 14 - 제3편 MySQL에 DB생성하기



이전 글에서 gradle로 project를 생성하고 jdbc driver를 import하고 'build success'까지 확인 하고

MySql설치, 실행 하고 db에 row까지 추가하고 select까지 해보았다.

이번에는 gradle로 import한 mysql jdbc driver가 제대로 작동을 해서 select한 내용이 java console에 잘 찍히는지를 확인 해보자.




일단 아래 순서로 진행을 해볼 생각이다.

1.초간단 DAO Class 생성

2.create db

3.insert

4.select




/java/에 'UserDao'라는 Class를 생성 했다. 


별거 없지만 소스코드는 아래와 같다.

public class UserDao {

public Connection getConnection(){

return null;
}

public User select(){

}
}



위 화면을 보면 idea에서 'User'에 빨간색으로 색칠을 해줬다.


toby에 나온대로 select를 했을 때 User object type으로 return을 받고 싶은데 'User' object가 없으니까 나오는 경고 표시이다.


그럼 'User' Object를 만들어 보자.


이전 포스트에서 DB에 만들었던 table이 'user'이기 때문에 똑같은 모양으로 'User' Object를 만드는 것이다.



Intelli J는 여러가지 편의 기능을 제공하는데 여기에서는 'Alt + enter'를 누르면 현재 상황에서 적절한 작업을 추천 해준다.


alt + enter 를 누르고 'Create class User'를 선택하자.


이렇게 안하고 그냥 /java/에서 우측 클릭 해서 'java Class를 만들기'를 눌러도 된다.


그러면 위와 같이 package를 정하는 화면이 나오는데 package 는 나중에 정해주기로 하고 그냥 엔터를 눌러준다.



그러면 아래와 같이 User Class가 생성이 된다.




아래와 같이 필드를 추가해 준다.


소스코드는 아래와 같다.

public class User {

   private String name;

   private String id;

   private String password;

}




User object의 getter와 setter를 만들어 주기 위해 alt + insert를 눌러서 getter와 setter를 만들어 주는 기능을 호출한다.


eclipse는 마우스 오른쪽 클릭하고 format인가 누르면 getter와 setter를 만들 수 있는걸로 기억한다.... 기억이 맞는지..



Intelli J에서는 아래와 같은 화면이 나온다.



전체 선택 해주고

OK나 enter를 눌러준다.



그러면 아래와 같이 예쁘게 만들어진다.

00 레알 그러하다.


완성된 소스코드는 아래와 같다.

public class User {

private String name;
private String id;
private String password;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}



UserDao object를 보면 User에 빨간불이 없어졌다.

아직 'return'을 안써줘서 여기저기 빨간줄이 보인다.



'return null'을 넣어주면 빨간줄이 모두 없어진다.


ㅇㅇ 그러하다.



계속 해서 UserDao object를 만들어보자.


일단은 getConnection() method를 완성 해보자.


이런 식으로 만들면 된다. 소스코드는 아래와 같다.


public Connection getConnection() throws SQLException, ClassNotFoundException {

Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(
"jdbc:mysql://localhost/krkdb"
,"root"
,"111111");

return c;

}

설명을 좀 붙여보면 "jdbc:mysql://localhost/krkdb" 이거는 똑같이 쓰면 되는데 맨 뒤에 'krkdb' 부분을 본인이 만든 db이름을 정해주면 된다. 나는 'krkdb'라고 db이름을 정했으니까 'krkdb'라고 쓴 것이다.

db에 주황색으로 표시한 부분이다.



그리고 id랑 password를 본인이 지정한걸로 넣어주면 된다 pw를 지정하지 않았으면 ""으로 넣으면 된다.





그리고 db에서 select를 해서 User object를 return하는 method인 select()를 완성하자



소스코드는 아래와 같다.

public User select(String id) throws SQLException, ClassNotFoundException {


Connection c = getConnection();

PreparedStatement ps = c.prepareStatement("select * from user where id = ?");
ps.setString(1, id);

ResultSet rs = ps.executeQuery();
rs.next();

User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));

rs.close();
ps.close();
c.close();

return user;
}

id를 받아서 user object로 돌려주는 기능을 하는 method다.


그럼 한번 제대로 실행 되는지 Test해보기 위해 public static void main을 만들어 보자.



소스코드는 아래와 같다.
public static void main(String[] args) throws SQLException, ClassNotFoundException {
    UserDao dao = new UserDao();
User user = dao.select("oceanfog");

System.out.println(user.getName());
System.out.println(user.getId());
System.out.println(user.getPassword());


}

다른건 똑같이 하면 되는데 User user = dao.select("oceanfog"); 이 부분에서 나는 내가 전에 입력한 내가 자주 쓰는 id인 "oceanfog"를 넘겨 주었다. 본인이 db에 넣은 id를 넣어준다.

위 db에 id field에 적은 값이다.



그리고 실행 해보자.


intelli j에서 단축키는 ctrl + shift + f10이다.

우측 상단에 '실행'버튼을 눌러도 되고

상단 메뉴 Run - Run 을 해도 된다.


편한걸로 실행하면 된다.


흠.... 이런... 에러가 났다. 무슨 에러인지 확인 해보자.


Exception in thread "main" java.sql.SQLException: Illegal operation on empty result set.

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)

at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:781)

at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5239)

at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5162)

at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5201)

at UserDao.select(UserDao.java:30)

at UserDao.main(UserDao.java:43)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)


Process finished with exit code 1



이런 에러. Illegal operation on empty result set. 값이 없다는 에러인 것 같다. 'oceanfog'로 검색 했는데 값이 없다는 에러인 것 같다. db를 확인 해보자.




흠 내가 id를 입력할 때 오타를 냈다. 고치고 다시 실행 해보자.




고치고 실행했다.




긋긋!! 성공!


메세지는 아래와 같다.


kyeongrok

oceanfog

1123


Process finished with exit code 0



이로써 gradle로 library를 추가하고 db설치, 실행 하고 java로 연동까지 해보았다.




end.








댓글을 달아 주세요