728x90

자바 프로젝트를 데이터베이스에 연결하기 위해서는 다음과 같은 단계를 거친다. 

1. JDBC 드라이버 로드  (JDBC java Database Connectivity 자바와 디비 연결을 돕는 api들을 제공해준다)

2. 데이터베이스와 연결

3. SQL문 실행

4. 데이터베이스와 연결 끊음

 

나는 1번부터 막혔다! (이클립스에서 인텔리제이로 넘어오면서 책에 예시가 없어서 다 찾아봐야했다)

maven이나 gradle을 써서 사용하는 드라이버 설정을 해줘야하나 싶었지만 역시나 해결이 안됨.

 

마리아 디비 드라이버 다운 

https://mariadb.com/downloads/connectors/connectors-data-access/java8-connector

+ java 눌러서 다운받은 드라이버넣어줬는데도

Class.forName("org.mariadb.jdbc.Driver");

부터 통과가 안됐다! 드라이버를 못가져오는거같은데...

 

 

해결방법

 

이 블로그를 보고 도움 받았다!

"WEB-INF/lib 안에 mariadb-java-client-2.6.2.jar을 빌드 해주야 해결이 된다" !

https://jung-story.tistory.com/108

 

Avaliable Elements 안에 TEST 안에 있는 

maraidb 파일을 클릭해서 왼쪽 lib 안에 집어넣는다.

 

드라이버 연결 DBManager

 

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBManager {
    public static Connection getConnection(){


        Connection con = null;

        String server = "서버주소(나는 localhost)";
        String database = "데이터베이스 이름";
        String user_name = "유저네임";
        String password = "비밀번호";

        try {
            Class.forName("org.mariadb.jdbc.Driver");
            System.out.println("드라이브로드 성공");

        } catch (ClassNotFoundException e) {
            System.err.println(" 드라이버 로딩 오류 : " + e.getMessage());
            e.printStackTrace();
        }

        try {
            con = DriverManager.getConnection("jdbc:mariadb://" +
                    server + "/" +
                    database +
                    "?useSSL=false", user_name, password); // SSL 실행 확인
            System.out.println("연결 성공");
        } catch(Exception e) {
            System.err.println("에러 내용 :" + e.getMessage());
            e.printStackTrace();
        }

        System.out.println("con리턴" +con);
        return con;



    }
    //select 수행한 후 리소스 해제를 위한 메소드
    public static void close(Connection conn, Statement stmt, ResultSet rs){
        try{
            rs.close();
            stmt.close();
            conn.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //insert, update, delete 작업을 수행한 후 리소스 해제를 위한 메소드
    public static void close(Connection conn, Statement stmt){
        try{
            stmt.close();
            conn.close();
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

ProductDAO

에서 getInstance를 통해 연결!

package com.saeyan.dao;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import util.DBManager;

import com.saeyan.dto.ProductVO;

public class ProductDAO {
    private ProductDAO(){

    }
    private static ProductDAO instance = new ProductDAO();
    public static ProductDAO getInstance(){
        return instance;
    }

    //c Read u d
    public  List<ProductVO> selectAllProducts(){
        //최근 등록한 상품 먼저 출력하기
        String sql= "select * from product order by code desc";
        List<ProductVO> list = new ArrayList<>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try{
            conn = DBManager.getConnection();
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();


            while (rs.next()){
                ProductVO pVo = new ProductVO();
                pVo.setCode(rs.getInt("code"));
                pVo.setName(rs.getString("name"));
                pVo.setPrice(rs.getInt("price"));
                pVo.setPictureUrl(rs.getString("pictureurl"));
                pVo.setDescription(rs.getString("description"));

                list.add(pVo); //앗 얘를 빼먹었었네!
            }


        } catch(Exception e){
            System.out.println("값 못가져옴:"+e.getMessage());


        } finally {
            DBManager.close(conn, pstmt, rs);
        }
        return list;
    }

}
728x90
728x90

String 클래스의 equals()는

상위클래스인 object의 equals를 재정의한 메서드이다.

equals () 는 두 값 자체를 비교한다. 같으면 true, 틀리면 false를 리턴한다. 

 public void compareToCheck(){
        String text ="a";
        String text00 ="a";
        String text01 = new String("a");
        System.out.println(text.equals(text00));
        System.out.println(text00.equals(text01));
        
        
         if(text00 ==text01){
            System.out.println("text00 ==text01");
        } else{
            System.out.println("text00 !=text01");

        }
    }

이렇게 equals 메소드를 이용해 비교했을 때는 모두 같다고 나오지만

== 연산자로 비교시에는 객체의 주소를 비교한다.

 

그결과 다르게 나오는 이유는 자바에서 Constant pool을 이용해서 이다. 

상수값을 모아둔 pool이다. String 클래스는 불변의 immutable한 특징이 있다. 그래서 String클래스를 new 연산자를 이용해 새로운 객체를 생성하지 않는 이상, 리터럴 "" 문자 그대로의 값은 기존 상수값 메모리에 재활용된다. 

(text가 text00으로 대체되고 text는 가비지 콜렉터가 처리할 대상이된다. )

출처:

https://jiwondev.tistory.com/114

 

자바의 String과 Constant Pool

JVM에 관하여 #1. JVM 운영체제와 하드웨어에 독립적인 언어, 1995년 당시 이 개념은 프로그래밍의 혁신이었다. 참고로 자바는 썬 마이크로시스템스가 개발했지만 JVM 명세(Specification)만 따른다면 누

jiwondev.tistory.com

 

compareTo는 정렬할 때 사용한다. 

 

compareTo 매개변수로 넘겨준 String 객체가 알파벳 순으로 앞에 있으면 양수, 뒤에 있으면 음수를 리턴한다. 그리고 알파벳 순서만큼 그 숫자값은 커진다. 

    public void compareToCheck(){
        String text ="a";
        String text2 ="b";
        String text3 = "c";
        System.out.println(text2.compareTo(text));
        System.out.println(text2.compareTo(text3));
        System.out.println(text.compareTo(text3));
    }

 

예시)

value.compareTo(target)

 

1.compareTo(1):0

기존보다 target이 앞에 있는 숫자면 앞에 있는 숫자 만큼 1
2.compareTo(1):1

3.compareTo(2):1

 

기존보다 target이 앞에 있는 숫자면 뒤에 있는 만큼 -1
2.compareTo(3):-1

-- 문자도 마찬가지 알파벳으로 정렬했을 때 기준으로 비교된다. 

tempT:c
valueT:b
tempT.compareTo(valueT):1

 

tempT:a
valueT:c
tempT.compareTo(valueT):-2

 

 

 

 

compareTo<T> 인터페이스를 이용한 최대값, 최소값 구하는 코드

package GodOfJava.src.main.java.d.generic.practice;

//제네릭을 이용해라
public class MaxFinder {


    public static void main(String[] args) {
        MaxFinder maxFinder = new MaxFinder();
        maxFinder.testGetMax();


    }


    public void testGetMax(){



        System.out.println(getMax(1,2,3));
        System.out.println(getMax(3,1,2));
        System.out.println(getMax("a","b","c"));
        System.out.println(getMax("b","c","a"));
        System.out.println(getMax("a","b","c"));

        System.out.println(getMin(1,2,3));
        System.out.println(getMin(3,1,2));
        System.out.println(getMin("a","b","c"));
        System.out.println(getMin("b","c","a"));
        System.out.println(getMin("a","b","c"));




    }

    public <T extends Comparable<T>> T getMax(T ... a){
        T maxT = a[0];
        System.out.println("maxT:"+maxT);
        for (T tempT : a){
            if(tempT.compareTo(maxT) >0) maxT = tempT;
        }
        return maxT;
    }

    public <T extends Comparable<T>> T getMin(T ... a){
        T minT = a[0];

        for (T minA : a){
            if (minA.compareTo(minT) < 0) {
                minT = minA;
            }

        }
        return minT;

    }

}
728x90

+ Recent posts