SQL 변수처리 SELECT @RNUM:= @RNUM +1 AS RNUM, T1.* FROM abc T1, (SELECT @RNUM := 0) R; SQL문에서 뜬금없는 컬럼이 등장했다. @이다. abc Table에는 RNUM이 없다. 그러나 이는 잘못된 SQL문이 아니다. @은 변수지정을 뜻한다. @RNUM 은 RNUM이란 변수를 선언과 := 현재 RNUM의 값에 +1을 한다는 의미를 갖는다. 그러나 이를 단독으로 사용할 경우 RNUM에 대한 초기값이 없기 때문에 값을 알 수 없어 NULL 이 발생한다. 이에 대해 FROM 뒤에 (SELECT @RNUM := 0)이 보이는데, 이는 RNUM의 값의 초기값 지정을 의미한다. 이제 모두 해석하자면 초기값은 0이고, 행을 불러올 때마다 RNUM의 값에 +1을..
이는 MYSQL 뿐만 아니라 웬만한 SQL문에 사용 할 수 있다. SQL문장을 접한 저에게, 가장 의문스러운 일. SELECT * FROM 테이블명 WHERE 1=1 WHERE 1=1을 왜 하는걸까? 이유는 간단하다. 서버에서 SQL을 동적처리하기 위함이다. (필자는 JAVA - SPRING - MYBATIS를 사용한다.) 가장 대표적인 사이트, CGV를 예시로 들었다. 만약, 여기에 대한 검색값이 선택이 되어있지 않거나 5개의 선택값이 되었을 경우 SQL의 WHERE절 조건값은 0개에서 ~5개로 정해진다. 이때, 최소 6개의 쿼리문이 필요하게 되는데 이에 따라 SQL을 더 사용하는 것은 중복코드, 코드가 난잡해질수가 있다. 그래서 SELECT * FROM CGV WHERE WHERE 1=1 AND BI..
MYSQL ERROR 중 Public Key Retrieval is ont allowed Error가 발생되었다. Mysql의 버전이 일치하지 않기 때문. &allowPublicKeyRetrieval=true mysql javaUrl에 추가하면 된다. Ex) Globals.Url=jdbc:log4jdbc:mysql://localhost:3306/계정명?useSSL=false&allowPublicKeyRetrieval=true
출처 = 인프런 [윤재성 강사님의 스프링MVC 강의] Interceptor Spring Framework의 AOP를 활용한 Spring MVC의 요소 Interceptor는 요청 주소에 대해 관심을 갖고 요청이 발생하게 되면 요청 주소를 확인하여 Controller의 메소드를 호출하기 전이나 후에 다른 메서드를 호출 할 수 있도록 가로채는 개념 스프링은 기본적으로 WEB의 요청을 CONTROLLER가 가져가지만, AOP는 요청된 값을 전 혹은 후에 낚아채는 개념이다. 이와 비슷하게 인터셉터는 컨트롤러에게 넘어가기 전에, 값을 컨트롤러에게 넘길 것인지, 말 것인지 결정짓는 역할을 하게 된다. 요청 발생 시 호출되는 메소드의 코드가 중복 되는 부분이 있을 때 Interceptor를 처리하게 되면 피할 수 있..
mysql 사이트 www.mysql.com/ MySQL Over 2000 ISVs, OEMs, and VARs rely on MySQL as their products' embedded database to make their applications, hardware and appliances more competitive, bring them to market faster, and lower their cost of goods sold. Learn More » www.mysql.com MYSQL 설치하는 곳 들어가기, 귀찮으면 아래 링크 클릭해주세요. 더보기 1. mysql 사이트 들어간다. 상단의 다운로드 클릭 2. MYSQL Community (GPL) Downloads 클릭 3. MYSQL Com..
MYSQL 계정에 대한 작업을 하기 위해서는 반드시 ROOT 계정이 필요하다. 콘솔창에서 MYSQL ROOT 접속해보자. 1. MYSQL -U ROOT -P 입력 2. ROOT 비밀번호 입력 접속하게 될 경우 콘솔창에 이와 같이 입력한다. 계정 생성하기 CREATE USER '계정 아이디'@'접속위치(localhost)' identified by '패스워드'; user 권한 주기 GRANT ALL PRIVILEGES ON *.* TO '계정 아이디'@'접속 위치' WITH GRANT OPTION; 권한 확인하기 SHOW GRANTS FOR '계정 아이디'@'접속 위치'; ex ) SHOW GRANTS FOR 'hr'@'localhost'; 권한을 모두 주는 것은 비효율적이지만, 연습용 계정을 만들고 사용..
더보기 #Jsp 회원 가입 아이디 중복확인 비밀번호 비밀번호확인 닉네임 중복확인 내직업 /*대분류*/ /*중분류*/ /*소분류*/ 관심직업 /*대분류*/ /*중분류*/ /*소분류*/ 관심직업 /*대분류*/ /*중분류*/ /*소분류*/ 관심직업 /*대분류*/ /*중분류*/ /*소분류*/ MBTI List One Two Three MBTI 하러가기 회원가입 가입취소 Ajax 이용해서 유효성 검사를 진행하였다. 방식은 마이바티스방식을 이용하였으며, 아래는 서버하고 연결 관계이다. Controller //아이디 중복 체크 @RequestMapping("/member_join_check_id") public String member_join_check_id(@RequestParam("User_id") String..
회원가입 폼 회원가입 중복 회원가입 완료 AJAX를 이용해서 자바스크립트를 통한 유효성 검사를 진행 했다. 중복검사는 이와 같다. function user_check_id() { const user_id = $('#form-input-id').val(); $.ajax({ url: "member_join_check_id", data: {User_id: user_id}, dataType: "text", success: function (data) { alert(data); if (data == 'null') { check_id = "1"; $('#check_id_mollang').empty(); $('#check_id_mollang').append(""); } else { check_id = "0"; $('..
자기참조 구조체 struct Data { //member variable... //자기자신을 참조하는 포인터선언 }; 자기자신을 참조하게 되면, 자기자신의 구조체의 주소값을 저장 할 수 있다. 또한 이 원리를 이용하면 똑같은 구조체를 사용하는 다른 구조체 또한 사용 할 수 있게 된다. 이 방식은 링크리스트, 트리구조등 여러곳에서 사용한다. 1. Single Linked List - 단방향으로 다음 것을 가르킨다. 2. Single 환형 List - 단방향으로 다음 것을 가르키지만, 마지막은 제일 처음을 가르킨다. 이 모습이 원의 모양과 동일하다. 3. Double Linked List - Single은 포인터 하나만 갖고 있다면, 더블은 2개를 갖고 있다. - 이전과 그 다음에 대한 포인터를 가지고 있다..
동적메모리 동적메모리 할당, 해제는 전부 개발자 몫 포인터로 동적메모리 할당시 꼭 잡아줘야 한다. 포인터로 동적메모리 해제를 해줘야 한다. 동적메모리할당함수 1. malloc() : 동적메모리가 쓰레기값으로 할당. 2. calloc() : 동적메모리의 값이 0으로 세팅해서 할당. 3. realloc() : 메모리가 재할당이 되지만, 잘 사용하지 않는다. 동적메모리 해제 함수 free() void * malloc(size_t); // size_t == unsinged int 부호 없는 int와 같은 말이다. //void 포인터를 잡은 이유는 개발자가 나중에 캐스팅 하라는 의미이다. 1. malloc() #include #include #include int main() { int num; int* p; i..
#include #include void input(char(*name)[10], int(*score)[4], const char(*scoName)[10]); void oper(int(*score)[4], float* avg); void disp(char(*name)[10], int(*score)[4], float* avg, const char(*scoName)[10]); int main() { //상수 //static은 함수가 사라져도 사라지지 않기 때문에 함수에서 사용 할 수 있다. //메인에서는 굳이 사용 안해도 된다. const static char scoName[6][10] = { "name", "Kor", "Eng", "Mat", "Total", "Avg" }; char name[3][10];..
#include #include void input(int* p); void disp(int p); int main() { int a; //입력 함수 호출 input(&a); //출력 함수 호출 disp(a); return 0; } void input(int *p) { scanf("%d", p); } void disp(int p) { printf("%d\n", p); } 포인터를 이용하면 지역변수 또한 사용 할 수 있게 된다. 그러나 display는 원래의 값을 바꾸면 안되므로 그냥 값으로 전송 시켰다. 만약 disp함수에서 값이 바뀌면 안되므로 포인터를 막아 놓는다. 상황에 맞춰서 사용하는 것이 매우 중요하다.
문자열 사용하기 문자열 사용하기 코드 #include #include void main() { char name[] = "Superman"; char name2[20] = { 's','u','p','e','r' }; char name3[20]; int cmp; name3[0] = 's'; name3[1] = 'u'; name3[2] = 'p'; name3[3] = 'e'; name3[4] = 'r'; name3[5] = '\0'; //byte 크기를 알려준다. //문자열의 끝엔 항상 null이 들어간다. //그러므로 8글자이면서 byte 크기가 9가 나온다. printf("name size = %d\n", sizeof(name)); printf("name2 size = %d\n", sizeof(name2..
구조체 사용자정의 데이터 타입 기존데이터타입을 묶어서 새로운 타입을 생성 struct Score { char name[10]; //멤버 변수 int kor, eng, mat, total; float avg; }; 만들고 나면 선처리부에 항상 등록해줘야 인식된다. 구조체 변수선언 struct Score aa; aa.kor = 10; 구조체 사용하기 #include struct score; struct score { char name[10]; int kor, eng, mat, total; float avg; }; int main() { struct score student; //scanf("%s", &student.name[0]); scanf("%s", student.name); scanf("%d", &st..
다차원 포인터 떨어져 있는 메모리(값)들을 포인터를 이용해서 배열처럼 사용 할 수 있다. 사용하는 이유 일괄처리 가능하다. 관리하기 쉽다. 코드가 간결해진다. #include int main() { int* p[3];// 1. array[3] 2. int * 3개 // pointer array //int(*p)[3]; //int** p; int a = 3; int b = 4; int c = 5; int i; p[0] = &a; p[1] = &b; p[2] = &c; for (i = 0; i < 3; i++) { printf("%d \n", *p[i]); } } 포인터 배열을 통해서 각 변수들을 쉽게 관리 할 수 있게 된다. #include int main() { int(*p)[3];// 한 행당 3개의 ..