package com.badlogic.gdx.sqlite.desktop; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.sql.Database; import com.badlogic.gdx.sql.DatabaseCursor; import com.badlogic.gdx.sql.DatabaseFactory; import com.badlogic.gdx.sql.DatabaseManager; import com.badlogic.gdx.utils.GdxRuntimeException; /** @author M Rafay Aleem */ public class DesktopDatabaseManager implements DatabaseManager { private class DesktopDatabase implements Database { private SQLiteDatabaseHelper helper = null; private final String dbName; private final int dbVersion; private final List<String> dbOnCreateQuery; private final List<String> dbOnUpgradeQuery; private Connection connection = null; private Statement stmt = null; private DesktopDatabase(String dbName, int dbVersion, List<String> dbOnCreateQuery, List<String> dbOnUpgradeQuery) { this.dbName = dbName; this.dbVersion = dbVersion; this.dbOnCreateQuery = dbOnCreateQuery; this.dbOnUpgradeQuery = dbOnUpgradeQuery; } @Override public void setupDatabase() { try { Class.forName("org.sqlite.JDBC"); } catch (ClassNotFoundException e) { Gdx.app.log( DatabaseFactory.ERROR_TAG, "Unable to load the SQLite JDBC driver. Their might be a problem with your build path or project setup.", e); throw new GdxRuntimeException(e); } } @Override public void openOrCreateDatabase() { if (helper == null) helper = new SQLiteDatabaseHelper(dbName, dbVersion, dbOnCreateQuery, dbOnUpgradeQuery); try { connection = DriverManager.getConnection("jdbc:sqlite:" + dbName); stmt = connection.createStatement(); helper.onCreate(stmt); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public void closeDatabase() { try { stmt.close(); connection.close(); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public void execSQL(String sql) { try { stmt.executeUpdate(sql); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public DatabaseCursor rawQuery(String sql) { DesktopCursor lCursor = new DesktopCursor(); try { ResultSet resultSetRef = stmt.executeQuery(sql); lCursor.setNativeCursor(resultSetRef); return lCursor; } catch (SQLException e) { throw new RuntimeException(e); } } @Override public DatabaseCursor rawQuery(DatabaseCursor cursor, String sql) { DesktopCursor lCursor = (DesktopCursor) cursor; try { ResultSet resultSetRef = stmt.executeQuery(sql); lCursor.setNativeCursor(resultSetRef); return lCursor; } catch (SQLException e) { throw new RuntimeException(e);// new SQLiteGdxException(e); } } } @Override public Database getNewDatabase(String dbName, int dbVersion, List<String> dbOnCreateQuery, List<String> dbOnUpgradeQuery) { return new DesktopDatabase(dbName, dbVersion, dbOnCreateQuery, dbOnUpgradeQuery); } }