Mercurial Hosting > nabble
view src/nabble/model/DbUpdater.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.model; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fschmidt.db.DbDatabase; final class DbUpdater { private static final Logger logger = LoggerFactory.getLogger(DbUpdater.class); final DbDatabase db; final String schema; private int dbVersion; Connection con; Statement stmt; DbUpdater(DbDatabase db,String schema) { this.db = db; this.schema = schema; dbVersion = databaseVersion(); } int databaseVersion() { return databaseVersion(db,schema); } static int databaseVersion(DbDatabase db,String schema) { try { Connection con = db.getConnection(); try { Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "select version from "+schema+".version" ); rs.next(); int dbVersion = rs.getInt("version"); stmt.close(); return dbVersion; } finally { con.close(); } } catch(SQLException e) { throw new RuntimeException(e); } } int dbVersion() { return dbVersion; } void begin() throws SQLException { con = db.getConnection(); con.setAutoCommit(false); stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE); logger.error(schema+" step "+dbVersion); } void commit() throws SQLException { stmt.executeUpdate( "update "+schema+".version set version=" + (++dbVersion) ); stmt.close(); con.commit(); con.close(); con = null; } void exec(String sql) throws SQLException { if( sql != null ) { if( sql.trim().toLowerCase().startsWith("select ") ) { stmt.executeQuery(sql); } else { stmt.executeUpdate(sql); } } } void execStep(String sql) throws SQLException { begin(); exec(sql); commit(); } void close() { if( con != null ) { try { con.close(); } catch(SQLException e) { logger.error(schema,e); } con = null; } } }