[SQLite] SQLite 연결

1. 개요

SQLite는 별도의 서버 프로세스가 없는 단일 파일 데이터베이스입니다.

대규모 작업에는 적합하지 않지만 가볍고 편리합니다.

Java 및 Python을 사용하여 SQLite 데이터베이스를 연결하는 코드를 작성합니다.


[SQLite] SQLite 연결 1

(이미지 출처) https://devopedia.org/sqlite

2. 준비

sqlite-jdbc 다운로드

SQLite JDBC는 Java에서 SQLite 데이터베이스 파일에 액세스하고 생성하기 위한 라이브러리입니다.

라이브러리는 Java에서 실행하는 데 필요합니다.

다음 경로에서 다운로드할 수 있습니다.

https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.40.0.0/

중앙 저장소: org/xerial/sqlite-jdbc/3.40.0.0

repo1.maven.org

3. Java로 DB 연결 테스트

소스 코드

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

public class TestSqlLite {
   public static void main(String() args) throws Exception {
      Connection conn = null;
      Statement stmt = null;

      String dbUrl = "jdbc:sqlite:/D:/db/sqlite.db";

      try {
         Class.forName("org.sqlite.JDBC");
      } catch (ClassNotFoundException e) {
         System.out.println(e.toString());
         return;
      }

      try {
         conn = DriverManager.getConnection(dbUrl);
      } catch (SQLException e) {
         System.out.println(e.toString());
         return;
      }

      try {
         stmt = conn.createStatement();
         stmt.executeUpdate("drop table if exists people;");
         stmt.executeUpdate("create table people (name, job);");
      } catch (SQLException e) {
         System.out.println(e.toString());
      }

      try {
         stmt = conn.createStatement();
         String sql = "insert into people (name, job) values ('Park ChunSam', 'Public servant');";
         stmt.executeUpdate(sql);
      } catch (SQLException e) {
         System.out.println(e.toString());
      }

      try {
         PreparedStatement prep = conn.prepareStatement("insert into people values (?, ?);");
         prep.setString(1, "Moon DolSik");
         prep.setString(2, "Pilot");
         prep.addBatch();

         prep.setString(1, "Ko GilDong");
         prep.setString(2, "Youtuber");
         prep.addBatch();

         prep.setString(1, "OneWay");
         prep.setString(2, "Programmer");
         prep.addBatch();

         prep.setString(1, "TwoWay");
         prep.setString(2, "Programmer");
         prep.addBatch();

         conn.setAutoCommit(false);
         prep.executeBatch();
         conn.setAutoCommit(true);
      } catch (SQLException e) {
         System.out.println(e.toString());
      }

      try {
         ResultSet rs = stmt.executeQuery("select * from people;");
         while (rs.next()) {
            System.out.println(rs.getString("name") + " - " + rs.getString("job"));
         }
         rs.close();

         System.out.println();

         stmt = conn.createStatement();
         stmt.executeUpdate("delete from people where name="TwoWay";");

         rs = stmt.executeQuery("select * from people;");
         while (rs.next()) {
            System.out.println(rs.getString("name") + " - " + rs.getString("job"));
         }
         rs.close();
      } catch (SQLException e) {
         System.out.println(e.toString());
      }

      try {
         if (stmt !
= null) { stmt.close(); } if (conn !
= null) { conn.close(); } } catch (SQLException e) { System.out.println(e.toString()); } } }

실행 결과

Park ChunSam - Public servant
Moon DolSik - Pilot
Ko GilDong - Youtuber
OneWay - Programmer
TwoWay - Programmer

Park ChunSam - Public servant
Moon DolSik - Pilot
Ko GilDong - Youtuber
OneWay - Programmer

4. Python으로 DB 연결 테스트

import sqlite3

conn = sqlite3.connect("sqlite.db")
cursor = conn.cursor()

cursor.executescript(
"""
DROP TABLE IF EXISTS people;

CREATE TABLE people (
    id integer primary key autoincrement,
    name text,
    job text
);

DELETE FROM people;
"""
)

conn.commit()


# Parameterized 방식으로 데이터 추가
sql = "INSERT INTO people (name, job) VALUES (?, ?)"
people = ('Park ChunSam', 'Public servant')
cursor.execute(sql, people)

# 데이터 조회
sql = "SELECT * FROM people"
cursor.execute(sql)
print(cursor.fetchone())
print()

# Named Placeholder 방식으로 데이터 추가
sql = "INSERT INTO people (name, job) VALUES (:name, :job)"
people = {"name": "Moon DolSik", "job": "Pilot"}
cursor.execute(sql, people)

# 데이터 추가
sql = "INSERT INTO people (name, job) VALUES (?, ?)"
peoples = (
    ("Ko GilDong", "Youtuber"), 
    ("OneWay", "Programmer"), 
    ("TwoWay", "Programmer"), 
)
cursor.executemany(sql, peoples)

# 데이터 조회
cursor.execute("SELECT * FROM people")
rows = cursor.fetchall()
for row in rows:
    print(row)
print()

# 데이터 삭제
sql = "DELETE FROM people WHERE name = ?"
cursor.execute(sql, ("TwoWay",))
print("delete count = ", cursor.rowcount)
print()

# 데이터 조회
cursor.execute("SELECT * FROM people")
for row in cursor:
    print(row)
print()

conn.commit()
conn.close()

실행 결과

(1, 'Park ChunSam', 'Public servant')

(1, 'Park ChunSam', 'Public servant')
(2, 'Moon DolSik', 'Pilot')
(3, 'Ko GilDong', 'Youtuber')
(4, 'OneWay', 'Programmer')
(5, 'TwoWay', 'Programmer')

delete count =  1

(1, 'Park ChunSam', 'Public servant')
(2, 'Moon DolSik', 'Pilot')
(3, 'Ko GilDong', 'Youtuber')
(4, 'OneWay', 'Programmer')