1. 개요
SQLite는 별도의 서버 프로세스가 없는 단일 파일 데이터베이스입니다.
대규모 작업에는 적합하지 않지만 가볍고 편리합니다.
Java 및 Python을 사용하여 SQLite 데이터베이스를 연결하는 코드를 작성합니다.
(이미지 출처) 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')