/*
*
* Copyright 2014 http://Bither.net
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* /
*/
package net.bither.db;
import net.bither.bitherj.db.AbstractDb;
import net.bither.preference.UserPreference;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class AddressDBHelper extends AbstractDBHelper {
private static final String DB_NAME = "address.db";
private static final int CURRENT_VERSION = 3;
public AddressDBHelper(String dbDir) {
super(dbDir);
}
@Override
protected String getDBName() {
return DB_NAME;
}
@Override
protected int currentVersion() {
return CURRENT_VERSION;
}
@Override
protected int dbVersion() {
int dbVersion = UserPreference.getInstance().getAddressDbVersion();
if (dbVersion == 0) {
//no record dbversion is 1
try {
Connection connection = getConn();
assert connection != null;
if (hasAddressTables(connection)) {
dbVersion = 1;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return dbVersion;
}
@Override
protected void onUpgrade(Connection conn, int newVersion, int oldVerion) throws SQLException {
Statement stmt = conn.createStatement();
switch (oldVerion) {
case 1:
v1Tov2(stmt);
case 2:
v2ToV3(stmt);
}
conn.commit();
stmt.close();
UserPreference.getInstance().setAddressDbVersion(CURRENT_VERSION);
}
@Override
protected void onCreate(Connection conn) throws SQLException {
if (hasAddressTables(conn)) {
return;
}
Statement stmt = conn.createStatement();
stmt.executeUpdate(AbstractDb.CREATE_ADDRESSES_SQL);
stmt.executeUpdate(AbstractDb.CREATE_HDM_BID_SQL);
stmt.executeUpdate(AbstractDb.CREATE_HD_SEEDS_SQL);
stmt.executeUpdate(AbstractDb.CREATE_HDM_ADDRESSES_SQL);
stmt.executeUpdate(AbstractDb.CREATE_PASSWORD_SEED_SQL);
stmt.executeUpdate(AbstractDb.CREATE_ALIASES_SQL);
stmt.executeUpdate(AbstractDb.CREATE_VANITY_ADDRESS_SQL);
stmt.executeUpdate(AbstractDb.CREATE_HD_ACCOUNT);
conn.commit();
stmt.close();
UserPreference.getInstance().setAddressDbVersion(CURRENT_VERSION);
}
//v1.3.4
private void v1Tov2(Statement statement) throws SQLException {
statement.executeUpdate(AbstractDb.CREATE_HD_ACCOUNT);
}
//1.3.5
private void v2ToV3(Statement statement) throws SQLException {
statement.executeUpdate(AbstractDb.CREATE_VANITY_ADDRESS_SQL);
}
private boolean hasAddressTables(Connection conn) throws SQLException {
ResultSet rs = conn.getMetaData().getTables(null, null, AbstractDb.Tables.Addresses, null);
boolean hasTable = rs.next();
rs.close();
return hasTable;
}
}