ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 마리아DB 연결하기 1
    Java/Maria DB 2020. 2. 8. 18:03

    자바 프로젝트를 위해 마리아 DB를 사용해야 할 상황이 생겼다.

     

    마리아 DB 설치를 완료했다고 생각하고 글을 작성하겠습니다.

     

    자바 소스코드에서 마리아 DB와 연결하려면 마리아 DB의 JDBC 파일(Connector)이 필요합니다

     

    https://downloads.mariadb.org/connector-java/+releases/

     

    MariaDB Connector/J Releases - MariaDB

    MariaDB Connector/J - All Releases MariaDB Connector/J is used to connect applications developed in Java to MariaDB and MySQL databases using the standard JDBC API. The client library is LGPL licensed. See this article for more information. MariaDB Connect

    downloads.mariadb.org

    위 링크에서 Connector 파일을 받을 수 있습니다. (Java용으로 받아주세요)

     

     

     

    파일을 다운로드 했으면 사용하는 IDE의 프로젝트를 실행시킨 후

     

     

     

     

    해당 프로젝트의 프로젝트 설정 창을 켜주세요

     

    intelliJ 기준, eclipse 등 다른 IDE와는 조금 다를 수 있습니다.

     

     

    LIbraries 탭으로 이동한 후, 하단의 + 버튼을 눌러 다운로드한 Connector 파일을 추가해주시면 됩니다.

     

    위와 같이 lib에 jar 파일이 추가된것을 볼 수 있습니다.

     

     

     

    현재 예제 프로젝트 폴더입니다. src 폴더에 java 소스가 들어가게 되는데요, database package를 생성하고 Connectivity.java와 Database.java를 사용할 예정입니다.

     

     

     

    Connectivity.java 파일부터 살펴보겠습니다.

    package database;
    
    import java.sql.*;
    
    public class Connectivity {
        static Connection getConnection() {
            Connection con = null;
            try {
                String dbURL = "jdbc:mariadb://127.0.0.1:3306/air";
                String dbId = "project";
                String dbPassword = "1111";
    
                Class.forName("org.mariadb.jdbc.Driver");
                System.out.println("driver loading success!");
    
                con = DriverManager.getConnection(dbURL, dbId, dbPassword);
                System.out.println("database connection success!");
    
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
    
            return con;
        }
    }
    

    package database 부분은 각자 설정하신 폴더 이름으로 변경해주세요

     

     

    자바의 예외처리 특성상 try/catch문을 사용하지 않으면 돌아가지 않는 부분입니다.

     

    이제 각 변수의 역할에 대해 설명하면

     

    dbURL, dbId, dbPassword 총 3개의 string 변수들을 매개변수로 DriverManager.getConnection 함수를 호출하게 되는데요

     

    Connection 객체 con 변수에 마리아DB를 연결해주는 역할을 합니다.

     

    dbURL에는 마리아 DB의 주소(제 경우에는 로컬 및 기본설정으로 IP : 127.0.0.1, PORT : 3306 으로, 미리 생성하둔 DB인 air 데이터베이스에 접근하도록 설정했습니다

     

    해당 프로젝트에 생성해둔 local 계정(ID : project, Password : 1111)을 저장하여 사용했습니다.

     

    한 가지 주의하실 점은 Connectivity 클래스를 선언하여 사용하게 될 텐데 위 코드에서 보시다시피 getConnection 함수를 static으로 선언하였습니다. 여기서 static에 대해 짚고 넘어가자면 Database,java에서 Connectivity 클래스를 선언하여 사용할텐데 초기화 코드가 없습니다. 따라서 Connectivity 클래스를 선언할때부터 메모리에 getConnection 함수를 올려두지 않으면 객체 초기화가 진행되지 않아 getConnection 함수를 콜할 수 없게됩니다. 따라서 static을 붙여 사용했다는것을 기억해두세요.

     

     

     

     

     

    다음은 Database.java 입니다.

    package database;
    
    import java.sql.*;
    
    public class Database {
        private static Connection con;
    
        //Singleton
        private static Database uniqueInstance;
    
        public static Database getInstance() {
            if (uniqueInstance == null) {
                uniqueInstance = new Database();
            }
            return uniqueInstance;
        }
    
        private Database() {
            con = Connectivity.getConnection();
        }
    
        public static Connection getConnection() {
            return con;
        }
    
        public int getOid() {
            int id = 0;
    
            try {
                Statement stmt = con.createStatement();
                ResultSet rset = stmt.executeQuery("SELECT * FROM oid");
    
                while (rset.next()) {
                    id = rset.getInt(1);
                }
    
                rset.close();
                id++;
    
                int updateCount = stmt.executeUpdate("UPDATE oid SET last_id = " + id);
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            return id;
        }
    
    }
    

     

    위 소스코드도 싱글톤을 처음 들어보시는 분들은 신기해 하실 수 있습니다.

     

    Database 클래스를 초기화 하는 Database() 함수가 private로 선언되어 외부에서는 호출할 수 없게 되어있는데 그러면

     

    클래스 내부에 선언해둔 나머지 함수들은 어떻게 사용하라는 거지?

     

    라는 생각이 드실텐데요 천천히 살펴보겠습니다.

     

    앞선 Connectivity.java의 구조와는 다르게 생성자 함수가 존재하는데요, 문제는 private로 선언되어있고

    getInstance() 함수에서 이를 호출하도록 되어있습니다.

     

    우선 외부에서 Database 클래스를 호출할때 getInstance() 함수를 통해 할 것이라는것을 말씀드립니다.

     

    위 함수는 멤버변수 UniqueInstance가 null이면 생성자를 호출하고 이미 객체가 존재한다면 존재하는 그 객체를 return 해주는 함수입니다.

     

     

    위처럼 하나의 클래스에 대해 생성자를 호출할때마다 객체가 생성되는것이 아닌, 객체가 생성되었다면 해당 객체를 반환하여 객체가 한개로 유지되는 패턴을 싱글톤 패턴이라고 합니다

     

    유저와 DB 사이의 데이터 커넥션의 갯수는 제한적이기 때문에 위처럼 싱글톤 패턴 구조로 코드를 작성하여 커넥션의 수를 줄여주는것이 효율적입니다.

     

    나머지 코드 및 마리아DB의 사용법에 대해서는 다음 글에서 설명하겠습니다

Designed by Tistory.