전체 글
- 40DAY / Git 2017.05.31
- [mysql] SQL 오류 (1452): Cannot add or update a child row: a foreign key constraint fails 2017.05.30
- [mysql] foreign key constraint is incorrectly formed (errno:150) 2017.05.30
- 35DAY / mysql / TRANSACTION 2017.05.24
- 34DAY / DAO,DTO / 검색처리, 로그인처리 2017.05.23
- 33DAY / mysql / DISTINCT , INNER JOIN 2017.05.22
- 30DAY / jQuery 2017.05.17
- 29DAY / JSP , JAVA / DTO, DAO insertform ,list 2017.05.16
- 28DAY / DAO , DTO 2017.05.15
40DAY / Git
Git
Git은 속도가 낮고 효율성이 높은 소규모 프로젝트부터 대규모 프로젝트까지 모든 것을 처리하도록 설계된 무료 오픈 소스 분산 버전 제어 시스템이다.
Git은 SVN과 다르게 commit은 로컬 저장소에서 이루어 지고 push라는 동작으로 원격 저장소에 반영되고 받을때도 pull 또는 fetch로 서버에서 변경된 내역을 받아 올 수 있다.
[window] - [Perspective] - [Open perspective] -[ Git ] 을 선택하여 연다
Java 파일에서 마우스 우클릭 - [ Team ] - [ Commit ] 창을 연다
Commit할 파일을 드래그하여 아래로 당긴후
Commit 메세지를 작성한 뒤 Commit 버튼을 누른다.
Commit 메세지는 일의 능률을 높이기 때문에 신중하게 작성해야한다.
간단한 예제로 Properties 사용
db.properties 파일을 생성한다.
-->무슨 이유인지는 몰라도 위에 공백을 넣어야 내용이 읽히는 오류가 발생하였다...
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
public class MemberDao {
private String url;
private String dbid;
private String dbpw;
private void dbPropertiesInit() throws IOException{
FileInputStream fin = new FileInputStream("d:\\db.properties");
Properties pro = new Properties();
pro.load(fin);
this.url=pro.getProperty("url");
this.dbid=pro.getProperty("dbid");
this.dbpw=pro.getProperty("dbpw");
}
public Member selectMemberById(String id) throws ClassNotFoundException, SQLException, IOException{
//properties 에서 db정보 가져옴(내부적으로 input)
this.dbPropertiesInit();
System.out.println(this.dbid+"<=id");
System.out.println(this.dbpw+"<=pw");
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection(this.url,this.dbid,this.dbpw);
String query ="select * from oracle_member where ora_id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, id);
ResultSet rs = stmt.executeQuery();
Member mem=null;
if(rs.next()){
mem = new Member();
mem.setId(rs.getString("ora_id"));
mem.setPw(rs.getString("ora_pw"));
mem.setLevel(rs.getString("ora_level"));
mem.setName(rs.getString("ora_name"));
mem.setEmail(rs.getString("ora_email"));
}
return mem;
}
public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException{
MemberDao mdao = new MemberDao();
Member m = mdao.selectMemberById("id001");
System.out.println(m.getId());
}
}
GitHub
2)주소 복사
3)이클립스로 돌아가서 PUSH 한다.
4)
5) [master(기본)]를 선택하고 [Add Spec]클릭시 추가된다.
6)GitHub에 가서 확인한다!
[mysql] SQL 오류 (1452): Cannot add or update a child row: a foreign key constraint fails
==>참조무결성에 따라 참조키는 항상 부모키에 해당하는 값만 넣을 수 있다.
참조받는 테이블의 데이터를 먼저 삽입해서 발생한 오류. 데이터를 삭제한 뒤 참조키 설정하였다.
[mysql] foreign key constraint is incorrectly formed (errno:150)
SQL 오류 (1005): Can't create table 'mydrug.#sql-950_9' (errno: 150)
Foreign key constraint is incorrectly formed
외래키를 설정할 때 참조데이터가 다를 경우 발생하는 오류
1. 데이터 타입이 같은지 확인 (unsigned/signed)INT,VARCHAR 등
2. NULL값 허용여부 확인
3. 참조받는 데이터가 unique, primary key 가 아닌지 확인
4. 테이블의 조합확인
->하나는 euckr_korean_ci 하나는 utf_general_ci 여서 오류가 발생했다.
35DAY / mysql / TRANSACTION
TRANSACTION 트랜잭션
OldidDao.java : Oldid DB에 id값을 저장하는 클래스
CustomerService.java : 회원을 삭제와 동시에 데이터베이스에 추가하는 클래스
둘 중 하나가 실패시 ROLLBACK을 하고
성공했을 때 COMMIT을 한다.
package Service;
import java.sql.Connection;
import java.sql.SQLException;
public class CustomerService {
private DBService dbservice;
private CustomerDao customerDao;
private OldidDao oldidDao;
//java실행시 바로실행
public CustomerService(){
dbservice = new DBService();
}
public void removeCustomer(int id){
customerDao = new CustomerDao();
oldidDao = new OldidDao();
Connection conn = null;
try{
conn=dbservice.getConnection();
customerDao.deleteCustomer(dbservice,conn, id);
oldidDao.insertId(dbservice, conn, id);
conn.commit();
}
catch (SQLException e){
e.printStackTrace();
try{
conn.rollback();
}catch (SQLException e1) {
e1.printStackTrace();
}
}
finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
package Service;
import java.sql.*;
public class OldidDao {
public int insertId(DBService dbservice, Connection conn,int id) throws SQLException{
int returnRow = 0;
PreparedStatement stmt = null;
stmt = conn.prepareStatement("INSERT INTO oldid(id) VALUES (?)");
stmt.setInt(1, id);
returnRow=stmt.executeUpdate();
return returnRow;
}
}
34DAY / DAO,DTO / 검색처리, 로그인처리
public String mLoginCheck(String in_id,String in_pw) : 로그인체크
public Member mGetForSession(String in_id) : 로그인 성공 한 회원 체크
login_pro.jsp
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
Mdao mdao = new Mdao();
String loginresult = mdao.mLoginCheck(id, pw);
switch(loginresult){
case "로그인성공" :
Member m = mdao.mGetForSession(id);
session.setAttribute("S_NAME", m.getM_name());
session.setAttribute("S_LEVEL", m.getM_level());
session.setAttribute("SID", m.getM_id());
%><script language="javascript">
alert("로그인성공");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
case "비밀번호불일치" :
%>
<script language="javascript">
alert("비밀번호불일치");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
case "아이디불일치" :
%>
<script language="javascript">
alert("아이디불일치");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
}
%>
33DAY / mysql / DISTINCT , INNER JOIN
생성
Order.java
OrderDao.java
Order_Customer.java : Order객체와 Customer객체를 SETTING / GETTING 하는 클래스
OrderList.jsp : 출력하는 JSP파일
INNER JOIN
SELECT
FROM
INNER JOIN
ON
select orders.id , orders.date, orders.amount, orders.customer_id, customers.name
from orders
inner join customers
on customers.id = orders.customer_id;
30DAY / jQuery
자바스크립트는 실행문
ready를 쓰면 스크립트문을 위에쓸수있음
- focus & blur
- animate
- toggle
DOM변경
- append
- remove & empty
AJAX
참고사이트
Gson gson = new Gson();
String json = gson.toJson(list);
System.out.println(json);
out.println(json);
<script>
$(document).ready(function(){
$('button').click(function(){
$.get("./studentList.jsp",function(list){
console.log(list);-->콘솔창출력
$(list).each(function(index,item){
$('tbody').append('<tr>');
$('tbody').append('<td>'+item.no+'</td>');
$('tbody').append('<td>'+item.category+'</td>');
$('tbody').append('<td>'+item.title+'</td>');
$('tbody').append('<td>'+item.content+'</td>');
$('tbody').append('<td>'+item.day+'</td>');
$('tbody').append('</tr>');
});
});
});
});
</script>
*studentList는 데이터베이스 select하는 jsp문
29DAY / JSP , JAVA / DTO, DAO insertform ,list
입력폼과 리스트처리 _DAO
public ArrayList<Member> mAllSelect() throws ClassNotFoundException, SQLException{
DriverDB db = new DriverDB();
conn = db.driverDbcon();
ArrayList<Member> alm = new ArrayList<Member>();
pstmt = conn.prepareStatement("select * from tb_member");
rs = pstmt.executeQuery();
while(rs.next()){
Member m = new Member();
m.setM_id(rs.getString("m_id"));
m.setM_pw(rs.getString("m_pw"));
m.setM_level(rs.getString("m_level"));
m.setM_name(rs.getString("m_name"));
m.setM_email(rs.getString("m_email"));
System.out.println(m);
alm.add(m);
}
pstmt.close();
conn.close();
rs.close();
return alm;
}
ArrayList를 쓰는이유?
<%
Mdao dao = new Mdao();
ArrayList<Member> get_alm = dao.mAllSelect();
for(int i=0;i<get_alm.size();i++){
Member m = get_alm.get(i);
%>
<tr>
<td><%=m.getM_id()%></td>
<td><%=m.getM_pw()%></td>
<td><%=m.getM_level()%></td>
<td><%=m.getM_name()%></td>
<td><%=m.getM_email()%></td>
<td>
</tr>
<%}%>
28DAY / DAO , DTO
DAO(Data Access Object) : 데이터 베이스에 접속, 명령전송을 전담하는 클래스
package DTO;
public class Member {
//전역변수 = 필드 = 멤버 = 멤버필드 = 프로필터
private String m_id;
private String m_pw;
private String m_level;
private String m_name;
private String m_email;
public String getM_id() {
return m_id;
}
public void setM_id(String m_id) {
this.m_id = m_id;
}
public String getM_pw() {
return m_pw;
}
public void setM_pw(String m_pw) {
this.m_pw = m_pw;
}
public String getM_level() {
return m_level;
}
public void setM_level(String m_level) {
this.m_level = m_level;
}
public String getM_name() {
return m_name;
}
public void setM_name(String m_name) {
this.m_name = m_name;
}
public String getM_email() {
return m_email;
}
public void setM_email(String m_email) {
this.m_email = m_email;
}
}
package DAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import driverdb.DriverDB;
import DTO.Member;
public class Mdao {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs=null;
public void mInsert(Member m) throws ClassNotFoundException, SQLException{
DriverDB db = new DriverDB();
conn = db.driverDbcon();
try{
pstmt = conn.prepareStatement(
"INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");
pstmt.setString(1, m.getM_id());
pstmt.setString(2, m.getM_pw());
pstmt.setString(3, m.getM_level());
pstmt.setString(4, m.getM_name());
pstmt.setString(5, m.getM_email());
pstmt.executeUpdate();
}
finally{
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
}
public void mDelete(String id) throws ClassNotFoundException, SQLException{
DriverDB db = new DriverDB();
conn = db.driverDbcon();
try{
pstmt = conn.prepareStatement(
"delete from tb_member where m_id=?");
pstmt.setString(1, id);
pstmt.executeUpdate();
}
finally{
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
}
public void mUpdate(Member m) throws ClassNotFoundException, SQLException{
DriverDB db = new DriverDB();
conn = db.driverDbcon();
pstmt = conn.prepareStatement(
"UPDATE tb_member SET m_pw=?,m_level=?,m_name=?,m_email=? WHERE m_id=?");
pstmt.setString(1, m.getM_pw());
pstmt.setString(2, m.getM_level());
pstmt.setString(3, m.getM_name());
pstmt.setString(4, m.getM_email());
pstmt.setString(5, m.getM_id());
pstmt.executeUpdate();
pstmt.close();
conn.close();
}
public ArrayList<Member> mAllSelect() throws ClassNotFoundException, SQLException{
DriverDB db = new DriverDB();
conn = db.driverDbcon();
ArrayList<Member> alm = new ArrayList<Member>();
pstmt = conn.prepareStatement("select * from tb_member");
rs = pstmt.executeQuery();
while(rs.next()){
Member m = new Member();
m.setM_id(rs.getString("m_id"));
m.setM_pw(rs.getString("m_pw"));
m.setM_level(rs.getString("m_level"));
m.setM_name(rs.getString("m_name"));
m.setM_email(rs.getString("m_email"));
System.out.println(m);
alm.add(m);
System.out.println(alm + "<---alm");
}
pstmt.close();
conn.close();
rs.close();
return alm;
}
public Member mSelectforUpdate(String mid) throws SQLException, ClassNotFoundException{
DriverDB db = new DriverDB();
conn = db.driverDbcon();
Member m = new Member();
pstmt = conn.prepareStatement("select * from tb_member where m_id=?");
pstmt.setString(1, mid);
rs = pstmt.executeQuery();
if(rs.next()){
System.out.println("select 쿼리 실행 결과 있다");
m.setM_id(rs.getString("m_id"));
m.setM_pw(rs.getString("m_pw"));
m.setM_level(rs.getString("m_level"));
m.setM_name(rs.getString("m_name"));
m.setM_email(rs.getString("m_email"));
}
pstmt.close();
conn.close();
rs.close();
return m;
}
}
DAO와 DTO를 이용하면 jsp문이 간단해진다.
ex) insert_pro.jsp
<%@ page import = "DAO.Mdao"%>
<% request.setCharacterEncoding("euc-kr"); %>
<jsp:useBean id="m" class="Dto.Member"/>
<jsp:setProperty name="m" property="*"/>
<%
Udao udao = new Udao();
udao.uUpdate(m);
response.sendRedirect(request.getContextPath() + "/usersearch/user_search_list.jsp");
%>