añadido sistema de auto actualizacion a travez de scripts sql numerados los cuales son almacenados en un simple archivo zip para evitar editarlos por error por un usuario comun )yn (ya si alguien los edita no es mi problema)

This commit is contained in:
Daniel Cortes
2019-02-21 13:30:36 -03:00
parent e7eb6513dd
commit ed280ea8ca
13 changed files with 157 additions and 299 deletions

View File

@@ -26,6 +26,7 @@ package danielcortes.xyz;
import danielcortes.xyz.controllers.BaseLayoutController;
import danielcortes.xyz.data.Configuration;
import danielcortes.xyz.data.DAOManager;
import danielcortes.xyz.views.BaseLayout;
import javax.swing.*;
@@ -35,9 +36,11 @@ import java.util.Locale;
import java.util.logging.LogManager;
public class Main {
private static final int DATABASE_VERSION = 2;
static {
setUpLogger();
setUpSystemProperties();
updateDatabase();
}
public static void main(String[] args) {
@@ -45,14 +48,15 @@ public class Main {
}
private static void run() {
//MainSideBar view = new MainSideBar();
//MainSideBarController mainController = new MainSideBarController(view);
BaseLayout view = new BaseLayout();
BaseLayoutController controller = new BaseLayoutController(view);
executeView(view.getContentPanel());
}
private static void updateDatabase(){
DAOManager.getVersionDAO().updateTo(DATABASE_VERSION);
}
private static void executeView(JComponent view) {
JFrame frame = new JFrame(Configuration.get("nombre_caja"));
frame.setContentPane(view);

View File

@@ -46,6 +46,8 @@ import danielcortes.xyz.models.tipo_egreso.SQLiteTipoEgresoDAO;
import danielcortes.xyz.models.tipo_egreso.TipoEgresoDAO;
import danielcortes.xyz.models.tipo_ingreso.SQLiteTipoIngresoDAO;
import danielcortes.xyz.models.tipo_ingreso.TipoIngresoDAO;
import danielcortes.xyz.models.version.SQLiteVersionDAO;
import danielcortes.xyz.models.version.VersionDAO;
public class DAOManager {
private static final CajaDAO cajaDAO;
@@ -59,6 +61,7 @@ public class DAOManager {
private static final TipoEgresoDAO tipoEgresoDAO;
private static final TipoIngresoDAO tipoIngresoDAO;
private static final EstadoResultadoDAO estadoResultadoDAO;
private static final VersionDAO versionDAO;
static {
cajaDAO = new SQLiteCajaDAO();
@@ -72,6 +75,7 @@ public class DAOManager {
tipoEgresoDAO = new SQLiteTipoEgresoDAO();
tipoIngresoDAO = new SQLiteTipoIngresoDAO();
estadoResultadoDAO = new SQLiteEstadoResultadoDAO();
versionDAO = new SQLiteVersionDAO();
}
public static CajaDAO getCajaDAO() {
@@ -117,4 +121,8 @@ public class DAOManager {
public static EstadoResultadoDAO getEstadoResultadoDAO() {
return estadoResultadoDAO;
}
public static VersionDAO getVersionDAO() {
return versionDAO;
}
}

View File

@@ -0,0 +1,99 @@
package danielcortes.xyz.models.version;
import danielcortes.xyz.data.SQLiteConnectionHolder;
import java.io.*;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class SQLiteVersionDAO extends VersionDAO {
private static final Logger LOGGER = Logger.getLogger(SQLiteVersionDAO.class.getName());
public SQLiteVersionDAO() {
this.connectionHolder = new SQLiteConnectionHolder();
}
private boolean tableVersionsExists() {
try {
DatabaseMetaData md = this.connectionHolder.getConnection().getMetaData();
ResultSet rs = md.getTables(null, null, "version", null);
boolean exists = rs.next();
rs.close();
return exists;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
private int getCurrentVersion() {
if (tableVersionsExists()) {
try (Connection conn = this.connectionHolder.getConnection()) {
String query = "SELECT version FROM version LIMIT 1";
PreparedStatement ps = conn.prepareStatement(query);
ResultSet rs = ps.executeQuery();
rs.next();
int version = rs.getInt(1);
rs.close();
ps.close();
return version;
} catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e);
}
}
return 0;
}
private InputStream getVersionScript(int version){
try {
ZipFile zipFile = new ZipFile(new File("data/version_scripts"));
ZipEntry zipEntry = zipFile.getEntry(version + ".sql");
return zipFile.getInputStream(zipEntry);
} catch (IOException e) {
e.printStackTrace();
}
return new InputStream() {
@Override
public int read(){
return 0;
}
};
}
private void executeVersionScript(int version){
try (Connection conn = this.connectionHolder.getConnection()) {
Statement statement = conn.createStatement();
InputStream inputStream = getVersionScript(version);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
statement.addBatch(line);
}
reader.close();
statement.executeBatch();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
LOGGER.log(Level.SEVERE, e.toString(), e);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void updateTo(int version) {
int currentVersion = this.getCurrentVersion();
while (currentVersion < version) {
currentVersion++;
executeVersionScript(currentVersion);
}
}
}

View File

@@ -0,0 +1,8 @@
package danielcortes.xyz.models.version;
import danielcortes.xyz.data.ConnectionHolder;
public abstract class VersionDAO {
protected ConnectionHolder connectionHolder;
public abstract void updateTo(int version);
}