SQLite JDBC é uma biblioteca para acessar e criar arquivos de banco de dados SQLite em Java.
Nossa biblioteca SQLiteJDBC não requer configuração, pois as bibliotecas nativas dos principais sistemas operacionais, incluindo Windows, macOS, Linux etc., são montadas em um único arquivo JAR (Java Archive).
O projeto é mantido, mas não está sendo desenvolvido ativamente:
Acompanhamos cada nova versão do SQLite e lançaremos uma versão correspondente do nosso driver.
Bugs serão investigados e corrigidos, se possível.
Novos recursos são impulsionados por solicitações pull.
O atual mantenedor do projeto é gotson.
➡️ Mais exemplos de uso e configuração estão disponíveis em USAGE.md
SQLite JDBC é uma biblioteca para acessar bancos de dados SQLite através da API JDBC. Para o uso geral do JDBC, consulte Tutorial JDBC ou Documentação Oracle JDBC.
Baixe sqlite-jdbc-3.47.1.0.jar
e anexe este arquivo jar ao seu caminho de classe.
Abra uma conexão de banco de dados SQLite a partir do seu código. (veja o exemplo abaixo)
Supondo que sqlite-jdbc-3.47.1.0.jar
seja colocado no diretório atual.
> javac Sample.java
> java -classpath " .;sqlite-jdbc-3.47.1.0.jar " Sample # in Windows
or
> java -classpath " .:sqlite-jdbc-3.47.1.0.jar " Sample # in macOS or Linux
name = leo
id = 1
name = yui
id = 2
import java . sql . Connection ;
import java . sql . DriverManager ;
import java . sql . ResultSet ;
import java . sql . SQLException ;
import java . sql . Statement ;
public class Sample
{
public static void main ( String [] args )
{
// NOTE: Connection and Statement are AutoCloseable.
// Don't forget to close them both in order to avoid leaks.
try
(
// create a database connection
Connection connection = DriverManager . getConnection ( "jdbc:sqlite:sample.db" );
Statement statement = connection . createStatement ();
)
{
statement . setQueryTimeout ( 30 ); // set timeout to 30 sec.
statement . executeUpdate ( "drop table if exists person" );
statement . executeUpdate ( "create table person (id integer, name string)" );
statement . executeUpdate ( "insert into person values(1, 'leo')" );
statement . executeUpdate ( "insert into person values(2, 'yui')" );
ResultSet rs = statement . executeQuery ( "select * from person" );
while ( rs . next ())
{
// read the result set
System . out . println ( "name = " + rs . getString ( "name" ));
System . out . println ( "id = " + rs . getInt ( "id" ));
}
}
catch ( SQLException e )
{
// if the error message is "out of memory",
// it probably means no database file is found
e . printStackTrace ( System . err );
}
}
}
Nosso pacote de driver SQLite JDBC (ou seja, sqlite-jdbc-3.47.1.0.jar
) contém três tipos de bibliotecas SQLite nativas ( sqlitejdbc.dll
, sqlitejdbc.dylib
, sqlitejdbc.so
), cada uma delas é compilada para Windows, macOS e Linux . Um arquivo de biblioteca nativa apropriado é extraído automaticamente para a pasta temporária do seu sistema operacional, quando o programa carrega o driver org.sqlite.JDBC
.
Desde sqlite-jdbc-3.6.19, os motores SQLite compilados nativamente serão usados para os seguintes sistemas operacionais:
x86 | x86_64 | braçov5 | armv6 | armv7 | braço64 | ppc64 | riscv64 | |
---|---|---|---|---|---|---|---|---|
Windows | ✔ | ✔ | ✔ | ✔ | ||||
macOS | ✔ | ✔ | ||||||
Linux (libc) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Linux (musl) | ✔ | ✔ | ✔ | |||||
Android (nível de API 24+) | ✔ | ✔ | ✔ | ✔ | ||||
FreeBSD | ✔ | ✔ | ✔ |
Nos outros sistemas operacionais não listados acima, o SQLite puro-java é usado. (Aplica-se a versões anteriores a 3.7.15)
Se você quiser usar a biblioteca nativa para o seu sistema operacional, crie o código-fonte do zero.
Sqlite JDBC suporta imagem nativa GraalVM pronta para uso a partir da versão 3.40.1.0. Houve suporte rudimentar para algumas versões antes disso, mas isso não foi testado ativamente pelo CI.
Por padrão, a biblioteca sqlitejdbc
para o destino de compilação será incluída na imagem nativa, acompanhada pela configuração JNI necessária. Em tempo de execução, esta biblioteca será extraída para a pasta temporária e carregada de lá. No entanto, para uma inicialização mais rápida, é recomendado definir a propriedade org.sqlite.lib.exportPath
no momento da construção. Isso exportará a biblioteca sqlitejdbc
em tempo de construção para o diretório especificado e a biblioteca não será incluída como um recurso. Como resultado, a própria imagem nativa será um pouco menor e a sobrecarga de exportação da biblioteca em tempo de execução será eliminada, mas você precisa ter certeza de que a biblioteca pode ser encontrada em tempo de execução. A melhor maneira de fazer isso é simplesmente colocar a biblioteca ao lado do executável.
native-image -Dorg.sqlite.lib.exportPath= ~ /outDir -H:Path= ~ /outDir -cp foo.jar org.example.Main
Isso colocará a biblioteca compartilhada sqlitejdbc
e a saída da imagem nativa na pasta ~/outDir
.
Este exemplo usa o plugin maven native-build-tools:
< plugin >
< groupId >org.graalvm.buildtools</ groupId >
< artifactId >native-maven-plugin</ artifactId >
< configuration >
< buildArgs >
< buildArg >-Dorg.sqlite.lib.exportPath=${project.build.directory}</ buildArg >
</ buildArgs >
</ configuration >
</ plugin >
Isso colocará automaticamente a biblioteca sqlitejdbc
na pasta /target
do seu projeto, criando um ambiente de execução funcional. Ao empacotar o aplicativo resultante, basta incluir a biblioteca no pacote de distribuição.
Baixe no Maven Central ou na página de lançamentos.
< dependencies >
< dependency >
< groupId >org.xerial</ groupId >
< artifactId >sqlite-jdbc</ artifactId >
< version >3.47.1.0</ version >
</ dependency >
</ dependencies >
Snapshots da versão de desenvolvimento estão disponíveis no repositório de snapshots do Sonatype.
Os recursos do Maven Central são assinados usando GPG e os arquivos de assinatura, terminando em .asc, estão disponíveis no mesmo local dos demais downloads.
A seguinte chave é usada atualmente para assinar autorizações:
-----INICIAR BLOCO DE CHAVE PÚBLICA PGP----- Comentário: C1CB A75E C9BD 0BAF 8061 9354 59E0 5CE6 1818 7ED4 Comentário: Taro L. Saito (para ações do GitHub) <[email protected]> xjMEYuRVGhYJKwYBBAHaRw8BAQdA2Dp4m1Yhtb1g94pQzzL24FuP6b9KXF8lP9Dh hZnynhfNM1Rhcm8gTC4gU2FpdG8gKEZvciBHaXRIdWIgQWN0aW9ucykgPGxlb0B4 ZXJpYWwub3JnPsKUBBMWCgA8FiEEwcunXsm9C6+AYZNUWeBc5hgYftQFAmLkVRoC GwMFCwkIBwIDIgIBBhUKCQgLAgQWAgMBAh4HAheAAAoJEFngXOYYGH7UfPwBAK7x TVRebZeWcAwmGaMUsbg7SgJou8xnkhByObPLUC/4AQDPsZeYmi4KXyXPzmqhCicd Y+ZSJWIDQqitK2ujPDFXA844BGLkVRoSCisGAQQBl1UBBQEBB0Atu9kejBi+6wfO T0a9z/LYEEdNXM/VX6xt1onKToPPdQMBCAfCeAQYFgoAIBYhBMHLp17JvQuvgGGT VFngXOYYGH7UBQJi5FUaAhsMAAoJEFngXOYYGH7UlMABAKyRCazhVyUFg5FOpAnm ckBY38CaMGPPLXVyY8Kr6dYFAP9wYLu7nsDZCOXkAgS+et4Pk1WZCggoYUkxsX1o 0KZXBQ == =Wyas -----FIM DO BLOCO DE CHAVE PÚBLICA PGP-----
A versão do projeto segue a versão da biblioteca SQLite que vem no jar, com um dígito extra para indicar o incremento do projeto.
Por exemplo, se a versão do SQLite for 3.39.2
, a versão do projeto será 3.39.2.x
, onde x
começa em 0 e aumenta a cada versão que não altera a versão do SQLite.
Se a versão SQLite for atualizada para 3.40.0
, a versão do projeto será atualizada para 3.40.0.0
.
Pode ser necessário adicionar o transformador de plug-in de sombra para resolver o problema No suitable driver found for jdbc:sqlite:
< transformer
implementation= " org.apache.maven.plugins.shade.resource.AppendingTransformer " >
< resource >META-INF/services/java.sql.Driver</ resource >
</ transformer >
< dependency >
< groupId >org.xerial</ groupId >
< artifactId >sqlite-jdbc</ artifactId >
< version >3.47.1.0</ version >
</ dependency >
Estamos sempre em busca de:
Revisores de problemas ou PRs, você pode verificar
Colaboradores para enviar PRs, você pode verificar e
Por favor, leia nosso guia de contribuição.