✅ Auto Commit
: 명령을 수행할 때마다 commit
✔️ 자동 커밋이 된다면 명령내릴 때마다 DB에 반영되므로 Auto커밋 off
Query/Auto-Commit transations unchecked☑️
✅ commit
: 작업 내용을 DB에 반영, 커밋 후에는 커밋 전으로 rollback 불가능
✅ rollback
: 작업 내용을 이전 커밋 상태로 되돌리는 것(undo)
✅ 조회(검색): SELECT * FROM DB명.테이블명;
✅ 삽입:
INSERT INTO 테이블명 ('열이름1', '열이름2'...) VALUES('value1', 'value2'...);
INSERT INTO 테이블명 VALUES('value1', 'value2'...);
✅ 수정: UPDATE 테이블명 SET 멤버명='수정할내용' WHERE 조건
✅ 삭제: DELETE FROM 테이블명 WHERE 조건
✔️ 실수를 방지하기 위해 조건이 없으면 삭제되지 않음
가능하게 설정을 바꾸려면 edit/preference/SQL editor/safe Updates unchecked☑️
✅ 테이블만 생성:
create table b1 select from a1 where false;
create table b1 select from a1 where 1<>1;
✅ 테이블 후 데이터도 복사:
create table b1 select * from a1;
✅ TRUNCATE tablename
✅ Ctrl+/ : 주석처리 --
✅ / ~ / : 여러줄 주석처리
✅ Ctrl+Enter : 선언한 변수 자동 출력
✔️ pom.xml에 dependency 추가: MySQL Connector/J
[실행결과]
2022-01-11 13:53:00.0
import java.sql.*;
public class DBConnectionTest {
public static void main(String[] args) throws Exception {
// 스키마의 이름(springbasic)이 다른 경우 알맞게 변경
String DB_URL = "jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8";
// DB의 userid와 pwd를 알맞게 변경
String DB_USER = "iubar";
String DB_PASSWORD = "1234";
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); // 데이터베이스 연결
Statement stmt = conn.createStatement(); // Statement를 생성
String query = "SELECT now()"; // 시스템의 현재 날짜시간을 출력하는 쿼리(query)
ResultSet rs = stmt.executeQuery(query); // query를 실행한 결과->rs
// 실행결과가 담긴 rs에서 한 줄씩 읽어서 출력
while (rs.next()) {
String curDate = rs.getString(1); // 읽어온 행의 첫번째 컬럼의 값을 String으로 읽어서 curDate에 저장
System.out.println(curDate); // 2022-01-11 13:53:00.0
}
}
}
✔️ pom.xml에 dependency 추가: Spring JDBC
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
root-context.xml
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8"></property> <property name="username" value="iubar"></property> <property name="password" value="1234"></property> </bean>
public class DBConnectionTest2 {
public static void main(String[] args) throws Exception {
/* String DB_URL = "jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8";
String DB_USER = "iubar";
String DB_PASSWORD = "1234";
String DB_DRIVER = "com.mysql.jdbc.Driver";
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(DB_DRIVER);
ds.setUrl(DB_URL);
ds.setUsername(DB_USER);
ds.setPassword(DB_PASSWORD); */
// 데이터베이스 정보가 변경될때마다 수정하고 컴파일을 다시 해야하므로
// 객체에 대한 setter 처리를 프로퍼티 태그 처리
// bean태그로 바꾸고 root-context에 넣어줌
ApplicationContext ac = new GenericXmlApplicationContext("file:src/main/webapp/WEB-INF/spring/**/root-context.xml");
DataSource ds = ac.getBean(DataSource.class);
Connection conn = ds.getConnection();
System.out.println("conn = " + conn);
}
}
: Test 자동화_TDD(Test Driven Development)
pom.xml
<!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework-version}</version> <scope>test</scope> </dependency>
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import static org.junit.Assert.assertTrue;
// JUnit이 작동하면서 SpringJUnit4ClassRunner를 가지고 test
// 수동과 다르게 하나의 ac를 재사용하기 때문에 성능 ↑
@RunWith(SpringJUnit4ClassRunner.class) // ApplicationContext ac 자동생성
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"}) //xml 표준 파일 위치 지정
public class DBConnectionTest2Test {
@Autowired //자동
DataSource ds;
@Test
public void springJdbcConnectionTest() throws Exception{
// 수동
// ApplicationContext ac = new GenericXmlApplicationContext(
// "file:src/main/webapp/WEB-INF/spring/**/root-context.xml");
// DataSource ds = ac.getBean(DataSource.class);
Connection conn = ds.getConnection(); // 데이터베이스의 연결
System.out.println("conn = " + conn);
assertTrue(conn!=null); // 괄호안의 조건이 true면 테스트 성공, 아니면 실패
}
}
cf) SpringJUnit4ClassRunner requires JUnit 4.12 or higher.(ver 4.7 < 4.12)
참고) 자바의 정석 | 남궁성과 끝까지 간다