SQLite + JDBC + CRUD

zihoo·2021년 7월 26일
1

Java

목록 보기
1/2

SQLite란

  • 경량급(Light-weight) 관계형 데이터베이스
  • 내장 가능한 오픈소스 Database
  • 데이터를 서버가 아닌 응응프로그램에 넣어 사용
  • C로 작성됐으며 일반적인 SQL로 쿼리 작성 가능
  • 생성되는 각 Database는 하나의 파일로 구성
  • SQL 명령으로 파일을 압축하거나 최적화 할 수 있음
  • 데스크톱 또는 모바일 앱과 같이 동시 사용자가 한 명인 애플리케이션에 가장 적합
  • 고급 데이터베이스에서 볼 수 있는 여러 기능 사용 가능 (전체 텍스트 인덱싱, JSON 데이터 지원 등)

한마디로 정리하자면, 서버가 아닌 로컬에 저장할 수 있는 가벼운 DB이다!

SQLite 사용 - 코드 분석

sqlite+java 예시 코드
코드를 분석하며 SQLite를 공부하였다.
위 코드는 JDBC를 활용하였다.

  • JDBC: 자바에서 제공하는 인터페이스로, DB와 연결하여 데이터를 주고 받을 수 있도록 한다.

1. main

  public static void main( String args[] )
  {
      connectDB();
      createDB();
      insertDB();
      selectDB();
      //updateDB();
      //deleteDB();
  }

main 메소드는
Database를 생성하고, 연결하는 메소드
내용을 저장하고, 읽어오는 메소드
로 이루어져 있다.

2. Database 생성

코드를 한줄씩 분석해보자!!

public static void createDB()
  {
      Connection c = null;
      Statement stmt = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:myBlog.sqlite");
          System.out.println("Opened database successfully");
  • Class.forName() 을 이용해서 드라이버 로드
  • DriverManager.getConnection() 으로 연결 얻기 (c)
  • Connection 인스턴스를 이용해서 Statement 객체(stmt) 생성
  • 연결이 되었다고 print
          stmt = c.createStatement();
  • createStatement 메소드를 이용하여 DB로 SQL 문을 보내기 위한 SQLServerStatement 개체를 만든다.
          String sql = "CREATE TABLE web_blog " +
                       "(ID INTEGER PRIMARY KEY autoincrement," +
                       " NAME           CHAR(50)    NOT NULL, " + 
                       " message        TEXT     NOT NULL, " + 
                       " date_added     datetime)";
  • sql이라는 String 변수에 SQL 쿼리를 저장
  • 쿼리는 id, name, message, date_added column을 가진 테이블을 생성한다.
          stmt.executeUpdate(sql);
          stmt.close();
          c.close();
  • SQL 수행 메소드인 executeUpdate 메소드를 이용하여 쿼리를 실행
  • statement와 connection을 닫아주며 종료
catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
  • DB connection에 문제가 생길 경우 try-catch 문으로 에러 출력
 System.out.println("Table created successfully");
  }
  • 에러가 없을 경우 성공 메시지 출력하며 종료

3. Database 연결

  public static void connectDB()
  {
      Connection c = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:myBlog.sqlite");
        } catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
        System.out.println("Opened database successfully");
  }

4. CRUD - CREATE(INSERT)

  public static void insertDB()
  {
      Connection c = null;
        Statement stmt = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:myBlog.sqlite");
          c.setAutoCommit(false);
          System.out.println("Opened database successfully");
 
          stmt = c.createStatement();
          String sql = "INSERT INTO web_blog (NAME,message,date_added) " +
                       "VALUES ('Ken', 'Hello every one!!!', datetime())," +
                       " ('Jim', 'whats up!!!',datetime());"; 
          stmt.executeUpdate(sql);
          stmt.close();
          c.commit();
          c.close();
        } catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
        System.out.println("Records created successfully");
  }
  • setAutoCommit 메소드를 이용하여 자동 커밋 모드를 사용하지 않는다.
  • web_blog 테이블에 name, message, date_added의 내용을 삽입

5. CRUD - READ(SELECT)

  public static void selectDB()
  {
        Connection c = null;
        Statement stmt = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:myBlog.sqlite");
          c.setAutoCommit(false);
          System.out.println("Opened database successfully");
  • DB와 연결
          stmt = c.createStatement();
          ResultSet rs = stmt.executeQuery( "SELECT * FROM web_blog;" );
  • ResultSet(java.sql.ResultSet)은 executeQuery(String sql)을 통해 쿼리를 실행하고 얻은 결과 값을 ResultSet타입으로 반환하여 저장할 수 있다.
          while ( rs.next() ) {
             int id = rs.getInt("id");
             String  name = rs.getString("name");
             String  message = rs.getString("message");
             String date_added = rs.getString("date_added");
             System.out.println( "ID : " + id );
             System.out.println( "Name : " + name );
             System.out.println( "Message : " + message );
             System.out.println( "Date Added : " + date_added );
             System.out.println();
          }
  • ResultSet에 저장된 정보를 getString으로 가져와서 저장 후 출력
          rs.close();
          stmt.close();
          c.close();
        } catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
        System.out.println("Operation done successfully");  
  }
  • Resultset, statement, connection 종료

6. CRUD - UPDATE

  public static void updateDB()
  {
    Connection c = null;
    Statement stmt = null;
    try {
      Class.forName("org.sqlite.JDBC");
      c = DriverManager.getConnection("jdbc:sqlite:myBlog.sqlite");
      c.setAutoCommit(false);
      System.out.println("Opened database successfully");
 
      stmt = c.createStatement();
      String sql = "UPDATE web_blog set message = 'This is updated by updateDB()' where ID=1;";
      stmt.executeUpdate(sql);
      c.commit();
 
      ResultSet rs = stmt.executeQuery( "SELECT * FROM web_blog;" );
  • DB에 연결하고 UPDATE 쿼리 실행
      while ( rs.next() ) {
         int id = rs.getInt("id");
         String  name = rs.getString("name");
         String  message = rs.getString("message");
         String date_added = rs.getString("date_added");
         System.out.println( "ID : " + id );
         System.out.println( "Name : " + name );
         System.out.println( "Message : " + message );
         System.out.println( "Date Added : " + date_added );
         System.out.println();
      }
      rs.close();
      stmt.close();
      c.close();
    } catch ( Exception e ) {
      System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      System.exit(0);
    }
    System.out.println("Operation done successfully");
  }
  • UPDATE한 내용을 확인하기 위해 SELECT 하여 print

7. CRUD - DELETE

  public static void deleteDB()
  {
      Connection c = null;
        Statement stmt = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:myBlog.sqlite");
          c.setAutoCommit(false);
          System.out.println("Opened database successfully");
 
          stmt = c.createStatement();
          String sql = "DELETE from web_blog where ID=1;";
          stmt.executeUpdate(sql);
          c.commit();
 
          ResultSet rs = stmt.executeQuery( "SELECT * FROM web_blog;" );
          while ( rs.next() ) {
             int id = rs.getInt("id");
             String  name = rs.getString("name");
             String  message = rs.getString("message");
             String date_added = rs.getString("date_added");
             System.out.println( "ID : " + id );
             System.out.println( "Name : " + name );
             System.out.println( "Message : " + message );
             System.out.println( "Date Added : " + date_added );
             System.out.println();
          }
          rs.close();
          stmt.close();
          c.close();
        } catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
        System.out.println("Operation done successfully");
  }
}
  • UPDATE와 마찬가지로 쿼리를 실행한 후 SELECT하여 변경된 사항 확인

실행

  • Eclipse에서 New>Project>Java Project 생성
  • main method에 코드 추가
  • Java Build Path>Livraries>Add External JARs에서 sqlite-jdbc.jar 추가
    sqlite-jdbc 를 방문하여 다운 가능
  • 실행 결과

    다음과 같은 값이 출력된다면 실행 완료!
profile
(๑・̑◡・̑๑)

0개의 댓글