더미 데이터 넣기

꼭 모든 컬럼에 데이터를 넣을 필요없고 나의 경우엔 작성자/제목/내용 컬럼만 입력 후 값을 입력해줬다.

INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3, 컬럼4, 컬럼5 ...) 
VALUES("넣고싶은", "데이터를", "컬럼에", "맞게", "넣으시오");
추가로 다른 데이터 넣어주면 됨;

 

이 외에 프로시저를 이용하는 방법 등 다양한데 다음에 정리해보겠다.

 

https://soopeach.tistory.com/119

 

 

 

[MySQL] SCHEMA 및 테이블 생성


 

1. Schema 및 테이블 생성

 

MySQL Command Line Client를 이용해 직접 입력해주는 방법도 있지만 Workbench를 사용하면 훨씬 간편하게 스키마 및 테이블을 생성할 수 있다. 데이터 베이스의 구조는 Schema가 Table을 포함하고 Table은 Date를 포함한다고 생각하면 된다.

 

  • Schema 생성

1) MySQL Workbench 실행

2) SCHEMAS 창에서 우클릭 Create Schema 선택

3) 데이터 베이스의 이름을 정하고 저장하면 Schema 생성완료

 

  • Table 생성

1) 생성된 Schema에서 Tables 우클릭 Create Table 선택

2) Table Name를 설정하고 설계한대로 COLUMN을 추가한다. 

 

 

  • 생성된 테이블 컬럼 확인과 더미 데이터 입력 후 데이터 조회 테스트

1) 생성된 테이블 컬럼 확인

MySQL Command Line Client를 실행해 SHOW FULL COLUMNS FROM 스키마명.테이블명; 을 입력한다.

2) 더미 데이터 입력 후 데이터 조회 테스트

INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3, 컬럼4, 컬럼5 ,,,) VALUES (데이터1, 데이터2, 데이터3, 데이터4, 데이터5,,,);

3) 데이터 조회 테스트

SELECT*FROM 스키마명.테이블명;

 

 

 

 

 

Now(), SYSDATE()

현재 시각을 조회하여 반환하는 기능을 수행하는 함수


 

  • NOW()

쿼리가 실행되는 순간을 기점으로 삼아 값을 반환한다. (고정된 값)

SELECT NOW();

 

 

  • SYSDATE()

함수가 호출될 때마다 다른 값을 반환한다.

SYSDATE()를 사용하며 NOW()와 동일하게 동작하기 위해서는 SYSDATE_IS_NOW 옵션을 사용하면 된다.

SELECT SYSDATE();

 

 

 

 

쿼리 실행이 30분 소요되는 테이블을 6시에 실행했다고 가정해보자.

 

- NOW() 의 경우 쿼리 실행 시작 시간이 고정값으로 반환되며(6:00)

- SYSDATE() 의 경우 SYSDATE()가 호출될 때마다 다른 결과값이 반환된다.(시작값 6:00, 마지막 값 6:30)

 

1. 구글에 heidisql 검색

 

2. 다운로드 

https://www.heidisql.com/download.php#google_vignette

 

Download HeidiSQL

Ads were blocked - no problem. But keep in mind that developing HeidiSQL, user support and hosting takes time and money. You may want to send a donation instead. Download HeidiSQL 12.4, released on 26 Feb 2023 Please disable your adblocker and reload the p

www.heidisql.com

클릭

 

3. 다운 완료되면 폴더 위치 선택 후 (나는 c드라이브 jsp 폴더로) 설치

 

4. 완료되면 좌측 하단 신규버튼 누르고 

세션이름 설정한 후 

네트워크 유형 선택 (나는 mysql 이므로 사진처럼 선택함)

ip주소확인

사용자/암호 입력 후 열기

 

 

 

 

 

나는 원래 mysql 커맨드 라인 클라이언트를 사용했는데 교재를 보며 프로젝트를 진행하다보니 

heidisql과 문법이 다른 부분이 있어 다운받아 보았다

 

1. Server - Data Export(백업)

 

 

2. 스키마 선택 - 데이터 선택

 

옵션 선택

Export to Dump Project Folder 테이블 별로 내보낼지

(테이블 별로 관리할 수 있음, 개별관리 가능)

Export to Self-Comrained File 파일 별로 내보낼지

(하나의 파일에 모든 데이터 백업, 개별관리 어려움)

 

Start Export 클릭

 

 

 

3. Server Data Import (복원)

 

 

1. mysql workbench 설치

 

https://downloads.mysql.com/archives/workbench/

 

MySQL :: Download MySQL Workbench (Archived Versions)

Please note that these are old versions. New releases will have recent bug fixes and features! To download the latest release of MySQL Workbench, please visit MySQL Downloads. MySQL open source software is provided under the GPL License.

downloads.mysql.com

 

 

 

 

2.  로그인

좌측 커넥션 아래 상자 클릭 후 로그인(mysql pw 입력)

 

'Backend > 설치' 카테고리의 다른 글

[Maven] maven 설치 및 환경설정 / cmd로 경로 확인  (1) 2023.05.12
[Heidisql] heidisql 설치  (0) 2023.04.06
Mysql 삭제 후 재설치  (0) 2023.03.31
[Eclipse] Eclipse 설치  (0) 2023.03.29
[Tomcat] Tomcat 설치  (0) 2023.03.29

난 이런 게 제일 헷갈린다.. 기본적인 부분을 다루는데 아직 부족하다.

 

기존 pc에서

Mysql front를 실행 후  데이터베이스 선택 내보내기로 sql 파일을 저장한다.

 

파일을 저장할 pc에서

Mysql front를 실행 후 가져오기를 클릭 후 sql 파일을 선택 - 저장한다.

 

이렇게 하면 내가 입력했던 데이터베이스를 다른 컴퓨터에서도 그대로 사용할 수 있다.

 

아직 데이터베이스 관련된 기초지식이 많이 부족하다.

하지만 it공부는 끝도 없기 때문에 일단 프로젝트를 먼저 진행해보고 어떤 부분에 대한 지식이 우선순위가 되어야 하는지 알고 싶었다. 그래서 에러도 많이 나고 시간 낭비도 많이 하지만 언젠가 이런 부분이 도움이 될 것이라고 생각한다.

주말에는 데이터베이스와 네트워크 강의를 들어야겠다.

한글깨짐 에러를 해결하겠다고 mysql data 폴더에 있는 my.ini 를 편집했는데

한 번은 잘 되더니 두 번째 다시시작 때

 

mysql 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다. 

일부 서비스는 다른 서비스 또는 프로그램에서 사용되지 않으면 자동으로 중지됩니다

 

이런 창이 뜨면서 mysql 실행이 되지 않는다

 

 

1. 관리자권한으로 명령프롬프트를 연다.

 

2.  cd C:\ProgramData\MySQL\MySQL Server 5.7 입력

그 위치로 이동하겠다는 의미

 

3. 그 후로 실행이 안되기 시작했다.

[mysql] windows 'mysql'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

이런 문구가 뜬다.

아니 나 뭐 건드린 거 없는 것 같은데..주니어는 울면서 구글링을 한다.

 

4. mysql 환경변수 편집

윈도우키 + S 를 눌러 고급시스템설정을 검색 후 환경변수 편집에 들어간다.

사용자 변수 - Path - 편집에서 C:\Program Files\MySQL\MySQL Server 5.7\bin 입력 후 확인

 

 

5. 관리자 권한으로 명령프롬프트 실행 후

이렇게 입력하니 재시작되었다.

 

 

 

이런식으로 게시물 작성하면 제목과 내용의 한글이 ???로 나온다

1. 설정 전부 UTF-8로 변경해봄 -> 실패

->해결안됨

 

2. 톰캣 설치 후 server.xml 파일에  URIEncoding="UTF-8" 을 추가했으면

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

jsp 파일에 있는 맨 윗줄 이 부분의 pageEncoding="UTF-8"과 충돌하여 깨질 수도 있다고 함 -> 실패

 

<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>

그래서 이렇게 변경했지만 해결안됨

당연함. 일단 난 서버파일에 내용추가한 적이 없음

무작정 따라하지 말고 천천히 어떻게 진행했는지 기록하고 생각하면서 진행하자

 

3. 일단 톰캣 이클립스에서 server.xml 파일 수정해봄 -> 실패

URIEncoding="UTF-8" 추가 후 

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

충돌하지 않게 jsp 파일 맨 윗줄을 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

이렇게 변경해봄

 

역시나 안됨..

살려줘..

 

그런데 오늘 노트북으로 프로젝트를 옮기는 과정에서 다른 에러해결하다가 덩달아 해결됨

이유가 뭐였을까

다시 찾아봐야겠음

 

외부 컴퓨터에서는 한글깨짐 여전히 발생함

 

 

4. UserDAO, BbsDAO 파일에서 jdbc 연결 수정 -> 실패

String dbURL = "jdbc:mysql://localhost:3306/BBS";

String dbURL = "jdbc:mysql://localhost:3306/BBS?useUnicode=true&characterEncoding=UTF-8";

이렇게 수정했는데 여전히 한글깨짐 발생 

 

 

 

찾아보니 인코딩 과정이 꽤나 복잡하더라

어느 부분에서 문제가 발생하는지 알아야 해결이 쉬울 것 같음

일단 인코딩 과정이 어떻게 되는지 문제 발생 부분을 어떻게 확인할 수 있는지 확인하는 게 급선무일듯

 

 

 

5. 무한서치 결과 이클립스뿐만이 아니라 Mysql도 따로 utf8 설정을 해야 한다는 사실을 알아냈다.

강의를 급하게 따라가다보니 내가 설정을 한 건지 기억이 나지 않았다.

확인을 해보자 -> 실패

 

mysql 커맨드 클라이언트에

status 입력

 

characterset이 아래와 같이 설정되어 있다

 

변경해보자

 

1) 변경할 파일 위치확인

보통 c드라이브 - program data - mysql 폴더에 있다.

 

못 찾겠다면 

show variables where variable_name like "%dir";

입력

 

datadir                   | C:\ProgramData\MySQL\MySQL Server 5.7\Data\

위치 확인

 

 

숨긴항목을 표시하면 my.ini 파일을 찾을 수 있다.

 

 

my.ini 파일의 속성에 들어가서 

그룹 또는 사용자 이름 [편집] - Users 선택 후 - 사용권한을 모든 권한 허용해주고 확인을 누른다.

 

 

 

 

끝부분에 내용삽입

 

[client]
default-character-set=utf8

[mysqld]
character-set-client-handshake = FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server = utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set = utf8

 

 

 

 

2) Mysql 재시작

 

윈도우키 + S 누르고 서비스 입력해서 서비스앱 실행

→ Mysql 찾아서 마우스 우측 버튼 클릭 후 다시시작

 

3) 확인

utf8로 변경되었음을 확인할 수 있다.

 

 

6. Mysql 삭제 후 재설치

 

여전히 한글이 깨져서 출력되길래 status 입력하고 다시 정보확인 해보니 db가 라틴1? 로 되어 있었다.

재시작 후에도 해결되지 않아 my.ini 메모장에 다른 분의 조금 다르게 작성된 추가내용을 입력해봤다.

그리고 재시작을 했더니 발생한 에러들.. 해결과정

 

 

https://saintclair.tistory.com/74

 

에러 : Mysql 구동 에러 / 재시작 / Mysql 환경변수 설정

한글깨짐 에러를 해결하겠다고 mysql data 폴더에 있는 my.ini 를 편집했는데 한 번은 잘 되더니 두 번째 다시시작 때 mysql 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다. 일부 서비스는 다

saintclair.tistory.com

 

 

 

 

이렇게 해서 재시작을 했는데 이번엔 비밀번호가 다르다고 한다.

분명 맞는데 몇 번이나 입력했는데!

 

이것 저것 구글링해서 찾은 정보로 시도해봤지만 해결될 기미가 보이지 않는다.

이걸로 이렇게 시간을 허비하는 게 맞는 건가..?

대체 왜 안 되는 거지? 가끔 허무할 정도로 어이없게 해결되는 경우도 있어서 더이상 시간을 허비할 수 없다는 판단 하에 mysql을 삭제 후 재설치 했다.

 

 

(mysql 삭제 후 재설치 글 첨부)

 

https://saintclair.tistory.com/76

 

Mysql 삭제 후 재설치

1. 돌고래 아이콘 Mysql installer 실행 후 전체 항목 선택하고 remove 클릭 2. 제어판에서 mysql 관련 프로그램 삭제 3. C드라이브에 남아있는 mysql 관련 폴더 삭제 C:\Program Files C:\Program Files (x86) C:\ProgramDat

saintclair.tistory.com

 

 

mysql에 문제가 있어서 재설치 한 건데 한글 깨짐도 해결되었다.

신나긴 한데 원인을 알았으면 더 뿌듯했을듯 흑흑

 

근데 노트북에서도 mysql 새로 설치하고 실행했을 때 한글깨짐이 없었으니 

mysql 설치할 때나 데이터베이스 구축할 때 뭔가를 잘못하지 않았을까?..추측해본다

주니어의 의미없는 추측이지만..

1. write.jsp 생성

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import="java.io.PrintWriter" %>

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta name="viewport" content="width=device-width", initial-scale="1">

<link rel="stylesheet" href="css/bootstrap.css">

<link rel="stylesheet" href="css/custom.css">

<title>JSP 게시판 웹 사이트</title>

</head>

<body>

<%

String userID = null;

if (session.getAttribute("userID") !=null){

userID = (String) session.getAttribute("userID");

}

%>

<nav class="navbar navbar-default">

<div class="navbar-header">

<button type="button" class ="navbar-toggle collapsed"

data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">

<span class="icon-bar"></span>

<span class="icon-bar"></span>

<span class="icon-bar"></span>

</button>

<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>

</div>

<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">

<ul class="nav navbar-nav">

<li><a href="main.jsp">메인</a></li>

<li class="active"><a href="bbs.jsp">게시판</a></li>

</ul>

<%

if(userID == null){

%>

<ul class="nav navbar-nav navbar-right">

<li class="dropdown">

<a href="#" class="dropdown-toggle"

data-toggle="dropdown" role="button" aria-haspopup="true"

aria-expanded="false">접속하기<span class="caret"></span></a>

<ul class="dropdown-menu">

<li><a href="login.jsp">로그인</a></li>

<li><a href="join.jsp">회원가입</a></li>

</ul>

</li>

</ul>

<%

} else {

%>

<ul class="nav navbar-nav navbar-right">

<li class="dropdown">

<a href="#" class="dropdown-toggle"

data-toggle="dropdown" role="button" aria-haspopup="true"

aria-expanded="false">회원관리<span class="caret"></span></a>

<ul class="dropdown-menu">

<li><a href="logoutAction.jsp">로그아웃</a></li>

</ul>

</li>

</ul>

<%

}

%>

</div>

</nav>

<div class="contatiner">

<div class="row">

<form method="post" action="writeAction.jsp"> //poist - 보내지는 내용이 숨겨지도록 / 값이 writeAction.jsp로 보내짐

<table class="table table-striped" style="text-align:center; border: 1px solid #dddddd">

<thead>

<tr>

<th colspan="2" style="background-color: #eeeeee; text-align: center;">게시판 글쓰기 양식</th>

</tr>

</thead>

<tbody>

<tr>

<td><input type="text" class="form-control" placeholder="글 제목" name="bbsTitle" maxlength="50"></td>

</tr>

<tr> //textarea - 장문의 글에 사용

<td><textarea class="form-control" placeholder="글 내용" name="bbsContent" maxlength="2048" style="height:350px;"></textarea></td>

</tr>

</tbody>

</table>

<input type="submit" class="btn btn-primary pull-right" value="글쓰기">

</form>

</div>

</div>

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="js/bootstrap.js"></script>

</body>

</html>

 

 

 

2.  자바 리소스 폴더 - src 폴더 - 패키지 bbs - BbsDAO.jsp 파일 생성

 

package bbs;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

public class BbsDAO {

 

private Connection conn;

private ResultSet rs;

 

public BbsDAO() { //데이터 접근 객체

try {

String dbURL = "jdbc:mysql://localhost:3306/BBS";

String dbID ="root";

String dbPassword = "1234";       //비번 체크 잘해

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection(dbURL, dbID, dbPassword );

} catch (Exception e) {

e.printStackTrace();

}

}

 

public String getDate() {     //현재의 시간을 가져오는 함수

String SQL = "SELECT NOW()";

try {

PreparedStatement pstmt = conn.prepareStatement(SQL); //연결된 객체를 이욯해 SQL 문장을 실행준비단계로 만들어주기

rs = pstmt.executeQuery();     //실제로 실행했을 때 나오는 결과 가져오기

if(rs.next()) {

return rs.getString(1);   //현재의 날짜 반환

}

} catch (Exception e) {

e.printStackTrace();

}

return ""; //데이터베이스 오류

}

 

public int getNext() {

String SQL = "SELECT bbsID FROM BBS ORDER BY bbsID DESC";     //내림차순으로 해서 가장 마지막에 쓰인 번호 가져오기

try {

PreparedStatement pstmt = conn.prepareStatement(SQL);

rs = pstmt.executeQuery();

if(rs.next()) {

return rs.getInt(1) + 1;   //마지막 쓰인번호 +1

}

return 1; //첫 번째 게시물인 경우

} catch (Exception e) {

e.printStackTrace();

}

return -1; //데이터베이스 오류 / 게시물번호가 아닌 -1이 출력됨으로써 개발자가 오류를 알 수 있게 해줌

}

//하나의 게시물을 데이터베이스에 삽입하는 함수 write를 생성

public int write(String bbsTitle, String userID, String bbsContent) {  //실제로 글을 작성하는 함수

String SQL = "INSERT INTO BBS VALUES(?, ?, ?, ?, ?, ?)";

try {

PreparedStatement pstmt = conn.prepareStatement(SQL);

pstmt.setInt(1, getNext());   //다음번에 쓰여야 될 게시물 번호

pstmt.setString(2, bbsTitle);

pstmt.setString(3, userID);

pstmt.setString(4, getDate());

pstmt.setString(5, bbsContent);

pstmt.setInt(6, 1);    //

return pstmt.executeUpdate();

} catch (Exception e) {

e.printStackTrace();

}

return -1; //데이터베이스 오류

}

}

 

 

3. writeAction.jsp 파일 생성

실제로 글쓰기를 눌러서 글을 작성해주는 액션페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import = "bbs.BbsDAO" %>   //게시글을 작성할 수 있는 데이터베이스는 BbsDAO 객체를 이용해 다룰 수 있음

<%@ page import = "java.io.PrintWriter" %>

<% request.setCharacterEncoding("UTF-8"); %>

<jsp:useBean id="bbs" class="bbs.Bbs" scope="page" />

<jsp:setProperty name="bbs" property="bbsTitle" />

<jsp:setProperty name="bbs" property="bbsContent" />  //하나의 게시글 인스턴스를 만들어줌

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JSP 게시판 웹 사이트</title>

</head>

<body>

<%

 

String userID = null;

if(session.getAttribute("userID") !=null){

userID = (String) session.getAttribute("userID");

}

if(userID == null){

PrintWriter script = response.getWriter();

script.println("<script>");

script.println("alert('로그인을 하세요. ')");

script.println("location.href = 'login.jsp'");

script.println("</script>");

} else{

if(bbs.getBbsTitle() == null || bbs.getBbsContent() == null){   //사용자가 글제목이나 글내용을 작성하지 않으면 오류발생

PrintWriter script = response.getWriter();

script.println("<script>");

script.println("alert('입력되지 않은 항목이 있습니다.')");

script.println("history.back()");

script.println("</script>");

} else{

BbsDAO bbsDAO = new BbsDAO(); //인스턴스 생성

int result = bbsDAO.write(bbs.getBbsTitle(), userID, bbs.getBbsContent());  //차례로 매개변수 넣어주기

if(result == -1){      //데이터베이스 오류발생

PrintWriter script = response.getWriter();

script.println("<script>");

script.println("alert('글쓰기에 실패했습니다.')");

script.println("history.back()");

script.println("</script>");

}

else {  //성공적으로 글쓰기 작성

PrintWriter script = response.getWriter();

script.println("<script>");

script.println("location.href = 'bbs.jsp'");

script.println("</script>");

}

}

}

%>

</body>

</html>

 

 

 

 

 

 

4. 로그인해서 게시물 작성하면 화면에는 뜨지 않지만 Mysql 클라이언트에서 확인하면

길동이가 작성한 게시물을 볼 수 있음

 

 

참고

동빈나 유투브

+ Recent posts