160329: 12회차
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
어제 한 ChatServerThread랑 ChatClientThread에서 보면
Server는 Port를 열어놓고
InetAddress(IP관련 클래스) - 를 통해서 접속 확인함... -_-);;
// 데이터를 읽어오는 스레드
ChatServerReadHandler read = new ChatServerReadHandler(socket);
// 데이터를 보내는 스레드
ChatServerSendHandler send = new ChatServerSendHandler(socket);
public static void main(String[] args) {
ChatServerThread cs = new ChatServerThread();
cs.serverStart();
}
이렇게 메인에서는 객체 생성을 하고 start() 시켜놓고 있다가 run()당함
class ChatServerReadHandler extends Thread {
private Socket socket;
이런건 스레드의 자식인데 그래서 얘도 스레드
getInputStream()은 아예 리턴타입이
InputStream java.net.Socket.getInputStream() throws IOException
인데 그냥 간단하게 읽어오려고
(new InputStreamReader(socket.getInputStream()) 이렇게 리더로 감쌌음
while (true) {
line = reader.readLine();
그래서 무조건 읽어오는 코드인데
if (line == null) {
break;
}
만약에 라인이 null이면 break함.
이런 식으로 더 이상 데이터가 없을때까지 계속 돌림
new OutputStreamWriter(socket.getOutputStream())
얘도 아웃풋스트림을 롸이터로 감쌌음
롸이터 ㅋㅋㅋㅋㅋ 라이터도 이상하자낰ㅋㅋ
Writer인걸로ㅋㅋㅋㅋㅋㅋㅋㅋ
writer.write(s);
//얘는 그냥 써주는 기능임
writer.newLine(); // 줄바뀜 기호가 있어야 BufferedReader의 readLine()이 인식함
//얘는 \n 기능임
writer.flush(); // client로 전송
//얘는 밀어주는 기능임
-------------------------------------------------------------------------------------
ChatClientThread에서 보면
메소드에서 파라미터로 ip를 받아서 작동함 - 이름이 ip긴한데 i로 해도 상관없지만 그냥 ip를 입력받음... - 도스창에서? 'ㅁ'
InetAddress ia = socket.getInetAddress();
int local_port = socket.getLocalPort();// 접속에 사용된 PORT
//얘는 그냥 접속하기 위해서 얻는 용도고
int server_port = socket.getPort();// 접속에 사용된 PORT
//얘가 진짜 쓰는 포트래 ... -_-);;
String server_ip = ia.getHostAddress(); // 원격 Client IP
// 데이터를 읽어오는 스레드
ChatClientReadHandler read = new ChatClientReadHandler(socket);
read.start();
// 데이터를 보내는 스레드
ChatClientSendHandler send = new ChatClientSendHandler(socket);
send.start();
Dave's not here man 인것임니다 -_-);
-------------------------------------------------------------------------------------
[25] import문과 Package문의 활용, 박싱/언박싱,제너릭(Generics)
벌써 25라니 port 계열은 한 10번 봐야 할 거 같다 -_-);;
패키지!
패키지는 클래스들을 그룹으로 묶어 지정하는 것 :>
폴더에서 파일 분류하듯이 - 패키지는 클래스를 그룹별로 분리함 :>
그러니까 폴더랑 똑같은거십니다
클래스는 java.lang을 자동으로 import하니까 선언하지 않아도 됨 :>
- 패키지 클래스는 반드시 javac -d . *.java로 컴파일 할것
↑ ↑
│ │
│ 기준 폴더(현재 폴더)
│
└ 지정된 폴더안에 패키지의 형태로
폴더를 만든후 컴파일된 클래스 저장
저기 위에 기준 폴더로 할 경우는 .이고 다른 경우엔 그냥 폴더명 써줘도 된대 -_-);;
에디트플러스로 이용중...
체험판 ㅠㅠ...프로그램 배우면서 체험판 쓰니까 넘 슬프다
내가 만들어도 체험판으로 쓰려나 ㅠㅠ...
그리고 크랙 만들어서 쓰라하고..
요렇게 해보기 :>
1) 코드 복붙
package corejava;
public class Star {
public String show(){
return "★☆★☆★☆★☆★☆";
}
public static void main(String[] args){
Star star = new Star();
System.out.println(star.show());
}
}
2) 디렉토리에 가서 javac -d . Star.java
3) corejava 디렉토리 생긴거 확인하고
4) java corejava.Star 하면 나옴
이미 corejava라는 디렉토리가 있으면
Star2.java라는 거
package corejava;
public class Star2 {
public String show(){
return "★☆★☆★☆★☆★☆";
}
public static void main(String[] args){
Star2 star = new Star2();
System.out.println(star.show());
}
}
이렇게 만들어도 그냥 그 안에 컴파일 된다.
이렇게 . 대신 폴더 경로를 넣어주면
.은 자바 파일의 바로 위 경로에 만들어 주는 것... :> - 그러니까 얘가 포함됨 -_-)ㅋㅋ
이클립스에서 패키지 폴더 안에 파일이 있는것처럼 ^ㅁ^
이렇게 잘 만들어진다.
-------------------------------------------------------------------------------------
[2] Eclipse에서의 패키지 처리 및 패키지간 참조
1. import의 사용
- CLASSPATH은 하드디스크상에 클래스들이 어디에 위치하는지 경로를
지정하는 역활을 합니다.
- import문은 그 경로상에서 어떤 패키지들을 참조(조회)할것인지
지정하는 명령어입니다. 따라서 CLASSPATH에 경로가 등록이
되었다고 클래스를 사용할 수 있는 것이 아니라 import 문을 이용하여
패키지를 지정해야 합니다.
- 다른 패키지를 가져다 사용할 경우 선언합니다.
- 참고할 패키지의 경로를 지정합니다.
package corejava;
//import java.text.DecimalFormat;
//임포트를 안하면 소속을 찾지 못해서 오류뜸
//java.text.DecimalFormat;는
//java 폴더 안의 text 폴더 안에 DecimalFormat 클래스가 있는 것
// ㅇㅇ
//import java.text.*;
// 얘는 그냥 모든 걸 다 쓰겠다고...
// 자바 텍스트 패키지의 모든것을... -_-+
//어짜피 c처럼 끌고 들어오는 게 아니라서 - 라이부러리 x
// 그냥 *해줘도 상관없음염
//ctrl+shift + O - 해주면 Organize source 해줘서 임포트 한방에 해줌
//넘나좋은 이클립스 ㅋㅋㅋㅋㅋㅋ
public class PackTest {
public static void main(String[] args) {
// java.lang 패키지는 자동으로 import됨으로
// import문을 명시할 필요가 없습니다.
java.lang.String su = "2000000";
int isu = Integer.parseInt(su);
java.lang.System.out.println(isu);
DecimalFormat df = new DecimalFormat("#,##0");
String str = df.format(isu);
System.out.println("\\ " + str);
}
}
-------------------------------------------------------------------------------------
[2]. 박싱/언박싱
- 기본타입과 참조타입 클래스에서 발생합니다.
- 박싱: 기본타입 -> 참조타입
- 언박싱: 참조타입 -> 기본타입
- 주로 기본타입과 랩퍼클래스에서 이루어 집니다.
//모르는것: diffrence of int and Integer
//http://includestdio.tistory.com/1
1. Primitive 자료형 - Wrapper 클래스 관계
int | primitive 자료형 (long, float, double ...) |
산술 연산이 가능하다. | |
null로 초기화 할 수 없다. | |
Integer | Wrapper 클래스 (객체) |
Unboxing을 하지 않으면 산술 연산이 불가능 하지만, null 값을 처리할 수 있다. | |
null 값 처리가 용이하기 때문에 SQL과 연동할 경우 처리가 용이하다. | |
DB에서 자료형이 정수형이지만 null 값이 필요한 경우 VO에서 Integer를 사용할 수 있음. |
2. int와 Integer간의 변환
- Boxing과 Unboxing이라고 한다.
Boxing | Primitive 자료형 -> Wrapper 클래스 |
Unboxing | Wrapper 클래스 -> Primitive 자료형 |
3. Auto boxing / unboxing
- 자바에서는 모든 경우는 아니지만 대부분의 경우에는 자동으로 boxing / unboxing을 해준다.
- 예제 코드
1 2 3 | int i = 1 ; Integer integer = i; // int -> Integer (Auto boxing) int i2 = integer; // Integer -> int (Auto unboxing)
|
출처: http://includestdio.tistory.com/1
내 블로그는 파워블로거 하려고 올리는 게 아니라 공부한거 읽으려고 올린 거지만 출처는 꼭 씁니다 ㅠㅠ...
package day12;
import java.util.Vector;
public class BoxingUnBoxingMain2 {
public static void prints(Vector vi){
int num = vi.size();
int sum = 0;
for(int j = 0; j<num; j++){
//sum += ((Integer)vi.get(j)).intValue();
sum += (Integer)vi.get(j); //unboxing
}//end for
System.out.println("합 : " + sum);
}
public static void main(String[] args) {
Vector v = new Vector(5,5);
v.add(new Integer(3));
//컬렉션에는 해시코드만 들어가니까! :>
v.add(1); //boxing
//new Integer(1) 이 들어가니까! boxing
v.add(5); v.add(4);
v.add(8); v.add(3);
Integer gg = 3;
//3자리는 사실 해시코드가 들어가야 하니까 오토빡씽
int ff = new Integer(4);
//int는 new 이런거 안받는데 걍 들어가짐 -> 오토언빡싱
int aa = (Integer)v.get(2);
//애드한 2번째꺼 겟 - 근데 얘도 해시코드 들어가있는것
System.out.println("unboxing 예: " + aa);
prints(v);
//모르는것: diffrence of int and Integer
//http://includestdio.tistory.com/1
}
}
--------제너릭도 써봅시다------------- 이거 쓰면 코드가 단순해져서 조음맨
package day12;
import java.util.Vector;
public class BoxingUnBoxingMain {
public static void prints(Vector <Integer> vi){
//vector안에는 Integer만 들어간다고 선언하면 제너릭 :>
//그냥 박싱 언박싱 :> - 형변환 x
int num = vi.size();
int sum = 0;
for(int j = 0; j < num; j++){
sum += vi.get(j); // 얘만 언박싱 - 참조형 -> 기본형 (더해줌)
}
System.out.println("합: " + sum);
}
public static void main(String[] args) {
Vector <Integer> v = new Vector <Integer> (5,5);
/*
* Vector(int size, int incr)
size 개의 데이터를 저장할 수 있는 길이의 객체를 생성한다.
저장 공간이 부족한 경우 incr 개씩 증가한다.
http://hyeonstorage.tistory.com/208
* */
v.add(1); v.add(5); v.add(4); v.add(8); v.add(3);
//박싱친구들
//아까는 제너릭 아니어서
//매개변수가 Object였는데
//이번에는 boolean java.util.Vector.add(Integer e)
//인티저! :>
prints(v);
}
}
-------------------------------------------------------------------------------------
[03] Generics
- 객체를 저장하는 기술인 Collection Framework의 단점을 개선한 기능
- 클래스나 메소드에 자료형을 매개변수 형식으로 사용할 수 있는 기능.
- Class ArrayList<E>에서 'E'가 있는 곳에는 ArrayList를 선언하고 생성할 때 사용할 실제타입
- E는 Element(원소)를 말하며, new ArrayList<String>() 이면 'E'는 'String' 클래스를 가르키며,
< > 안의 String은 유형 매개 변수 (type parameter)이다.
따라서 boolean add(Object o) 메소드는 boolean add(String o) 가 된다.
- 'E'는 ArrayList의 인스턴스를 만들때 < > 안에 넣는 타입을 말합니다.
응그래요... ㅎㅎ...
에러 나는 경우
package day12;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Generic {
public static void main(String[] args) {
//ArrayList 객체 10개를 저장할 수 있는 list 객체 변수 선언
ArrayList list = new ArrayList(10);
list.add(new Integer(10)); //Integer 추가
list.add("List Test"); //String 추가
//객체배열에서 순차적으로 객체를 추출하기위한 Iterator 객체 생성
Iterator i = list.iterator();
Integer su = (Integer)i.next();
System.out.println("su=" + su);
su = (Integer)i.next(); //ERROR 강제 발생 부분
//왜냐면 기껏 Integer로 가져와서는 이상하게 받음...
System.out.println("su=" + su);
}
}
- Generic 클래스
. 제네릭 클래스는 형 매개변수(type parameter)를 가지는 클래스입니다.
. 형매개변수는 객체가 생성시 전달받으며 속성이나 메소드의 자료형으로
사용됩니다.
package day12;
class SimpleGeneric<T> {
private T[] values;
private int index;
SimpleGeneric(int len) { // Constructor
values = (T[]) new Object[len];
index = 0;
}
public void add(T... args) {
for (T e : args)
values[index++] = e;
}
public void print() {
for (T e : values)
System.out.print(e + " ");
System.out.println();
}
}
public class GenericClassExample {
public static void main(String[] args) {
SimpleGeneric<Integer> gInteger = new SimpleGeneric<Integer>(10);
SimpleGeneric<Double> gDouble = new SimpleGeneric<Double>(10);
gInteger.add(1, 2);
gInteger.add(1, 2, 3, 4, 5, 6, 7);
gInteger.add(0);
gInteger.print();
gDouble.add(10.0, 20.0, 30.0);
gDouble.print();
}
}
이게 왜 자동으로 바뀌는데? -_-);;;;;;
부터 막혔음..
package day12;
class SimpleGeneric<S>{
//클래스 설계도
private S[] values;
private int index;
SimpleGeneric(){
}
SimpleGeneric(int len){
values = (S[]) new Object[len];
index = 0;
}
public void add(S ... args){
//이렇게 하면 동일한 타입 1개든 100개든 받을 수 있음
//근데 타입은 같아야함 :>
//S 타입 200개 (ㅇㅋ)
//S타입 1개 + T타입 2개 = x
for(S e: args)
values[index++] = e;
}
//foreach 문인데
//S타입 e를 생성 -> args의 각 요소를 표시
//그냥 끝까지 도는 것 :>
//S가 Double이면
//double e : args 같은 것
public void print(){
for(S e : values)
System.out.println(e + " ");//으으 이것도 언박싱
System.out.println();
}
}
public class GenericClassExample {
public static void main(String[] args) {
SimpleGeneric <Integer> gInteger = new SimpleGeneric<Integer>(10);
SimpleGeneric <Double> gDouble = new SimpleGeneric <Double> (10);
gInteger.add(1,2);
//public void add(S ... args) 요렇게 생겨서
//밑에것도 넣고 다 넣을 수 있음 ... 인것 -_-ㅋㅋ
gInteger.add(1,2,3,4,5,6,7);
gInteger.add(0);
gInteger.print();
gDouble.add(10.0, 20.0, 30.0);
gDouble.print(); // 3개밖에 없으니까 나머지 7개는 null값 출력
}
}
-------------------------------------------------------------------------------------
>>>> MultipleTypeParam.java
package day12;
class Price<N, V> {
private N[] names;
private V[] values;
private int index;
Price() {
}
Price(int size) {
names = (N[]) new Object[size];
values = (V[]) new Object[size];
index = 0;
}
public void insert (N n, V v){
names[index] = n;
values[index] = v;
++index;
}
public void print() {
for (int i = 0; i < index; i++) {
System.out.println(names[i] + " : " + values[i]);
}
}
}
public class MultipleTypeParam {
public static void main(String[] args) {
Price<String, Integer> p1 = new Price <String, Integer>(10);
Price<String, Double> p2 = new Price <String, Double>(10);
p1.insert("Apple", 1200);
p1.insert("Banana", 2000);
p1.insert("Grape", 4500);
//String, Integer
p2.insert("USD", 943.0);
p2.insert("JPY", 822.86);
p2.insert("EUR", 1273.05);
System.out.println("*** Fruit Price ***");
p1.print();
System.out.println("*** Exchange Rate ***");
p2.print();
}
}
. 클래스와 마찬가지로 형 매개변수를 가지는 제네릭 인터페이스를 선언합니다.
[정의]
interface InterfaceName<type parameter>{
// .... interface body
}
그냥 위에것처럼 만들어놓고 구현해다가 쓰면 됨
package day12;
interface GenericInterface<T> {
public void setValue(T x);
public String getValueType();
}
class GenericClass<T> implements GenericInterface<T> {
private T value;
public void setValue(T x) {
value = x;
}
public String getValueType() {
return value.getClass().toString();
// 무슨 타입인지 알려면 getClass인것
}
}
public class GenericInterfaceExample {
public static void main(String[] args) {
GenericClass<Integer> gInteger = new GenericClass<Integer>();
GenericClass<String> gString = new GenericClass<String>();
gInteger.setValue(10);
gString.setValue("Text");
System.out.println(gInteger.getValueType());
System.out.println(gString.getValueType());
// 제너릭 타입은 형이 확정되는 게
// 객체가 생성될 때임!
// 객체 생성 안되면 형 확정 x
}
}
. 자바에서 제네릭 프로그램의 단위에는 클래스와 인터페이스, 그리고
메소드가 있습니다.
[정의]
<type parametr>return_type MethodName<parameter>{
// .... method body
}
package day12;
public class GenericMethodExample {
public static <T> void printArgInfo(T arg) {
//호출 시점에서 타입이 확정된다.
System.out.print("Argument Type is " + arg.getClass());
System.out.println(" / Value is " + arg.toString());
}
public static void main(String[] args) {
Integer i = new Integer(10);
char c = 'A';
float f = 3.14f;
printArgInfo(i); // <Integer> void printArgInfo(Integer)
printArgInfo(c); // <Character> void printArgInfo(Character)
printArgInfo(f); // <Float> void printArgInfo(Float)
//내부적으로 boxing 되는것
//파라미터 - 기본형
//내부 - 래퍼로 형변환
}
}
저 퍼런 글자 이후로 기억을 잃음
다시 볼 것...
어 그래서 자바 끝났나보나맨 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
신남 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
-------------------------------------------------------------------------------------
[01] 데이터베이스 개론
데이터베이스:
일관성을 유지하며 데이터의 중복을 막은 것
데이터를 검색 / 통합할 수 있는 것
여러 사람이 함께 자료를 열람할 수 있는 것
데이터:
정리되지 않은 정보 + 자료들
1) 파일 처리 시스템
데이터들의 연관성이 높아서 유지관리가 어려움
- 한개를 바꾸면 다른 것도 하나 하나 다 바꿔 줘야 함
- 데이터가 독립된 별개의 파일에 저장되므로 데이터의 유지관리가 어렵다
그래서 2) 데이터 베이스 시스템
데이터베이스 매니지먼트 시스템을 도입해서 쟤가 관리하게함
3. 테이블(엔티티)의 구조
필드(=column) - 열 (실제 데이터)
레코드 - 행 (필드를 묶어놓으면 레코드)
- 2차원 배열의 형태를 가지고 있습니다.
- record는 column의 집합입니다.
- table(entity)은 record의 집합입니다.
- database는 계정과 테이블의 집합입니다.
- field: 컬럼의 값
- domain: field의 범위
number wdate subject passwd <----- 컬럼, Attribute(논리적 모델링)
-----------------------------------------
1 2005-01-01 안녕하세요. 123 <----- 레코드, 행, Tupple(논리적 모델링)
2 2005-01-02 반갑습니다. 123$
3 2005-01-01 안녕하세요. 123
4 2005-01-02 반갑습니다. 123$
5 2005-01-01 안녕하세요. 123
6 2005-01-02 반갑습니다. 123$
↑ ↖
│ 테이블(Entity)
└------------------------------------- field
한행: 레코드
한열: 필드(컬럼)
넘나 재밌는것 (외울것)
4. SQL 언어의 종류
-얘는 자바가 아님 -_-);; 또 다른 언어임 ㅋㅋㅋㅋㅋㅋ 즐겁당
- ANSI SQL92, 99에 기준하여 각 데이터베이스상에서 SQL을 사용할 수 있습니다.
- DQL(Data Query Language), 데이터 질의어, 데이터 검색, 출력과 관련된 쿼리
. SELECT..FROM..WHERE //얘는 있는걸 갖다가 검색해서 쓸 때 쓰는것
씰렉트(뭐를) 패쓰워드 푸롬(위치) 멤바테이블 웨어(조건) 10개만(다갖다써도됨)
- DML(Data Manapulation Language), 데이터 조작어, 데이터 입력, 수정, 삭제와 관련된 쿼리
. INSERT, UPDATE, DELETE // 얘는 데이타 입력 수정 삭제 할 떄 쓰는 거임 -_-)
인써트도 어쩌구저쩌구가 있는데 나중에 하것지 인서트 인투 어쩌구
업데이트 셋 어쩌구 저저구
- DDL(Data Definition Language), 데이터 정의어, 테이블 생성 및 삭제, 테이블 구조 수정과 관련된 쿼리
. CREATE TABLE, DROP TABLE, ALTER TABLE // 아까 쟤네 어디다가 넣냐고 -> 공간 확보! :> 테이블 형태로 만들어져서 다 테이블임
크리에이트 테이블 - 생성맨
드롭 테이블 - 이건 delete 기능임
알터 테이블 - column이 부족할 때 추가 추가
- TCL(Transaction Control Language), 트랜잭션 제어 언어, 안정적인 데이터 처리를 위한 데이터 처리와 관련된 명령어
. COMMIT, ROLLBACK, SAVEPOINT // 트랜잭션 :>! - 응? 계좌이체?
A라는 계좌에서 B라는 계좌로 돈을 이체시킴!
1) A에서 돈을 뺸다
2) 그 돈을 B라는 계좌로 넣는다
원자성... 어 아톰...뭔데 -_-);; Atomic?
이힣ㅎㅎㅎ
- DCL(Data Control Language)데이터 제어 언어, 권한 부여와 관련된 쿼리
. GRANT, REVOKE // ㅋㅋㅋㅋㅋㅋㅋ임 아니네 이건 DBMS가 해준댕 :D 굿
잉 OCP OCJP 볼라면 계정이 있어야한대 _-_) 흐흥
오라클 - 네이버 계정으로 만들었음
비번은 어.. .아마 잊을듯 -_-)
---점심먹었음 :>----------------------------------------------------------------------------------
이제
http://www.lectureblue.pe.kr/reqtiles/read.jsp?bbsno=26&nowPage=1&col=&word=&code=1
요깄는거 mysql 쓰고있음
첨에 쓸때 use mysql 해야함 :>
show tables; 하면 가지고 있는 table 볼 수 있음
이거 안 하면 적용이 안 된다
권한을 서버에 재적용하는것 :>
이거 한 다음엔
cmd에서
start mysql -u root 하면 못 들어감
start mysql -u root -p1234(비밀번호 칠 때 한칸 띄면 안됨) - 하고 들어가야함
sql은 대소문자 구분 x
javadb라는 데이터베이스 생성
그리고 봤음
다 하면 플러시를 해조야됨미다
# MySQL이 설치된 컴퓨터에서 접근 가능하게 계정을 생성하여 지정 (학원)
GRANT ALL PRIVILEGES ON javadb.* TO javauser@LOCALHOST IDENTIFIED BY '1234';
로그인 후 (use mysql)
# 등록된 계정 출력
mysql> SELECT host, user, password FROM user ORDER BY user ASC;
오 이러면 start mysql -u javauser -p1234 해서 로그인 하면
mysql 데이터베이스 없어짐 :>
-------------------------------------------------------------------------------------
[27] [MySQL] Data Type, MySQL Connector/J 다운, SQL Explorer의 설치
숫자형은 열라많으니까 그냥 int
char
varchar 는 좀 중요함
- CHAR(m) : 1~255개의 문자 지정, 고정 길이문자, 메모리 낭비가 심함,
속도는 고속, 크기가 고정되어 있는 내용 대상, 코드값
CODE CODE_NAME
---- ---------
A001 Seoul
A002 Incheon
A003 Busan
A00_
A0__
A___
만약에 요럴 경우면 A00 이면 저런 식으로 냅두는 게 아니라 그냥 뭔가로 채워짐 -_-);;
고정 길이문자의 슬픔인것
그래서 만약에
select code from table
where code='A'
요러면 검색이 넘나 어려우니까 저 경우에는 그냥 무조건 4자리 채워줘야함
근데 속도는 좋으니까 크기가 고정되어있는 내용이나 코드값은 해주는게 조음미다
- VARCHAR(m): 1~255개의 가변 길이 문자 지정, 가변 길이 캐릭터,
메모리 재사용, 속도는 늦음, 크기가 가변적인 내용 대상
. title VARCHAR(100): 제목 내용이 10바이트만 사용되면 char와는 다르게
나머지 90바이트는 재사용합니다.
선언: CODE VARCHAR(4) NOT NULL,
CODE CODE_NAME
---- ---------
A001 Seoul
A002 Incheon
A003 Busan
A00
A0
A
select code from table
where code='A0'
- TEXT: 65535개의 문자 지정 가능
- MEDIUMTEXT: 16777215개의 문자 지정
- LONGTEXT: 4GB의 문자 지정
요런 경우에 얘는 찾아짐!
왜냐면 나머지 크기는 그냥 재사용하니까 :> 얘는 A면 그냥 A임 :>
얘는 왜 속도가 늦냐면 - 계산해서 그럼
3. 날짜형 : DATETIME 8
DATE 3
TIMESTAMP(8) yyyymmdd
이런것도 있음 ㅇㅇ
-------------------------------------------------------------------------------------
4시 26분!
4. auto_increment
- 레코드를 고유하게 구분하는 역활을 합니다.
- 순서대로 정수형 일련번호를 만들어 줍니다.
- MSSQL의 IDENTITY(1,1), ORACLE의 SEQUENCE와 같음
- 칼럼의 타입은 정수형이어야 한다. - 필수요소
- NOT NULL이어야 한다. 반드시 값을 입력해야 한다는 조건입니다.
- PRIMARY KEY이어야 한다. 중복된 값이 입력되면 안됩니다.
동명이인 같은 경우에 레코드 구분변호 :>
근데 그냥 편하게 정수형 일련번호를 만들면 중복 가능성이 없음 :>
모든 레코드는 Primary key가 있어야 하는데 이거는 중복된 값이 입력되면 안된다!!
- 테이블의 생성
. NOT NULLL: 레코드 추가시 반드시 컬럼값을 명시해야합니다.
CREATE TABLE bbs(
bbsnum INT NOT NULL AUTO_INCREMENT PRIMARY KEY, #-2147483648 ~ 2147483647
title VARCHAR(128) NOT NULL, #영숫자 128자, 한글64
content VARCHAR(200) NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET="euckr";
Not NULL하면 입력 안하면 안됨미다
show tables() 하면 만든 거 볼 수 있음.
5.자료 삽입하기
- 유형1: INSERT INTO 테이블명 VALUES(모든 컬럼의 값 나열);
- 유형2: INSERT INTO 테이블명(인서트할 컬럼명) VALUES(나열된 컬럼의 값 나열); #권장
1로 넣으면 내가 다 넣으셔야 함 - 2 추천 :>
내가 입력 안해도 bbsnum이 자동으로 1과 2로 증가됨 :>
모든 컬럼값을 명시하지 않았음으로 에러가 발생합니다.
INSERT INTO bbs values('안녕하세요.', '반갑습니다.');
6. NULL, NOT NULL
- NULL인 경우는 INSERT시에 값을 입력하지 않아도 됩니다.
- NULL속성일 경우 컬럼값을 입력하지 않으면 "NULL"기호가 값으로 입력됩니다.
- NOT NULL일 경우는 컬럼에 반드시 데이터를 INSERT시에 입력해야 합니다.
- 컬럼의 값이 NULL인 경우는 데이터가 입력된 적이 없다는 뜻입니다.
삭제도 할 수 있음
근데 인덱스가 올라가진 않고 중간에 빵꾸나네
---------실습-----------
1. bbs3 테이블 생성
2. bbs3 테이블에 레코드 3개 등록
3. 하나의 레코드에 내용수정
4. 하나의 레코드만 삭제
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
5. 수업
진도:
hw:
6. 할것
박싱 언박싱!
제네릭
jquary ajecks html5 웹퍼플리셔
'Programming' 카테고리의 다른 글
160404: 16회차 (4) | 2016.04.04 |
---|---|
160401: 15회차 (5) | 2016.04.01 |
160328: 11회차 (5) | 2016.03.28 |
160325: 10회차 (0) | 2016.03.25 |
160324: 9회차 (2) | 2016.03.24 |