Hey, ich habe eine SQLite DB in welcher derzeit zwei Tabellen bestehen. Die erste Tabelle allein, stellt keinerlei Fehler dar. Die zweite wird zwar noch erstellt aber schmeißt beim schreiben der Daten "java.sql.SQLException: [SQLITE_BUSY] The database file is locked (database is locked)". Es wird auf statement.execute(sqlQuery); hingewiesen.
Alles was ich bisher recherchiert habe, geht in die Richtung, dass nicht mehrere Verbindungen gleichzeitig zur DB bestehen können, wobei an sich immer nach einem Execute geschlossen wird. Der Fehler Besteht auch bei auskommentierten Funktionen der ersten Tabelle.
[CODE lang="java" title="Main"]DBStatement dbStatement = new DBStatement();
dbStatement.checkDBConnection();
// Table 1
dbStatement.createUserDataTable();
dbStatement.insertUserData();
dbStatement.getUserData();
// Table 2
dbStatement.createSystemDataTable();
dbStatement.insertSystemData();
// (Sind im realen Code alle in Ty catch)
[/CODE]
[CODE lang="java" title="DBStatement"]// Table User Data
private final String TABLE_USER = "userData";
private final String COLUMN_LIST_NUMBER = "listNumber";
private final String COLUMN_ID = "id";
private final String COLUMN_NAME = "name";
private final String COLUMN_PASSWORD = "Password";
private final String COLUMN_ADMIN = "admin";
private void executeQuery (String sqlQuery) throws SQLException {
try {
connection = dbConnection.getConnection();
statement = connection.createStatement();
if (statement != null) {
statement.execute(sqlQuery); // <--- Hier wird drauf verwiesen
}
} finally {
statement.close();
connection.close();
}
public void createUserDataTable () throws SQLException {
String createTable ="CREATE TABLE IF NOT EXISTS " + TABLE_USER +
"( "
+ COLUMN_LIST_NUMBER + " INTEGER NOT NULL UNIQUE, "
+ COLUMN_ID + " STRING NOT NULL UNIQUE, "
+ COLUMN_NAME + " STRING NOT NULL UNIQUE, "
+ COLUMN_PASSWORD + " STRING NOT NULL, "
+ COLUMN_ADMIN + " INTEGER NOT NULL "
+ " )";
executeQuery(createTable);
}
// insert User Data
public void insertUserData () throws SQLException {
String insertData = "INSERT INTO " + TABLE_USER + " VALUES ";
for (int i = 0; i < User.getUsersArrayList().size(); i ++) {
insertData += "('" + User.getUser(i).getListNumber() + "', '"
+ User.getUser(i).getUserID() + "', '"
+ User.getUser(i).getName() + "', '"
+ User.getUser(i).getPassword() + "', "
+ booleanToInt(User.getUser(i).isAdmin()) + ")";
if (i < User.getUsersArrayList().size() - 1) {
insertData += ", ";
}
}
executeQuery(insertData);
}
// Table System Data
private final String TABLE_SYSTEM = "systemData";
private final String COLUMN_TABLE_COLUMN = "tableColumn";
private final String COLUMN_USER_NAME = "userName";
private final String COLUMN_COLUMN_VISIBLE = "columnVisible";
public void createSystemDataTable () throws SQLException {
String createTable = "CREATE TABLE IF NOT EXISTS " + TABLE_SYSTEM +
"( "
+ COLUMN_TABLE_COLUMN + " INTEGER PRIMARY KEY NOT NULL, "
+ COLUMN_USER_NAME + " STRING NOT NULL UNIQUE, "
+ COLUMN_COLUMN_VISIBLE + " INTEGER NOT NULL"
+ " )";
executeQuery(createTable);
}
// INSERT SYSTEM DATA
public void insertSystemData () throws SQLException {
String insertData = "INSERT INTO TABLE_SYSTEM VALUES ";
for (int i = 0; i < User.getUsersArrayList().size(); i ++) {
insertData += "(" + "NULL, '"
+ ((User) User.getUsersArrayList().get(i)).getName() + "', "
+ booleanToInt(((User) User.getUsersArrayList().get(i)).isColVis()) + ")";
if (i < User.getUsersArrayList().size() - 1) {
insertData += ", ";
}
}
executeQuery(insertData);
}
}[/CODE]
Alles was ich bisher recherchiert habe, geht in die Richtung, dass nicht mehrere Verbindungen gleichzeitig zur DB bestehen können, wobei an sich immer nach einem Execute geschlossen wird. Der Fehler Besteht auch bei auskommentierten Funktionen der ersten Tabelle.
[CODE lang="java" title="Main"]DBStatement dbStatement = new DBStatement();
dbStatement.checkDBConnection();
// Table 1
dbStatement.createUserDataTable();
dbStatement.insertUserData();
dbStatement.getUserData();
// Table 2
dbStatement.createSystemDataTable();
dbStatement.insertSystemData();
// (Sind im realen Code alle in Ty catch)
[/CODE]
[CODE lang="java" title="DBStatement"]// Table User Data
private final String TABLE_USER = "userData";
private final String COLUMN_LIST_NUMBER = "listNumber";
private final String COLUMN_ID = "id";
private final String COLUMN_NAME = "name";
private final String COLUMN_PASSWORD = "Password";
private final String COLUMN_ADMIN = "admin";
private void executeQuery (String sqlQuery) throws SQLException {
try {
connection = dbConnection.getConnection();
statement = connection.createStatement();
if (statement != null) {
statement.execute(sqlQuery); // <--- Hier wird drauf verwiesen
}
} finally {
statement.close();
connection.close();
}
public void createUserDataTable () throws SQLException {
String createTable ="CREATE TABLE IF NOT EXISTS " + TABLE_USER +
"( "
+ COLUMN_LIST_NUMBER + " INTEGER NOT NULL UNIQUE, "
+ COLUMN_ID + " STRING NOT NULL UNIQUE, "
+ COLUMN_NAME + " STRING NOT NULL UNIQUE, "
+ COLUMN_PASSWORD + " STRING NOT NULL, "
+ COLUMN_ADMIN + " INTEGER NOT NULL "
+ " )";
executeQuery(createTable);
}
// insert User Data
public void insertUserData () throws SQLException {
String insertData = "INSERT INTO " + TABLE_USER + " VALUES ";
for (int i = 0; i < User.getUsersArrayList().size(); i ++) {
insertData += "('" + User.getUser(i).getListNumber() + "', '"
+ User.getUser(i).getUserID() + "', '"
+ User.getUser(i).getName() + "', '"
+ User.getUser(i).getPassword() + "', "
+ booleanToInt(User.getUser(i).isAdmin()) + ")";
if (i < User.getUsersArrayList().size() - 1) {
insertData += ", ";
}
}
executeQuery(insertData);
}
// Table System Data
private final String TABLE_SYSTEM = "systemData";
private final String COLUMN_TABLE_COLUMN = "tableColumn";
private final String COLUMN_USER_NAME = "userName";
private final String COLUMN_COLUMN_VISIBLE = "columnVisible";
public void createSystemDataTable () throws SQLException {
String createTable = "CREATE TABLE IF NOT EXISTS " + TABLE_SYSTEM +
"( "
+ COLUMN_TABLE_COLUMN + " INTEGER PRIMARY KEY NOT NULL, "
+ COLUMN_USER_NAME + " STRING NOT NULL UNIQUE, "
+ COLUMN_COLUMN_VISIBLE + " INTEGER NOT NULL"
+ " )";
executeQuery(createTable);
}
// INSERT SYSTEM DATA
public void insertSystemData () throws SQLException {
String insertData = "INSERT INTO TABLE_SYSTEM VALUES ";
for (int i = 0; i < User.getUsersArrayList().size(); i ++) {
insertData += "(" + "NULL, '"
+ ((User) User.getUsersArrayList().get(i)).getName() + "', "
+ booleanToInt(((User) User.getUsersArrayList().get(i)).isColVis()) + ")";
if (i < User.getUsersArrayList().size() - 1) {
insertData += ", ";
}
}
executeQuery(insertData);
}
}[/CODE]