반응형

이번에는 Statement가 아닌 PreparedStatement를 활용하여 

데이터를 핸들링하는 예제를 작성해보자.


JdbcConnector.java

package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.bean.UserBean;


public class JdbcConnector {
	
	public static Connection getConnection() throws ClassNotFoundException, SQLException{
		
		//DB 종료에 따른 JDBC DRIVER 클래스
		Class.forName("com.mysql.jdbc.Driver");
		
		//DB접속 url
		String url = "jdbc:mysql://localhost/test";
		//DB접속 ID
		String id = "root";
		//DB접속 패스워드
		String pw = "1234";
		
		//접속정보로 JDBC 연결 커넥션 생성
		Connection conn = DriverManager.getConnection(url,id,pw);
		
		return conn;
	}
	public static void main(String args[]) throws ClassNotFoundException, SQLException {
		//커넥션생성
		Connection conn = getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		UserBean user = new UserBean();
		user.setId("pby0716");
		user.setName("박병영");
		user.setEmail("pby0716@naver.com");
		
		String sql1 = "INSERT INTO MEMBER(ID,NAME,EMAIL) VALUES (?,?,?)";
		
		//PreaparedStatement 생성 후 실행할 쿼리정보 등록
		pstmt = conn.prepareStatement(sql1);
		
		//?에 대한 하는 가변부분 셋팅
		pstmt.setString(1, user.getId());
		pstmt.setString(2, user.getName());
		pstmt.setString(3, user.getEmail());
		
		int count = pstmt.executeUpdate();
		if(count > 0) {
			System.out.println("Insert 성공");
		}else {
			System.out.println("Insert 실패");
		}
		
		/*Insert 한 데이터를 조회하는 예제*/
		
		//받아올 id를 담으면 된다. 지금은 예제로써 임의로 담아두었다.
		String id = "pby0716";
		
		//실행 쿼리
		String sql2 = "SELECT ID, NAME, EMAIL FROM MEMBER WHERE ID = ?";
		//PreaparedStatement 생성 후 실행할 쿼리정보 등록
		pstmt = conn.prepareStatement(sql2);
		//위 sql에 담겨있는 쿼리에 가변하는 변수(id)를 세팅하는 부분
		pstmt.setString(1, id);
		
		//결과를 담을 ResultSet 생성 후 결과 담기
		rs = pstmt.executeQuery();
		
		//결과를 담을 ArrayList생성
		ArrayList<UserBean> list = new ArrayList<UserBean>();
		
		//ResultSet에 담긴 결과를 ArrayList에 담기
		while(rs.next()) {
			UserBean bean = new UserBean();
			bean.setId(rs.getString("ID"));
			bean.setName(rs.getString("NAME"));
			bean.setEmail(rs.getString("EMAIL"));
			list.add(bean);
		}
		//결과물 출력
		for(int i=0; i<list.size(); i++) {
			System.out.println("회원아이디:"+list.get(i).getId());
			System.out.println("회원이름:"+list.get(i).getName());
			System.out.println("회원이메일:"+list.get(i).getEmail());
		}
	}
}

이전에 사용했던 Statement와 PreparedStatement의 차이가 무엇일까?


Statement의 경우에는 완성형 쿼리를 담아서 실행을 하게되지만,

PreparedStatement의 경우에는 가변처리되어야하는 부분에 대해서 ?로 처리하여 쿼리를 바인딩한 후에도 핸들링하여 사용할 수 있다.


완전한 쿼리가 실행될때는 Statement객체를 사용하는 것이 속도측면에서 빠르며,

불완전한 쿼리를 가변처리를 하며 반복적으로 사용할 경우에는 PreparedStatement객체를

사용하는 것이 빠르다.


예제소스에서도 보듯이 Statement의 경우에는 실행하기직전에 쿼리를 담아서 컴파일처리를 하며, PreparedStatement의 경우에는 객체 생성시에 쿼리를 미리 담아서 ?에 대한부분을 미리 처리한 후 컴파일해놓고 처리를 한다.


때에 따라서 해당 두가지를 적절히 사용하면, DB속도 및 소프트웨어 속도 면에서 향상된 프로그램을 개발할 수 있다.!


반응형

'IT관련 > JAVA' 카테고리의 다른 글

JAVA에서 JDBC로 SELECT 조회하는 방법(Statement)  (0) 2018.03.16
블로그 이미지

Mr.비타민

,
반응형

JAVA에서 프래그램을 작성하다보면 DB에 연결하여 데이터를 가져와야하는 경우가 많다.


해당 방법을 위하여 Connection 부터 데이터 처리까지의 방법을 확인해보자.



JdbcConnector.java

package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.bean.UserBean;


public class JdbcConnector {
	
	public static Connection getConnection() throws ClassNotFoundException, SQLException{
		
		//DB 종료에 따른 JDBC DRIVER 클래스
		Class.forName("com.mysql.jdbc.Driver");
		
		//DB접속 url
		String url = "jdbc:mysql://localhost/test";
		//DB접속 ID
		String id = "root";
		//DB접속 패스워드
		String pw = "1234";
		
		//접속정보로 JDBC 연결 커넥션 생성
		Connection conn = DriverManager.getConnection(url,id,pw);
		
		return conn;
	}
	public static void main(String args[]) throws ClassNotFoundException, SQLException {
		//커넥션생성
		Connection conn = getConnection();
		//실행 쿼리
		String sql = "SELECT ID, NAME, EMAIL FROM MEMBER";
		//Statement 생성 후 실행할 쿼리정보 등록
		Statement stmt = conn.createStatement();
		//결과를 담을 ResultSet 생성 후 결과 담기
		ResultSet rs = stmt.executeQuery(sql);
		
		//결과를 담을 ArrayList생성
		ArrayList<UserBean> list = new ArrayList<UserBean>();
		
		//ResultSet에 담긴 결과를 ArrayList에 담기
		while(rs.next()) {
			UserBean bean = new UserBean();
			bean.setId(rs.getString("ID"));
			bean.setName(rs.getString("NAME"));
			bean.setEmail(rs.getString("EMAIL"));
			list.add(bean);
		}
		//결과물 출력
		for(int i=0; i<list.size(); i++) {
			System.out.println("회원아이디:"+list.get(i).getId());
			System.out.println("회원이름:"+list.get(i).getName());
			System.out.println("회원이메일:"+list.get(i).getEmail());
		}
	}
}

UserBean.java

package com.bean;

public class UserBean {
	String id;
	String name;
	String email;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

출력물 : 
회원아이디:pby0716
회원이름:박병영
회원이메일:pby0716@naver.com
회원아이디:qudduddl
회원이름:박병영
회원이메일:young3629@gamil.com


2가지의 데이터가 출력이 된다.

다음장에는 PreparedStatement를 사용하여 Insert, Select를 핸들링하는 방법을 확인해보자.


반응형
블로그 이미지

Mr.비타민

,
반응형

어플리케이션 개발을 하기위해서는 DB연동은 필수 이기때문에,


오늘은 MYSQL을 설치하는 것으로 포스팅합니다!


https://dev.mysql.com/downloads/windows/installer


해당 URL로 접속하여 MYSQL 설치파일을 다운로드 받습니다.




우선 다운로드 버튼을 눌러서 아래 다운로드 페이지로 이동.



우리는 로그인없이 다운로드를 받을것이기 때문에, 아래 부분을 클릭합니다.


다운로드가 완료 되고나면, 파일을 실행하여 설치 스텝을 진행!!



licences 승인 클릭 후 Next~



우리는 개발용으로 쓸것이기때문에 Developer Default 선택후 Next~



본인이 해당하는 사항이 있다면 추가적으로 Execute로 설치를 진행하고,

없다면 과감하게 Next~



본격적으로 MYSQL 설치에 필요한 요소들을 설치를 진행합니다. Execute~



설치가 완료되고나면 Next~



이제 서버로써 필요한 설정정보들을 진행할 단계입니다.

Next~



우리는 별도의 InnoDB Cluster를 사용하지않고 기본형으로 설치를 할것이기에 

Standalone MySQL Server / Classic MySQL Replication을 선택후 Next~



개발용 타입 선택과 연결할 PORT 설정을 본인에 맞게끔 설정 후 Next



root 계정의 비밀번호 설정을 한 후 Next



윈도우상에서 서버스명으로 MySQL57(변경가능) Next



별도의 문서 저장소를 사용하지않을것이기에 체크하지않고 Next



설정에 관한 내용을 실행을 한 후 서버관련 설정을 완료.



남은 두가지 사항에 대해서는 거의 Skip이라고 보면됨. Next



Finish~



Next~



서버연결이 정상적으로 되는지 root 계정에 대한 접속을 확인 후 Next



최종적으로 Execute



Next~



설치완료를 알리는 Finish




위와 같은 Workbench 창이 뜬다면 정상적으로 설치가 완료 된 상태.


이제 본격적으로 MySQL을 사용하여 개발을 진행해 봅시다!



반응형
블로그 이미지

Mr.비타민

,
반응형

우선 Spring Framework 개발툴로써, 

Eclipse도 사용하지만 Eclipse의 경우는 필요한 플러그인 설치를 다시 해줘야하기때문에 

Spring 개발에 맞춰져있는 STS(Spring Tool Suite)를 설치하도록 한다.


필요 설치 내역 : Java8 (https://java.com/ko/download) 설치


STS를 설치하기위하여 해당 사이트로 이동하여 후 파일을 받아보자.


https://spring.io/tools



STS 압축파일을 받은 후 설치경로에 압축을 풀어서 진행하자.


압축해제 후 아래경로에 있는 STS.exe 파일을 실행.



정상적으로 실행되었다면, 최초에 workspace 경로 관련 팝업창이 뜬다.



workspace 설정을 완료한 후, Launch를 클릭하면 본격적으로 STS 개발툴이 실행된다.




이제 본격적으로 Spring Framework에 맞춰서 개발을 시작해보자!

반응형
블로그 이미지

Mr.비타민

,
반응형

SELECT문으로 검색을 하다보면 특정 문자가 포함된 조건으로 검색을 할때가 있다.


예를들어 학번이 07학번인 학생들을 검색하고 싶다. 그렇다면 형식이 2007xxxx인 사람들을 검색해야 할것이다. 앞자리에 2007은 무조건 포함되고 뒷숫자자리는 어떻게 되도 상관없다. 그럴때 사용하는 것이 like함수이다.


select * from student where stu_num like '2007%';


이라고 쿼리를 실행하게되면 20070001, 20070002, .... ~20079999 사이 모두 검색이가능하다.

반응형
블로그 이미지

Mr.비타민

,
반응형
웹프로그래밍을 하다보면 회원가입이나 프로필 등등에서 사진을 등록하고 바로보고싶을경우가 있다. 기본적으로 IE와 크롬에서 현재는 fakepath로 막아놓아서 파일경로를 읽어들일수없는데, 아래와 같은 방법을 사용하면 사진을 등록후 바로 미리보기 이미지화시킬수있다. 아래는 javascript코드이다.
function previewImage(targetObj, View_area) {
	var preview = document.getElementById(View_area); //div id
	var ua = window.navigator.userAgent;

	//ie일때(IE8 이하에서만 작동)
	if (ua.indexOf("MSIE") > -1) {
		targetObj.select();
		try {
			var src = document.selection.createRange().text; // get file full path(IE9, IE10에서 사용 불가)
			var ie_preview_error = document
					.getElementById("ie_preview_error_" + View_area);

			if (ie_preview_error) {
				preview.removeChild(ie_preview_error); //error가 있으면 delete
			}

			var img = document.getElementById(View_area); //이미지가 뿌려질 곳

			//이미지 로딩, sizingMethod는 div에 맞춰서 사이즈를 자동조절 하는 역할
			img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
					+ src + "', sizingMethod='scale')";
		} catch (e) {
			if (!document.getElementById("ie_preview_error_" + View_area)) {
				var info = document.createElement("

"); info.id = "ie_preview_error_" + View_area; info.innerHTML = e.name; preview.insertBefore(info, null); } } //ie가 아닐때(크롬, 사파리, FF) } else { var files = targetObj.files; for (var i = 0; i < files.length; i++) { var file = files[i]; var imageType = /image.*/; //이미지 파일일경우만.. 뿌려준다. if (!file.type.match(imageType)) continue; var prevImg = document.getElementById("prev_" + View_area); //이전에 미리보기가 있다면 삭제 if (prevImg) { preview.removeChild(prevImg); } var img = document.createElement("img"); img.id = "prev_" + View_area; img.classList.add("obj"); img.file = file; img.style.width = '150px'; img.style.height = '200px'; preview.appendChild(img); if (window.FileReader) { // FireFox, Chrome, Opera 확인. var reader = new FileReader(); reader.onloadend = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img); reader.readAsDataURL(file); } else { // safari is not supported FileReader //alert('not supported FileReader'); if (!document.getElementById("sfr_preview_error_" + View_area)) { var info = document.createElement("p"); info.id = "sfr_preview_error_" + View_area; info.innerHTML = "not supported FileReader"; preview.insertBefore(info, null); } } } } }

HTML BODY영역에서 file에 등록하면 지정한 영역에 뿌려줄수있다.
onchange속성을 사용하여 파일이 등록되거나 변경될 시에 바로바로 적용가능하다.
onchange="previewImage(this,'영역아이디')


반응형

'IT관련 > JavaScript' 카테고리의 다른 글

Servlet alert 사용  (0) 2014.06.21
PrintWriter 사용시 인코딩 (한글깨짐)  (0) 2014.06.21
SELECTBOX OPTION SCRIPT  (0) 2014.06.13
블로그 이미지

Mr.비타민

,
반응형

JSP/JAVA-Script/Servlet을 사용하다보면

 

JSP페이지에서가 아닌 서블릿에서 데이터핸들링하다가 경고창을 띄워주게 하고싶을때가 있다

그럴때 사용할수 있는 것이

Servlet에서 PrintWriter를 사용하여 HTML형식으로 출력하는 방법이다.

 

 

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

PrintWriter out = response.getWriter();

out.println(""); 
out.close();
이렇게 하면 서블릿에서도 경고창을 띄워줄수있다
반응형

'IT관련 > JavaScript' 카테고리의 다른 글

이미지 파일 미리보기 기능구현  (0) 2014.08.21
PrintWriter 사용시 인코딩 (한글깨짐)  (0) 2014.06.21
SELECTBOX OPTION SCRIPT  (0) 2014.06.13
블로그 이미지

Mr.비타민

,
반응형

PrintWriter out = response.getWriter();

를 사용할때 페이지자체가 한글깨짐현상이 발생을 하게된다.

해결방법으로 간단하게

 

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

를 위에 코딩해준후에

 

out.println("내용");

 

을 사용하게되면 페이지가 한글이깨지않는다.

반응형

'IT관련 > JavaScript' 카테고리의 다른 글

이미지 파일 미리보기 기능구현  (0) 2014.08.21
Servlet alert 사용  (0) 2014.06.21
SELECTBOX OPTION SCRIPT  (0) 2014.06.13
블로그 이미지

Mr.비타민

,
반응형


1. jQuery로 선택된 값 읽기

 

$("#selectBox option:selected").val();

$("select[name=name]").val();

 

2. jQuery로 선택된 내용 읽기

 

$("#selectBox option:selected").text();

 

3. 선택된 위치

 

var index = $("#test option").index($("#test option:selected"));

 

4. Addoptions to the end of a select

 

$("#selectBox").append("<option value='1'>Apples</option>");

$("#selectBox").append("<option value='2'>After Apples</option>");

 

5. Addoptions to the start of a select

 

$("#selectBox").prepend("<option value='0'>Before Apples</option>");

 

6. Replaceall the options with new options

 

$("#selectBox").html("<option value='1'>Some oranges</option><option value='2'>MoreOranges</option>");

 

7. Replaceitems at a certain index

 

$("#selectBox option:eq(1)").replaceWith("<option value='2'>Someapples</option>");

$("#selectBox option:eq(2)").replaceWith("<option value='3'>Somebananas</option>");

 

8. 지정된 index값으로 select 하기

 

$("#selectBox option:eq(2)").attr("selected", "selected");

 

9. text 값으로 select 하기

 

$("#selectBox").val("Someoranges").attr("selected", "selected");

 

10. value값으로 select 하기

 

$("#selectBox").val("2");

 

11. 지정된 인덱스값의 item 삭제

 

$("#selectBox option:eq(0)").remove();

 

12. 첫번째 item 삭제

 

$("#selectBox option:first").remove();

 

13. 마지막 item 삭제

 

$("#selectBox option:last").remove();

 

14. 선택된 옵션의 text 구하기

 

alert(!$("#selectBox option:selected").text());

 

15. 선택된 옵션의 value 구하기

 

alert(!$("#selectBox option:selected").val());

 

16. 선택된 옵션 index 구하기

 

alert(!$("#selectBox option").index($("#selectBox option:selected")));

 

17. SelecBox 아이템 갯수 구하기

 

alert(!$("#selectBox option").size());

 

18. 선택된 옵션 앞의 아이템 갯수

 

alert(!$("#selectBox option:selected").prevAl!l().size());

 

19. 선택된 옵션 후의 아이템 갯수

 

alert(!$("#selectBox option:selected").nextAll().size());

 

20. Insertan item in after a particular position

 

$("#selectBox option:eq(0)").after("<option value='4'>Somepears</option>");

 

21. Insertan item in before a particular position

 

$("#selectBox option:eq(3)").before("<option value='5'>Someapricots</option>");

 

22. Gettingvalues when item is selected

 

$("#selectBox").change(function(){

           alert(!$(this).val());

           alert(!$(this).children("option:selected").text());

});


출처 : http://blog.daum.net/twinsnow/124

반응형

'IT관련 > JavaScript' 카테고리의 다른 글

이미지 파일 미리보기 기능구현  (0) 2014.08.21
Servlet alert 사용  (0) 2014.06.21
PrintWriter 사용시 인코딩 (한글깨짐)  (0) 2014.06.21
블로그 이미지

Mr.비타민

,
반응형


안드로이드 개발을 하다보면 화면전환이 기본설정으로만 되어 있어서 밋밋함이 느껴질때가 많다.

그래서 좀 세련되면서도 이쁘고 깜찍하게(?).... 애니메이션효과를 넣을 수가 있다.


액티비티를 Intent에 담아서 전환할때 한줄소스와 애니메이션 xml파일만 있다면 너도 나도 멋지게 액비티비 전환을 구현가능하다.


일단 기본적으로 

Intent intent = new Intent(getApplicationContext(), FirstGame.class);
startActivity(intent);


기본적인 액티비티 전환방법이다!! 여기에다가 overridePendingTransition메소드 하나만 넣어주게되면 A->B로 전환될때 애니메이션이 들어가게된다.

 
Intent intent = new Intent(getApplicationContext(), FirstGame.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.cycle_7);


fade는 희미하게 조금씩 밝아지면서 cycle은 A->B로 갈때와 B->A로 갈때 모두 적용하게 만들수 있다. 

 애니메이션 xml은 파일은 첨부에다가 넣어두겠다!


xml폴더에 있는 효과들은 아마 영어를 해석한다면 사용하는데 큰 무리가 없을 것이다.

폴더의 위치는 res폴더에 넣어서 리소스로서 사용하면 된다.



anim.zip



반응형
블로그 이미지

Mr.비타민

,