protected void upgradeDatabaseToLatest(DatabaseAccess.Transaction dat, Log l) throws SQLException, IllegalArgumentException { /* add all database updates here * first get the database version by reading the navconfig table */ String currversion = OmVersion.getVersion(); l.logDebug("DatabaseUpgrade " + currversion); NavVersion DBversion = new NavVersion(""); /* read the navconfig table into a namepair list */ ResultSet rs = queryNavConfig(dat); NameValuePairs navconfigDB = new NameValuePairs(); while (rs.next()) { navconfigDB.add(rs.getString(1), rs.getString(2)); } /* now find the version */ String Names[] = navconfigDB.getNames(); String Values[] = navconfigDB.getValues(); /* read the current version from the database */ for (int i = 0; i < Names.length; i++) { if (Names[i].compareToIgnoreCase("dbversion") == 0) { DBversion.setVersion(Values[i]); } } /* if the current database version is less than the navigator version, check for updates */ if (DBversion.isLessThanStr(currversion)) { /* make sure these are listed in version order, because the function updates the DB version as we go */ l.logDebug( "DatabaseUpgrade", "Applying database upgrades, version before update " + DBversion.getVersion()); updateDatabase( "1.10.1", DBversion, "ALTER TABLE " + getPrefix() + "params ALTER COLUMN paramvalue NVARCHAR(4000)", l, dat); /* finally having applied all the updates set the DB version to the current */ l.logDebug("DatabaseUpgrade", "Update DB version to current " + currversion); dat.update( "UPDATE " + getPrefix() + "navconfig SET value = \'" + currversion + "\' where name=\'dbversion\'"); applyUpdateForEmailNotification(dat, l, DBversion); } else { l.logDebug( "DatabaseUpgrade", "Database up to date at version " + DBversion.getVersion() + " no updates attempted."); } }
/** * checks the version stored in the database against a pre-defined version and performs the * appropriate database upgrade * * @param version the version that the DB versions is compared against, hard coded by developer in * call * @param dbv the database version read from the database * @param update the database update to perform * @param l log * @param dat database connection * @throws SQLException * @throws IllegalArgumentException */ public void updateDatabase( String version, NavVersion dbv, String update, Log l, DatabaseAccess.Transaction dat) throws SQLException, IllegalArgumentException { /* now get the version in the navigator.xml file /* now apply the updates one at a time , first we apply the historic one */ try { if (dbv.isLessThanStr(version)) { l.logDebug("DatabaseUpgrade", "Database version less than " + version); try { /* perform the update */ dat.update(update); /* if that worked, update the database version */ dat.update( "UPDATE " + getPrefix() + "navconfig SET value = \'" + version + "\' where name=\'dbversion\'"); } catch (SQLException e) { l.logError( "DatabaseUpgrade", e.getMessage() + "Unable to perform database upgrade for DB less than " + version); throw new SQLException(e); } } else { l.logDebug( "DatabaseUpgrade", "UpgradeDatabaseToLatest no upgrade necessary for " + version); } } catch (IllegalArgumentException e) { l.logError( "DatabaseUpgrade", e.getMessage() + "Invalid versions in attempt to compare to database version " + version); throw new IllegalArgumentException(e); } }