mysql -uroot -p;
connectdb 라는 이름으로 데이터베이스 생성
create database connectdb;
db 사용자 생성과 권한 주기 (8.0 기준)
CREATE USER 사용자이름@localhost IDENTIFIED BY '암호';
GRANT ALL PRIVILEGES ON connectdb.* TO '사용자이름'@'localhost';
dbms에게 적용하기
flush privileges;
생성한 db에 접속하기
mysql -h호스트명 -uDB계정명 -p 데이터베이스이름
db 연결 끊기
exit 또는
quit
쿼리 입력중 취소해야하는경우
\c
존재하는 db 보기, 테이블 보기, db 전환하기
show database;
show table;
use db이름;
class 명 : 첫글자를 대문자로
프로젝트 명, 패키지명 : 소문자
자바와 데이터베이스를 연결해주는 것
자바 프로그램내에서 sql문을 실행하기 위한 자바 api라고도 할 수 있다.
SQL과 프로그래밍 언어의 통합 접근 중 한 형태
표준 인터페이스인 JDBC API를 제공
Class.forName("com.mysql.jdbc.Driver");
Connection 객체를 생성한다. (=db에 접속한다)
String dburl="jdbc:mysql://localhost/dbName";
Connection con=DriverManager.getConnection(dburl,ID,PWD);
//DB 벤더에서 우리 DB사용하려면 이렇게 써야한다고 알려준다.
Statement 객체를 생성 및 질의 수행(=쿼리 만들고 실행)
Statement stmt=con.createStatement();
ResultSet rs=stmt.excuteQuery("select no from user");
SQL문에 결과물이 있다면 ResultSet 객체를 생성한다.
ResultSet rs= stmt.executeQuery("select no from user");
while(rs.next())
System.out.println(rs.getInt("no"));
//데이터는 db가 가지고 있다 프로그램에서는 레퍼런스만 가질뿐이다 (만약 만건의 데이터가 들어올때 서버가 다 수용할수 없기 때문)
rs.close();
stmt.close();
con.close();
//가장 마지막에 열린 result set을 가장 먼저 닫아주고 역순서로 닫아줘야함
=> 반복적인 작업을 framework가 알아서 실행해준다.
-Maven의 장점
의존성 라이브러리 관리 : Maven을 사용하면 설정 파일에 몇 줄 적어줌으로써 직접 다운로드 받거나 하는 것을 하지 않아도 라이브러리를 사용할 수 있습니다.
-Maven 태그의 의미
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kr.or.connect</groupId>
<artifactId>examples</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mysample</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
project : pom.xml 파일의 최상위 루트 엘리먼트(Root Element)입니다.
modelVersion : POM model의 버전입니다.
groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정합니다. 일반적으로 도메인 이름을 거꾸로 적습니다.
artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정합니다. Maven을 이용하여 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성됩니다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성됩니다.
packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정합니다. jar, war, ear 등이 해당됩니다.
version : 프로젝트의 현재 버전. 추후 살펴보겠지만 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용합니다. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 합니다.
name : 프로젝트의 이름입니다.
url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능합니다.
Group Id는 보통 프로젝트를 진행하는 회사나 팀의 도메인 이름을 거꾸로 적습니다.
Artifact Id는 해당 프로젝트의 이름을 적습니다.
버전은 보통 기본값(0.0.1-SNAPSHOT)으로 설정합니다.
package이름은 group id와 Artifact Id가 조합된 이름이 됩니다.
Group Id를 kr.or.connect이고 Artifact Id가 mavenweb으로 설정했기 때문에 package이름은 kr.or.connect.mavenweb이 됩니다.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
mysql dependency 추가
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
플러그인 추가
package kr.or.connect.jdbcexam.dto;
public class Role {
private Integer roleId;
private String description;
public Role() {
}
public Role(Integer roleId, String description) {
super();
this.roleId = roleId;
this.description = description;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Role [roleId=" + roleId + ", description=" + description + "]";
}
}
package kr.or.connect.jdbcexam.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import kr.or.connect.jdbcexam.dto.Role;
public class RoleDao {
private static String dburl ="jdbc:mysql://localhost:3306/connectdb?useSSL=false";
private static String dbUser ="Mysql";
private static String dbpasswd="6497";
public Role getRole(Integer roleId) {
//roleId(Primary Key)에 해당하는 한 건의 정보를 가져오는 메서드
Role role =null;
Connection conn=null;//연결을 맺어낼 수 있는 객체를 선언
PreparedStatement ps =null; //statement 객체 선언
ResultSet rs =null; //결과값을 담을 객체 선언
//예외처리
try {
//드라이버 로딩
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(dburl,dbUser,dbpasswd);
//connection에 statement 연결
//getRole의 인자로 들어온 role_id 값이 ?에 들어감
//이 물음표를 대신해서 사용해주는 것이 preparedStatement라는 쿼리의 특징이다
String sql ="SELECT role_id,description FROM role WHERE role_id=?";
ps=conn.prepareStatement(sql);
ps.setInt(1,roleId); //인자1: 몇번째 물음표인지 인자 2: 실제 ?에 들어갈 값
//쿼리 실행
rs=ps.executeQuery();
if(rs.next()) //next메서드는 결과값이 있다면 첫 번째 레코드로 코드를 이동시키고 true 리턴해줌
{
//값 꺼내오기
int id= rs.getInt("role_id"); //이렇게 이름을 적어줄 수도 있고 아래처럼 몇번째인지 적어줘도 된다.
String description = rs.getString(2); //두번째 칼럼의 값
//role 객체에 담아서 보내줌
role=new Role(id,description);
}
}catch(Exception e) {
e.printStackTrace();
}finally { //반드시 수행되는 구절에서 닫아주는 코드 써주기
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return role;
}
}
package kr.or.connect.jdbcexam;
import kr.or.connect.jdbcexam.dao.RoleDao;
import kr.or.connect.jdbcexam.dto.Role;
public class JDBCExam1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
RoleDao dao=new RoleDao();
Role role=dao.getRole(100);
System.out.print(role);
}
}