Reputation: 14978
I am getting the following error:
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: apartments)
In reality, the table does exist. The following is my code:
try {
// load the sqlite-JDBC driver using the current class loader
Class.forName("org.sqlite.JDBC");
Connection connection = null;
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:/Path/To/apartments.db");
System.out.println(connection.getMetaData());
Statement statement = connection.createStatement();
statement.setQueryTimeout(30);
ResultSet rs = statement.executeQuery("select * from apartments");
while(rs.next()) {
// read the result set
System.out.println("TEXT = " + rs.getString("display_text"));
System.out.println("X1 = " + rs.getInt("x1"));
}
} catch (Exception ex) {
Logger.getLogger(MouseEventDemo.class.getName()).log(Level.SEVERE, null, ex);
}
Upvotes: 6
Views: 29473
Reputation: 5316
I had the same problem when running my unit tests from Robolectric on Android platform. The problem turned out to be related to something to do with using a singleton pattern on my DatabaseHelper class which was being reused by all my unit tests as it was a static object created by a base class for all my unit tests.
In my case the fix was to set the static variable caching the singleton instance inside the DatabaseHelper to null after each test. SO the base class looks something like this for me:
import com.foo.app.HomeActivity;
import com.foo.contentProvider.DatabaseHelper;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertNotNull;
@Config(shadows = {ShadowCaseSensitiveSQLiteCursor.class})
@RunWith(RobolectricTestRunner.class) // <== REQUIRED for Robolectric!
public class RobolectricTestBase {
protected HomeActivity activity;
protected Context context;
protected DatabaseHelper databaseHelper;
@BeforeClass
public static void setupClass() {
// To redirect Robolectric to stdout
System.setProperty("robolectric.logging", "stdout");
}
@Before
public void setup() {
activity = (HomeActivity) Robolectric.buildActivity(HomeActivity.class).create().get();
assertNotNull(activity);
context = activity.getApplicationContext();
assertNotNull(context);
databaseHelper = DatabaseHelper.getInstance(context);
assertNotNull(databaseHelper);
}
@After
public void tearDown() {
databaseHelper.close(); //This is where singleton INSTANCE var is set to null
}
}
Upvotes: 0
Reputation: 11310
May be this can help you to get right path to you database
How to Specify Database Files
Here is an example to select a file C:\work\mydatabase.db (in Windows)
Connection connection = DriverManager.getConnection("jdbc:sqlite:C:/work/mydatabase.db");
A UNIX (Linux, Mac OS X, etc) file /home/leo/work/mydatabase.db
Connection connection = DriverManager.getConnection("jdbc:sqlite:/home/leo/work/mydatabase.db");
How to Use Memory Databases SQLite supports on-memory database management, which does not create any database files. To use a memory database in your Java code, get the database connection as follows:
Connection connection = DriverManager.getConnection("jdbc:sqlite::memory:");
This also can help
String path=this.getClass().getResource("apartments.db").getPath();
connection = DriverManager.getConnection("jdbc:sqlite:"+path);
assumes that apartments.db is put in project root directory
Upvotes: 8
Reputation: 5055
Change The Extension .db
to .sqlite
connection = DriverManager.getConnection("jdbc:sqlite:Path\\To\\apartments.sqlite");
Upvotes: 1