자바와 SQLite [폐쇄]


333

단일 파일 데이터베이스가 제공하는 깔끔함에 매료되었습니다. Java와 SQLite를 연결하고 사용하기 위해 어떤 드라이버 / 커넥터 라이브러리가 있습니까?

랩퍼 라이브러리 인 http://www.ch-werner.de/javasqlite를 발견 했지만 더 눈에 띄는 다른 프로젝트가 있습니까?


10
저는 수백 개의 공짜가 포함 된 질문과 수백 개의 공짜가 포함 된 답변이 "주제 외"로 닫히는 것을 좋아합니다. 그것은 일종의 당황의의 롤
앤드류 코스터

답변:


196

위키 리스트 좀 더 래퍼 :


7
-이 목록에 내 추가 sqlite4java입니다 code.google.com/p/sqlite4java - 그것은 래퍼 (NO JDBC)이다; Windows, Mac, Linux 용으로 사전 컴파일되었습니다. 사용이 간단하고 개발자가 SQLite를 잘못 사용하지 않도록 일부 계약을 시행합니다.
sereda 2016 년

7
sqlite4java 흥미로운 보이지만, 그들은 또한 거기 다양한 래퍼의 좋은 비교가 : code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers
스콧 베넷 - 맥리

1
@kdt zentus 드라이버에서 찾은 문제는 BLOB를 전혀 지원하지 않는 것입니다.
Martijn

12
@Martijn xerial.org/trac/Xerial/wiki/SQLiteJDBC 는 zentus의 드라이버 중 하나이며 BLOB를 지원합니다 (사이트에는 짧은 혀가 있습니다).
johnharris85


247

SQLite 및 Java로 정보를 검색하는 동안 귀하의 질문을 찾았습니다 . 방금 블로그에 게시 한 답변을 추가하겠다고 생각했습니다 .

나는 한동안 자바로 코딩 해왔다. 나는 또한 SQLite에 대해 알고 있지만 그것을 사용하지 않았습니다 ... 글쎄 다른 응용 프로그램을 통해 사용 했지만 코딩 한 응용 프로그램 에서는 사용하지 않았습니다. 그래서 이번 주에 프로젝트에 필요했고 매우 간단합니다!

SQLite 용 Java JDBC 드라이버를 찾았습니다. JAR 파일을 추가 하십시오. 을 클래스 경로에 java.sql을 가져 오십시오. *

그의 테스트 앱은 데이터베이스 파일을 생성하고, 일부 SQL 명령을 전송하여 테이블을 생성하고, 데이터를 테이블에 저장 한 후 다시 읽고 콘솔에 표시합니다. 프로젝트의 루트 디렉토리에 test.db 파일 이 작성됩니다 . 이 예제는으로 실행할 수 있습니다 java -cp .:sqlitejdbc-v056.jar Test.

package com.rungeek.sqlite;

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

public class Test {
    public static void main(String[] args) throws Exception {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
        Statement stat = conn.createStatement();
        stat.executeUpdate("drop table if exists people;");
        stat.executeUpdate("create table people (name, occupation);");
        PreparedStatement prep = conn.prepareStatement(
            "insert into people values (?, ?);");

        prep.setString(1, "Gandhi");
        prep.setString(2, "politics");
        prep.addBatch();
        prep.setString(1, "Turing");
        prep.setString(2, "computers");
        prep.addBatch();
        prep.setString(1, "Wittgenstein");
        prep.setString(2, "smartypants");
        prep.addBatch();

        conn.setAutoCommit(false);
        prep.executeBatch();
        conn.setAutoCommit(true);

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

1
이것이 Joel이 인터넷에 걸려있는 모든 "오래된"게시물로 인해 stackoverflow.com의 디자인이 더 좋다고 말할 때 황소 (Google 기술 토크 : youtube.com/watch?v=NWHfY_lvKIQ ) 와 이야기하고 있다고 생각하는 이유 입니다. 그냥 다시 해시입니다.
Nikolaos

26
또한 Crawshaw 프로젝트가 중단 된 것처럼 보이지만 여기서는 포크되어 업데이트되었습니다. xerial.org/trac/Xerial/wiki/SQLiteJDBC
lapo

8
zentus.com이 깨진 것처럼 보입니다. priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
Daniel Magnusson

3
감사합니다 @DanielMagnusson, 당신은 생명의 은인입니다. 이 주제에 대해, sqliteJDBC 드라이버를 찾고있는 사람 은 about.htm 링크가 올바르지 않기 때문에 priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/… 로 갈 수 있습니다 .
javatarz


30

나는 당신이 SQLite에 대해 특별히 물었다는 것을 이해하지만 HSQL 데이터베이스 가 Java에 더 적합 할 것입니다. Java 자체로 작성되고 JVM에서 실행되며 메모리 내 테이블 등을 지원하며 모든 기능을 통해 프로토 타이핑 및 단위 테스트에 매우 유용합니다.


3
예, HSQL은 매우 좋은 선택이며 좋은 효과를 위해 몇 가지 클라이언트 응용 프로그램에서 광범위하게 사용했습니다. 그러나이 경우 실제로 SQLite를 사용하고 싶었습니다.
Scott Bennett-McLeish

18

데이비드 Crawshaw이 프로젝트 (sqlitejdbc-v056.jar가) 날짜와 마지막 업데이트 밖으로 보인다이었다 2009년 6월 20일, 여기 소스

Xerials 포크를 추천합니다Crawshaw sqlite 래퍼의 를 합니다. sqlitejdbc-v056.jar을 Xerials sqlite-jdbc-3.7.2.jar 파일로 문제없이 교체했습니다.

Bernie의 답변 과 동일한 구문을 사용 하며 최신 sqlite 라이브러리를 사용하면 훨씬 빠릅니다.

Zentus의 SQLite JDBC와 다른 점은 무엇입니까?

Zentus의 원래 SQLite JDBC 드라이버 http://www.zentus.com/sqlitejdbc/ 자체는 Java 언어의 SQLite 데이터베이스를 사용하기위한 훌륭한 유틸리티이며 SQLiteJDBC 라이브러리도 그 구현에 의존합니다. 그러나 SQLite의 c / c ++ 코드를 Java로 완전히 변환하는 순수 Java 버전은 각 OS (win, mac, linux)에 대해 컴파일 된 SQLite 바이너리를 사용하는 기본 버전에 비해 상당히 느립니다.

sqlite-jdbc의 기본 버전을 사용하려면 사용자는 명령 행 인수를 사용하여 기본 코드 (dll, jnilib, JNDI C 프로그램 인 파일)에 대한 경로를 설정해야합니다 (예 : -Djava.library.path = (dll, jnilib 등의 경로) 또는 -Dorg.sqlite.lib.path 등.이 프로세스는 오류가 발생하기 쉬우 며 모든 사용자에게 이러한 변수를 설정하도록 지시하는 것이 번거 롭습니다. 우리의 SQLiteJDBC 라이브러리는 이러한 불편을 완전히 없애줍니다.

또 다른 차이점은이 라이브러리에서 가장 인기있는 사용자 중 하나이기 때문에이 SQLiteJDBC 라이브러리를 최신 버전의 SQLite 엔진에 최신 상태로 유지한다는 것입니다. 예를 들어, SQLite JDBC는 맞춤형 게놈 브라우저를 만드는 유틸리티 인 UTGB (University of Tokyo Genome Browser) 툴킷의 핵심 구성 요소입니다.

편집 : 무언가를 업데이트 할 때 평소와 같이 코드에서 모호한 장소에 문제가 생길 수 있습니다. 시험 시험 시험 =)


1
sqlite-jdbc프로젝트는 매우 중요하지만, 그것이 알고 있어야 아파치 라이센스 . 따라서 코드가 FOSS인지 독점인지에 관계없이 사용하는 경우 귀속을 제공해야합니다.
dotancohen

16

순수한 Javaite SQLite 구현 인 새 프로젝트 SQLJet 이 있습니다. 아직 모든 SQLite 기능을 지원하지는 않지만 SQLite 데이터베이스와 함께 작동하는 일부 Java 프로젝트에는 매우 적합한 옵션 일 수 있습니다.


4
유망한 것처럼 보이지만 SQL 쿼리 기능을 아직 제공하지 않는 것 같습니다.
Scott Bennett-McLeish 5

여전히 낮은 수준의 API 인 SQL 쿼리를 지원하지 않습니다.
바젤 시사 니

SQLite 파일 만 생성 해야하는 응용 프로그램 , 즉 데이터를 쿼리하기 위해 SQL이 필요하지 않은 응용 프로그램에 여전히 유용 합니다.
연금술사

5

Bernie의 게시물은 매우 유용합니다. 투표에 실패했습니다 (평판이 충분하지 않음 :().하지만 많은 도움이되었습니다. 반복하기 만하면됩니다!

http://www.zentus.com/sqlitejdbc/

여기서 최신 SQLite JDBC jar을 찾을 수 있습니다. 항아리를 클래스 패스에 추가하면 완료됩니다! :) Bernie의 샘플 코드를 실행하여 모든 것이 정상인지 테스트 할 수 있습니다.

http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html http://www.sqlite.org/lang.html

여기서 SQLite의 SQL 구문에 대한 도움말을 찾을 수 있습니다. SQLite에 건배 :)


3

코드를 컴파일하고 실행할 때 클래스 경로 옵션 값을 설정해야합니다. 다음과 같이 :

javac -classpath .;sqlitejdbc-v056.jar Text.java

java -classpath .;sqlitejdbc-v056.jar Text

"."에주의하십시오 그리고 sparate ";"(win, 리눅스는 ":")


3

sqlitejdbc 코드는 https://github.com/crawshaw/sqlitejdbc 에서 git을 사용하여 다운로드 할 수 있습니다 .

# git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc
...
# cd sqlitejdbc
# make

참고 : sqlite 라이브러리 / deps를 다운로드하려면 Makefile에 curl 바이너리가 필요합니다.


2

예제 코드는 Tomcat에서 메모리 누수로 이어집니다 (웹앱을 배포 해제 한 후에도 클래스 로더가 여전히 메모리에 남아 있음) outofmemory. 이를 해결하는 방법은 sqlite-jdbc-3.7.8.jar 을 사용하는 것입니다 . 스냅 샷이므로 아직 maven에 나타나지 않습니다.


0

오식: java -cp .:sqlitejdbc-v056.jar Test

해야한다: java -cp .:sqlitejdbc-v056.jar; Test

".jar"뒤에 세미콜론이 표시되어 사람들에게 도움이되기를 바랍니다.


정교하게 관리? * nix에서; 테스트 명령에서 java를 분리하므로 오류가 발생합니다. Windows에서 : : cp seperator로 작동하지 않습니다. 따라서 전혀 .:xxx.jar;이해가되지 않습니다. 또한 Test 클래스의 패키지 이름을 지정해야합니다.
eckes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.