#2-2 / spring + database 연결,회원가입 JSTL+spring+Datasource
hingu
2024. 7. 9. 14:53
⚡ database 연결에 따른 결과값 출력
* 2가지 방식 => 맘에드는 방식으로 사용^_^ 1. XML형태의 DB연결 2. properties+JSTL => spring legacy 프로젝트일 때 사용 , 차후에 진행
XML형태의 DB연결 시 필요한 라이브러리 (필수) - from) pom.xml 1. mysql-connector-java 2. spring-jdbc : @ 이용하여 resource 형태로 db연결하여 구성 3. commons-dbcp ( dbcp란? Database Connection Pool ) : spring,spring-boot에서만 사용가능 => 다운법 : https://dev-eunse.tistory.com/193 의 22번,23번 (mybatis는 해당 예제에서 필요 없음) mybatis : java에 DAO + SQL colomn 을 서로 연동하여 사용할수 있는 기능
- mainpage2.java
package webspring;
@Controller
public class mainpage2 {
//Database 연결 => Spring
@Autowired
//Database 접속정보 xml 파일 로드 (dbInfo : 우리가 dbconfig.xml에 적은 id)
BasicDataSource dbInfo;
@GetMapping("/datalist.do") //jsp 찾음
public String datalist() {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = this.dbInfo.getConnection();
String sql = "select count(*) as ctn from user";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
rs.next();
System.out.println(rs.getString("ctn")); //data 갯수 출력됨
ps.close();
rs.close();
}catch(Exception e) {
System.out.println(e);
System.out.println("database 접속 오류");
} //이제 con은 안닫아줘두댐
return null;
}
}
@Autowired 모든 메소드에 사용할수 있는 객체 및 Bean을 사용할 수 있도록 의존성 여부 실행 딱 한번만 작성 단점 : 외부 class 를 호출하여 Database를 연결하면 오류발생함 : Controller에서만 사용 가능함 (걍 일반 Module에서는 사용 불가 ! ) - 값을 인자값으로 넘기면 사용 가능함 : https://dev-eunse.tistory.com/198 여기 예제에서 해봄
- dbconfig.xml (bean 파일에 생성) WEB-INF안에 beans 파일 생성 - dbconfig.xml : beans, context,mvc,jdbc 모두 최신 버전으로 체크
package webspring;
@Controller
public class mainpage2 {
/*
datasource를 이용하여 해당 정보를 db에 insert 하시오.
*/
@RequestMapping(value="/memberok.do",method=RequestMethod.POST)
public String memberok(String data[]) {
//모든 name값 동일하게 쓸 경우 단점 : 이름 다 같아서 검토할수가 없음
System.out.println(data[0]);
Connection con = null;
PreparedStatement ps = null;
try {
con = this.dbInfo.getConnection();
String sql = "insert into user values ('0',?,?,?,now())";
ps = con.prepareStatement(sql);
ps.setString(1, data[0]);
ps.setString(2, data[1]);
ps.setString(3, data[2]);
int result = ps.executeUpdate();
if(result>0) {
System.out.println("회원가입 완료");
}
ps.close();
}catch(Exception e) {
}
return null;
}
}
=> name값을 배열로 받을 경우(input name값 동일한게 여러개) 필수로 값을 받겠다라는 어노테이션을 사용하지 못함! @RequestParam