---
title: "Java och SQLite"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/178737-java-och-sqlite"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "erciz"
published: "2009-05-25T23:44:20.000Z"
updated: "2009-05-27T08:31:39.000Z"
replies: 9
views: 1616
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/178737-java-och-sqlite"
---

# Java och SQLite

## #1 — erciz, 2009-05-25T23:44Z

Jag försöker få Java att arbeta med SQLite, men jag får det inte att fungera.

Hittade en JDBC-drivare för SQLite här: <http://www.zentus.com/sqlitejdbc/>
tankade jar-filen och lade in den i mitt projekt i Eclipse.

Koden ser ut såhär:

```
import java.sql.*;

public class Test {
	public Test() {
		try {			
			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, "George");
			prep.setString(2, "politics");
			prep.addBatch();
			prep.setString(1, "Turing");
			prep.setString(2, "computers");
			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();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new Test();
	}
}
```

Det blir kompileringsfel: 

```
[Test] java.sql.SQLException: No suitable driver found for jdbc:sqlite:test.db
    [Test] 	at java.sql.DriverManager.getConnection(DriverManager.java:602)
    [Test] 	at java.sql.DriverManager.getConnection(DriverManager.java:207)
    [Test] 	at Test.<init>(Test.java:28)
    [Test] 	at Test.main(Test.java:86)
```

Förstår inte riktigt varför. Men jag vet inte heller hur jag gör en **test.db**\-fil med sqlite3, vad jag förstått så lär man göra det innan.

Permalänk: https://www.webforum.nu/p/178737

## #2 — Gein, 2009-05-26T08:24Z

Det du får är inte ett kompileringsfel utan ett runtime-fel.
Har du provat att skriva 

```
Class.forName("org.sqlite.JDBC");
```

 överst i ditt try-block (precis som exemplet på SQLiteJDBC-hemsidan gör)? Det kommer att försöka ladda in JDBC-klassen och smäller det på den raden så har du ett CLASSPATH-problem.

Jag gissar på att du helt enkelt inte lagt in den nerladdade jar-filen i din CLASSPATH när du kör programmet. Har du, i Eclipse, högerklicklat på Jar-filen och valt *"Build Path \> Add to Build Path"*?

Permalänk: https://www.webforum.nu/p/2185807

## #3 — erciz, 2009-05-26T22:42Z

> **[Gein skrev:](https://www.webforum.nu/p/1468959)**
>
> Har du, i Eclipse, högerklicklat på Jar-filen och valt *"Build Path \> Add to Build Path"*?

Jo, har Eclipse och har gjort sådär, så jar-filen ska finnas där.

Men jag får ännu mer fel när jag lägger till raderna

```
try {
	Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
```

så får jag felet:

```
   [Test] java.lang.ClassNotFoundException: org.sqlite.JDBC
   [Test] 	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
   [Test] 	at java.security.AccessController.doPrivileged(Native Method)
   [Test] 	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
   [Test] 	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
   [Test] 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
   [Test] 	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
   [Test] 	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
   [Test] 	at java.lang.Class.forName0(Native Method)
   [Test] 	at java.lang.Class.forName(Class.java:169)
   [Test] 	at Test.<init>(Test.java:17)
   [Test] 	at Test.main(Test.java:11)
   [Test] java.sql.SQLException: No suitable driver found for jdbc:sqlite:test.db
   [Test] 	at java.sql.DriverManager.getConnection(DriverManager.java:602)
   [Test] 	at java.sql.DriverManager.getConnection(DriverManager.java:207)
   [Test] 	at Test.<init>(Test.java:24)
   [Test] 	at Test.main(Test.java:11)
```

Ett fel kan naturligtvis vara att jag inte lyckats skapa en **test.db**\-fil, men antar att det är nåt mer.

Permalänk: https://www.webforum.nu/p/2185888

## #4 — erciz, 2009-05-26T23:00Z

Misstänker att Eclipse kan trassla till det lite så jag testade nu att kopiera **Test.java** direkt från hemsidan, och lade **sqlitejdbc-v054.jar** i samma katalog: 

```
import java.sql.*;

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();
  }
}
```

kompilerade med 

```
javac Test.java
```

 det gick bra.

Sen när jag körde med 

```
java -cp .:sqlitejdbc-v054.jar Test
```

 exakt som på hemsidan, men det resulterade i detta fel: 

```
Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: Test.  Program will exit.
```

Sen testade jag med det enkla kommandot:

```
java Test
```

Men inte heller det hjälpte, fick följande fel:

```
Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at Test.main(Test.java:6)
```

Permalänk: https://www.webforum.nu/p/2185890

## #5 — Gein, 2009-05-27T06:37Z

> **[erciz skrev:](https://www.webforum.nu/p/1469052)**
>
> Jo, har Eclipse och har gjort sådär, så jar-filen ska finnas där.
> 
> Men jag får ännu mer fel när jag lägger till raderna
>
> ```
> try {
> 	Class.forName("org.sqlite.JDBC");
> } catch (ClassNotFoundException e) {
> 	// TODO Auto-generated catch block
> 	e.printStackTrace();
> }
> ```
>
> 
> 
> så får jag felet:
>
> ```
>    [Test] java.lang.ClassNotFoundException: org.sqlite.JDBC
>    [Test] 	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>    [Test] 	at java.security.AccessController.doPrivileged(Native Method)
>    [Test] 	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>    [Test] 	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
>    [Test] 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>    [Test] 	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
>    [Test] 	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
>    [Test] 	at java.lang.Class.forName0(Native Method)
>    [Test] 	at java.lang.Class.forName(Class.java:169)
>    [Test] 	at Test.<init>(Test.java:17)
>    [Test] 	at Test.main(Test.java:11)
>    [Test] java.sql.SQLException: No suitable driver found for jdbc:sqlite:test.db
>    [Test] 	at java.sql.DriverManager.getConnection(DriverManager.java:602)
>    [Test] 	at java.sql.DriverManager.getConnection(DriverManager.java:207)
>    [Test] 	at Test.<init>(Test.java:24)
>    [Test] 	at Test.main(Test.java:11)
> ```
>
> 
> 
> Ett fel kan naturligtvis vara att jag inte lyckats skapa en **test.db**\-fil, men antar att det är nåt mer.

Vilket tydligt indikerar att din JDBC driver inte finns i din CLASSPATH.

Permalänk: https://www.webforum.nu/p/2185900

## #6 — Gein, 2009-05-27T06:45Z

> **[erciz skrev:](https://www.webforum.nu/p/1469052)**
>
> Jo, har Eclipse och har gjort sådär, så jar-filen ska finnas där.

Så för att vara övertydlig. Om du expanderar ditt projekt i Eclipse och sedan tittar under *"Referenced Libraries"* så hittar du *sqlitejdbc-v054.jar* där, eller hur?

Och om du går in i arkivmenyn *"Run"* och sedan *"Run Configurations"*, markerar den konfiguration som du använder för att starta din test-applikation, klickar på fliken *"Classpath"* så hittar du även *sqlitejdbc-v054.jar* under *"User Entries"*, korrekt?
Isåfall ska du ha JDBC drivern på din classpath när du kör ditt program genom Eclipse.

Permalänk: https://www.webforum.nu/p/2185902

## #7 — erciz, 2009-05-27T07:30Z

> **[Gein skrev:](https://www.webforum.nu/p/1469067)**
>
> Så för att vara övertydlig. Om du expanderar ditt projekt i Eclipse och sedan tittar under *"Referenced Libraries"* så hittar du *sqlitejdbc-v054.jar* där, eller hur?
> 
> Och om du går in i arkivmenyn *"Run"* och sedan *"Run Configurations"*, markerar den konfiguration som du använder för att starta din test-applikation, klickar på fliken *"Classpath"* så hittar du även *sqlitejdbc-v054.jar* under *"User Entries"*, korrekt?
> Isåfall ska du ha JDBC drivern på din classpath när du kör ditt program genom Eclipse.

Ja, jar-filen finns under "Referenced Libraries" och under fliken "Classpatch". Bifogar en skärmdump.

Permalänk: https://www.webforum.nu/p/2185910

## #8 — Gein, 2009-05-27T07:54Z

Då vet jag inte riktigt vad du gör för fel. Så här gjorde jag nu iaf:

Skapade ett nytt Java-projekt, döpt till "SqlLiteTest".
Skapade en lib-katalog.
Kopierade in sqlitejdbc-v054.jar i lib.
La till jar-filen till Build Path.
Skapade Test.java innehållandes följande:

```
import java.sql.*;

public class Test {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
	    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, "George");
        prep.setString(2, "politics");
        prep.addBatch();
        prep.setString(1, "Turing");
        prep.setString(2, "computers");
        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();
	}
}
```

Sedan körde jag Test-klassen och det fungerade. test.db skapades i projekt-katalogen.

Permalänk: https://www.webforum.nu/p/2185911

## #9 — erciz, 2009-05-27T08:29Z

> **[Gein skrev:](https://www.webforum.nu/p/1469076)**
>
> Då vet jag inte riktigt vad du gör för fel. Så här gjorde jag nu iaf:
> 
> Skapade ett nytt Java-projekt, döpt till "SqlLiteTest".
> Skapade en lib-katalog.
> Kopierade in sqlitejdbc-v054.jar i lib.
> La till jar-filen till Build Path.
> Skapade Test.java innehållandes följande:
>
>
> ```
> ...
> ```
>
> 
> Sedan körde jag Test-klassen och det fungerade. test.db skapades i projekt-katalogen.

Stort tack! Det fungerade! Även jag vet inte riktigt vad det var för fel förut, men får kolla upp det lite noggrannare. Men nu fungerade det utmärkt!

Permalänk: https://www.webforum.nu/p/2185919

## #10 — Gein, 2009-05-27T08:31Z

> **[erciz skrev:](https://www.webforum.nu/p/1469084)**
>
> Stort tack! Det fungerade! Även jag vet inte riktigt vad det var för fel förut, men får kolla upp det lite noggrannare. Men nu fungerade det utmärkt!

Det du kan testa med ditt "gamla" projekt är att ta bort din run configuration och skapa en ny. Troligtvis är det något i den som inte står rätt till.

Permalänk: https://www.webforum.nu/p/2185921

---

Tråden på webben: https://www.webforum.nu/amne/java/178737-java-och-sqlite
