<classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>\r
<classpathentry kind="src" path="src/main/java"/>\r
<classpathentry kind="src" path="src/main/resources" including="native/**|org/**" excluding="**/*.java"/>\r
- <classpathentry kind="src" path="." including="VERSION" excluding="**/*.java"/>\r
+ <classpathentry kind="src" path="." including="VERSION|LICENSE*" excluding="**/*.java"/>\r
<classpathentry kind="output" path="target/classes"/>\r
<classpathentry kind="var" path="M2_REPO/org/xerial/thirdparty/jdbc-api/1.4/jdbc-api-1.4.jar"/>\r
<classpathentry kind="var" path="M2_REPO/junit/junit/4.1/junit-4.1.jar"/>\r
--- /dev/null
+<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">\r
+ <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>\r
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean"/>\r
+ <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>\r
+ <booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>\r
+ <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="sqlite-jdbc"/>\r
+ <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>\r
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${build_project}/maven-eclipse.xml"/>\r
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${build_project}"/>\r
+ <stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/>\r
+ <booleanAttribute key="org.eclipse.debug.core.capture_output" value="false"/>\r
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version='1.0'?><launchConfigurationWorkingSet editPageId='org.eclipse.ui.resourceWorkingSetPage' factoryID='org.eclipse.ui.internal.WorkingSetFactory' label='workingSet' name='workingSet'><item factoryID='org.eclipse.ui.internal.model.ResourceFactory' path='sqlite-jdbc' type='4'/></launchConfigurationWorkingSet>}"/>\r
+ <stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/>\r
+ <booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>\r
+ <booleanAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_OUTPUT_ON" value="false"/>\r
+ <booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>\r
+ <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>\r
+ <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">\r
+ <listEntry value="1"/>\r
+ </listAttribute>\r
+ <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">\r
+ <listEntry value="/sqlite-jdbc/maven-eclipse.xml"/>\r
+ </listAttribute>\r
+</launchConfiguration>
\ No newline at end of file
<buildCommand>\r
<name>org.eclipse.jdt.core.javabuilder</name>\r
</buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>\r
+ <arguments>\r
+ <dictionary>\r
+ <key>LaunchConfigHandle</key>\r
+ <value><project>/.externalToolBuilders/Maven_Ant_Builder.launch</value>\r
+ </dictionary>\r
+ </arguments>\r
+ </buildCommand>\r
</buildSpec>\r
<natures>\r
<nature>org.eclipse.jdt.core.javanature</nature>\r
-sqlite_version = 3.6.17
+version = 3.6.17
--- /dev/null
+<project default="copy-resources">\r
+ <target name="init"/>\r
+ <target name="copy-resources" depends="init">\r
+ <copy todir="target/classes/META-INF/maven/org.xerial/sqlite-jdbc" filtering="false">\r
+ <fileset dir="." includes="VERSION|LICENSE*" excludes="**/*.java"/>\r
+ </copy>\r
+ </target>\r
+</project>
\ No newline at end of file
</resource>\r
<resource>\r
<directory>${basedir}</directory>\r
+ <targetPath>META-INF/maven/${groupId}/${artifactId}</targetPath>\r
<includes>\r
<include>VERSION</include>\r
+ <include>LICENSE*</include>\r
</includes>\r
</resource>\r
</resources>\r
default: test
-test: native $(test_classes)
- $(JAVA) -Djava.library.path=build/$(target) \
- -cp "build/$(sqlitejdbc)-native.jar$(sep)build$(sep)$(libjunit)" \
- org.junit.runner.JUnitCore $(tests)
+test: native
-native: build/$(sqlitejdbc)-native.jar build/$(target)/$(LIBNAME)
+native: build/$(target)/$(LIBNAME)
-build/$(sqlitejdbc)-native.jar: $(native_classes)
- cd build && jar cf $(sqlitejdbc)-native.jar $(java_classlist)
build/$(target)/$(LIBNAME): build/$(sqlite)-$(target)/sqlite3.o build/org/sqlite/NativeDB.class
@mkdir -p build/$(target)
arch := $(shell uname -m)
endif
-sqlite := sqlite-$(sqlite_version)
-
-sqlitejdbc := sqlitejdbc-v$(shell cat VERSION)
+sqlite := sqlite-$(version)
jni_md := $(shell find -L "$(JAVA_HOME)" -name jni_md.h)
ifneq ($(jni_md),)
default: test
-test: dist/$(sqlitejdbc)-pure.jar $(test_classes)
- $(JAVA) -cp "dist/$(sqlitejdbc)-pure.jar$(sep)build$(sep)$(libjunit)" \
- org.junit.runner.JUnitCore $(tests)
-
-dist/$(sqlitejdbc)-pure.jar: build/org/sqlite/SQLite.class $(java_classes)
- @mkdir -p dist
- cd build && jar cf ../$@ \
- org/sqlite/SQLite.class $(java_classlist) \
- -C ../$(nestedvm)/build org/ibex
-
-build/org/sqlite/%.class: ../src/main/java/org/sqlite/%.java
- @mkdir -p build
- $(JAVAC) -source 1.5 -target 1.5 -classpath "$(nestedvm)/build" \
- -sourcepath ../src/main/java -d build $<
-
-build/test/org/sqlite/%.class: ../src/test/java/org/sqlite/%.java
- @mkdir -p build/test
- $(JAVAC) -target 1.5 -classpath "build$(sep)$(libjunit)" \
- -sourcepath ../src/test/java -d build/test $<
+test: build/org/sqlite/SQLite.class
$(nestedvm)/%:
$(MAKE) -C $(nestedvm) $*
+++ /dev/null
-# This file is a nasty piece of work I use for building SQLiteJDBC
-# across multiple architectures. Best to ignore it.
-
-include Makefile.common
-
-afsdir := /afs/hcoop.net/user/c/cr/crawshaw
-repo := $(afsdir)/repo/sqlitejdbc
-files := $(afsdir)/files/sqlitejdbc
-
-default: dist/$(sqlitejdbc).jar dist/$(sqlitejdbc)-src.tgz dist/$(sqlitejdbc)-bin.tgz
-
-release: dist/$(sqlitejdbc).jar dist/$(sqlitejdbc)-src.tgz dist/$(sqlitejdbc)-bin.tgz
- darcs push -a hcoop:$(repo)
- scp dist/$(sqlitejdbc)* hcoop:$(files)/
-
-dist/$(sqlitejdbc).jar: build/mac-universal.lib build/win-x86.lib build/linux-x86.lib dist/$(sqlitejdbc)-pure.jar
- cp dist/$(sqlitejdbc)-pure.jar build/$(sqlitejdbc).jar
- (cd build; jar uf $(sqlitejdbc).jar *.lib)
- cp build/$(sqlitejdbc).jar $@
- rm build/$(sqlitejdbc).jar
-
-dist/$(sqlitejdbc)-src.tgz:
- darcs dist -d $(sqlitejdbc)-src
- mv $(sqlitejdbc)-src.tar.gz $@
-
-dist/$(sqlitejdbc)-bin.tgz: dist/$(sqlitejdbc).jar
- cp build/mac-universal.lib build/libsqlitejdbc.jnilib
- cp build/win-x86.lib build/sqlitejdbc.dll
- cp build/linux-x86.lib build/libsqlitejdbc.so
- $(MAKE) build/$(sqlitejdbc)-native.jar
- cd build; tar cfz ../$@ $(sqlitejdbc)-native.jar \
- libsqlitejdbc.jnilib sqlitejdbc.dll libsqlitejdbc.so \
-
-dist/$(sqlitejdbc)-pure.jar:
- darcs push -a debian:repo/sqlitejdbc
- ssh debian "cd repo/sqlitejdbc && make -f Makefile.nested test $@"
- scp debian:repo/sqlitejdbc/$@ $@
-
-build/mac-universal.lib:
- @mkdir -p dist build/Darwin-universal
- $(MAKE) os=Darwin arch=ppc native
- $(MAKE) os=Darwin arch=i386 native
- lipo -create build/Darwin-ppc/$(Darwin_LIBNAME) \
- build/Darwin-i386/$(Darwin_LIBNAME) \
- -output $@
-
-build/win-x86.lib:
- darcs push -a debian:repo/sqlitejdbc
- ssh debian "cd repo/sqlitejdbc && make os=Win arch=i586 native"
- scp debian:repo/sqlitejdbc/build/Win-i586/$(Win_LIBNAME) $@
-
-build/linux-x86.lib:
- darcs push -a debian:repo/sqlitejdbc
- ssh debian "cd repo/sqlitejdbc && make arch=i386 test"
- scp debian:repo/sqlitejdbc/build/Default-i386/$(Default_LIBNAME) $@
-
+++ /dev/null
-052
\ No newline at end of file
{
private static final String PREFIX = "jdbc:sqlite:";
- static
- {
- try
- {
+ static {
+ try {
DriverManager.registerDriver(new JDBC());
}
- catch (SQLException e)
- {
+ catch (SQLException e) {
e.printStackTrace();
}
}
- public int getMajorVersion()
- {
- return 1;
+ public int getMajorVersion() {
+ return SQLiteJDBCLoader.getMajorVersion();
}
- public int getMinorVersion()
- {
- return 1;
+ public int getMinorVersion() {
+ return SQLiteJDBCLoader.getMinorVersion();
}
- public boolean jdbcCompliant()
- {
+ public boolean jdbcCompliant() {
return false;
}
- public boolean acceptsURL(String url)
- {
+ public boolean acceptsURL(String url) {
return url != null && url.toLowerCase().startsWith(PREFIX);
}
- public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException
- {
+ public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
DriverPropertyInfo sharedCache = new DriverPropertyInfo("shared_cache", "false");
sharedCache.choices = new String[] { "true", "false" };
sharedCache.description = "Enable SQLite Shared-Cache mode, native driver only.";
return new DriverPropertyInfo[] { sharedCache, loadExt };
}
- public Connection connect(String url, Properties info) throws SQLException
- {
+ public Connection connect(String url, Properties info) throws SQLException {
if (!acceptsURL(url))
return null;
url = url.trim();
colType = colType == null ? "TEXT" : colType.toUpperCase();
int colJavaType = -1;
- if (colType == "INT" || colType == "INTEGER")
+ if (colType.equals("INT") || colType.equals("INTEGER"))
colJavaType = Types.INTEGER;
- else if (colType == "TEXT")
+ else if (colType.equals("TEXT"))
colJavaType = Types.VARCHAR;
- else if (colType == "FLOAT")
+ else if (colType.equals("FLOAT"))
colJavaType = Types.FLOAT;
else
colJavaType = Types.VARCHAR;
\r
private static boolean extracted = false;\r
\r
- public static boolean initialize()\r
- {\r
+ public static boolean initialize() {\r
loadSQLiteNativeLibrary();\r
return extracted;\r
}\r
\r
- static boolean getPureJavaFlag()\r
- {\r
+ static boolean getPureJavaFlag() {\r
return Boolean.parseBoolean(System.getProperty("sqlite.purejava", "false"));\r
}\r
\r
- public static boolean isNativeMode()\r
- {\r
+ public static boolean isNativeMode() {\r
if (getPureJavaFlag())\r
return false;\r
\r
* @throws IOException\r
* @throws NoSuchAlgorithmException\r
*/\r
- static String md5sum(InputStream input) throws IOException\r
- {\r
+ static String md5sum(InputStream input) throws IOException {\r
BufferedInputStream in = new BufferedInputStream(input);\r
\r
- try\r
- {\r
+ try {\r
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");\r
DigestInputStream digestInputStream = new DigestInputStream(in, digest);\r
- for (; digestInputStream.read() >= 0;)\r
- {\r
+ for (; digestInputStream.read() >= 0;) {\r
\r
}\r
ByteArrayOutputStream md5out = new ByteArrayOutputStream();\r
md5out.write(digest.digest());\r
return md5out.toString();\r
}\r
- catch (NoSuchAlgorithmException e)\r
- {\r
+ catch (NoSuchAlgorithmException e) {\r
throw new IllegalStateException("MD5 algorithm is not available: " + e);\r
}\r
- finally\r
- {\r
+ finally {\r
in.close();\r
}\r
}\r
* @return\r
*/\r
private static boolean extractAndLoadLibraryFile(String libFolderForCurrentOS, String libraryFileName,\r
- String targetFolder)\r
- {\r
+ String targetFolder) {\r
String nativeLibraryFilePath = libFolderForCurrentOS + "/" + libraryFileName;\r
final String prefix = "sqlite-" + getVersion() + "-";\r
\r
String extractedLibFileName = prefix + libraryFileName;\r
File extractedLibFile = new File(targetFolder, extractedLibFileName);\r
\r
- try\r
- {\r
- if (extractedLibFile.exists())\r
- {\r
+ try {\r
+ if (extractedLibFile.exists()) {\r
// test md5sum value\r
String md5sum1 = md5sum(SQLiteJDBCLoader.class.getResourceAsStream(nativeLibraryFilePath));\r
String md5sum2 = md5sum(new FileInputStream(extractedLibFile));\r
\r
- if (md5sum1.equals(md5sum2))\r
- {\r
+ if (md5sum1.equals(md5sum2)) {\r
return loadNativeLibrary(targetFolder, extractedLibFileName);\r
}\r
- else\r
- {\r
+ else {\r
// remove old native library file\r
boolean deletionSucceeded = extractedLibFile.delete();\r
- if (!deletionSucceeded)\r
- {\r
+ if (!deletionSucceeded) {\r
throw new IOException("failed to remove existing native library file: "\r
+ extractedLibFile.getAbsolutePath());\r
}\r
FileOutputStream writer = new FileOutputStream(extractedLibFile);\r
byte[] buffer = new byte[1024];\r
int bytesRead = 0;\r
- while ((bytesRead = reader.read(buffer)) != -1)\r
- {\r
+ while ((bytesRead = reader.read(buffer)) != -1) {\r
writer.write(buffer, 0, bytesRead);\r
}\r
\r
writer.close();\r
reader.close();\r
\r
- if (!System.getProperty("os.name").contains("Windows"))\r
- {\r
- try\r
- {\r
+ if (!System.getProperty("os.name").contains("Windows")) {\r
+ try {\r
Runtime.getRuntime().exec(new String[] { "chmod", "755", extractedLibFile.getAbsolutePath() })\r
.waitFor();\r
}\r
- catch (Throwable e)\r
- {}\r
+ catch (Throwable e) {}\r
}\r
\r
return loadNativeLibrary(targetFolder, extractedLibFileName);\r
}\r
- catch (IOException e)\r
- {\r
+ catch (IOException e) {\r
System.err.println(e.getMessage());\r
return false;\r
}\r
\r
}\r
\r
- private static synchronized boolean loadNativeLibrary(String path, String name)\r
- {\r
+ private static synchronized boolean loadNativeLibrary(String path, String name) {\r
File libPath = new File(path, name);\r
- if (libPath.exists())\r
- {\r
- // System.setProperty("org.sqlite.lib.path", path == null ? "./" :\r
- // path);\r
- // System.setProperty("org.sqlite.lib.name", name);\r
-\r
- try\r
- {\r
+ if (libPath.exists()) {\r
+\r
+ try {\r
System.load(new File(path, name).getAbsolutePath());\r
return true;\r
}\r
- catch (UnsatisfiedLinkError e)\r
- {\r
+ catch (UnsatisfiedLinkError e) {\r
System.err.println(e);\r
return false;\r
}\r
return false;\r
}\r
\r
- private static void loadSQLiteNativeLibrary()\r
- {\r
+ private static void loadSQLiteNativeLibrary() {\r
if (extracted)\r
return;\r
\r
boolean runInPureJavaMode = getPureJavaFlag();\r
- if (runInPureJavaMode)\r
- {\r
+ if (runInPureJavaMode) {\r
extracted = false;\r
return;\r
}\r
if (sqliteNativeLibraryName == null)\r
sqliteNativeLibraryName = System.mapLibraryName("sqlitejdbc");\r
\r
- if (sqliteNativeLibraryPath != null)\r
- {\r
- if (loadNativeLibrary(sqliteNativeLibraryPath, sqliteNativeLibraryName))\r
- {\r
+ if (sqliteNativeLibraryPath != null) {\r
+ if (loadNativeLibrary(sqliteNativeLibraryPath, sqliteNativeLibraryName)) {\r
extracted = true;\r
return;\r
}\r
// Load the os-dependent library from a jar file\r
sqliteNativeLibraryPath = "/native/" + OSInfo.getNativeLibFolderPathForCurrentOS();\r
\r
- if (SQLiteJDBCLoader.class.getResource(sqliteNativeLibraryPath + "/" + sqliteNativeLibraryName) == null)\r
- {\r
+ if (SQLiteJDBCLoader.class.getResource(sqliteNativeLibraryPath + "/" + sqliteNativeLibraryName) == null) {\r
// use nested VM version\r
return;\r
}\r
// temporary library folder\r
String tempFolder = new File(System.getProperty("java.io.tmpdir")).getAbsolutePath();\r
/* Try extracting the library from jar */\r
- if (extractAndLoadLibraryFile(sqliteNativeLibraryPath, sqliteNativeLibraryName, tempFolder))\r
- {\r
+ if (extractAndLoadLibraryFile(sqliteNativeLibraryPath, sqliteNativeLibraryName, tempFolder)) {\r
extracted = true;\r
return;\r
}\r
return;\r
}\r
\r
- private static void getNativeLibraryFolderForTheCurrentOS()\r
- {\r
+ private static void getNativeLibraryFolderForTheCurrentOS() {\r
String osName = OSInfo.getOSName();\r
String archName = OSInfo.getArchName();\r
\r
}\r
\r
- public static String getVersion()\r
- {\r
- URL versionFile = SQLiteJDBCLoader.class.getResource("/VERSION");\r
+ public static int getMajorVersion() {\r
+ String[] c = getVersion().split("\\.");\r
+ return (c.length > 0) ? Integer.parseInt(c[0]) : 1;\r
+ }\r
+\r
+ public static int getMinorVersion() {\r
+ String[] c = getVersion().split("\\.");\r
+ return (c.length > 1) ? Integer.parseInt(c[1]) : 0;\r
+ }\r
+\r
+ public static String getVersion() {\r
+\r
+ URL versionFile = SQLiteJDBCLoader.class.getResource("/META-INF/maven/org.xerial/sqlite-jdbc/pom.properties");\r
+ if (versionFile == null)\r
+ versionFile = SQLiteJDBCLoader.class.getResource("/META-INF/maven/org.xerial/sqlite-jdbc/VERSION");\r
\r
String version = "unknown";\r
- try\r
- {\r
- if (versionFile != null)\r
- {\r
+ try {\r
+ if (versionFile != null) {\r
Properties versionData = new Properties();\r
versionData.load(versionFile.openStream());\r
- version = versionData.getProperty("sqlite_version", version);\r
+ version = versionData.getProperty("version", version);\r
version = version.trim().replaceAll("[^0-9\\.]", "");\r
}\r
}\r
- catch (IOException e)\r
- {\r
+ catch (IOException e) {\r
System.err.println(e);\r
}\r
return version;\r
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
+import java.sql.Types;
import org.junit.After;
import org.junit.Before;
{
conn = DriverManager.getConnection("jdbc:sqlite:");
stat = conn.createStatement();
- stat.executeUpdate("create table test (id integer primary key, fn, sn);");
+ stat.executeUpdate("create table test (id integer primary key, fn float, sn);");
stat.executeUpdate("create view testView as select * from test;");
meta = conn.getMetaData();
}
assertTrue(rs.next());
assertEquals(rs.getString("TABLE_NAME"), "test");
assertEquals(rs.getString("COLUMN_NAME"), "id");
+ assertEquals(rs.getInt("DATA_TYPE"), Types.INTEGER);
assertFalse(rs.next());
rs = meta.getColumns(null, null, "test", "fn");
assertTrue(rs.next());
assertEquals(rs.getString("COLUMN_NAME"), "fn");
+ assertEquals(rs.getInt("DATA_TYPE"), Types.FLOAT);
assertFalse(rs.next());
rs = meta.getColumns(null, null, "test", "sn");
public class JDBCTest
{
@BeforeClass
- public static void forName() throws Exception
- {
+ public static void forName() throws Exception {
Class.forName("org.sqlite.JDBC");
}
@Test
- public void enableLoadExtensionTest() throws Exception
- {
+ public void enableLoadExtensionTest() throws Exception {
Properties prop = new Properties();
prop.setProperty("enable_load_extension", "true");
Connection conn = null;
- try
- {
+ try {
conn = DriverManager.getConnection("jdbc:sqlite:", prop);
Statement stat = conn.createStatement();
// System.out.println(rs.getDouble(1));
}
- finally
- {
+ finally {
if (conn != null)
conn.close();
}
}
+ @Test
+ public void majorVersion() throws Exception {
+ int major = DriverManager.getDriver("jdbc:sqlite:").getMajorVersion();
+ int minor = DriverManager.getDriver("jdbc:sqlite:").getMinorVersion();
+ }
+
}