1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package convwatch; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import java.sql.Connection; 27*b1cdbd2cSJim Jagielski import java.sql.DriverManager; 28*b1cdbd2cSJim Jagielski import java.sql.Statement; 29*b1cdbd2cSJim Jagielski import java.sql.ResultSet; 30*b1cdbd2cSJim Jagielski import java.sql.SQLException; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski import java.lang.Thread; 33*b1cdbd2cSJim Jagielski import java.util.StringTokenizer; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski class ShareConnection 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski private Connection m_aConnection = null; ShareConnection()38*b1cdbd2cSJim Jagielski public ShareConnection() 39*b1cdbd2cSJim Jagielski {} 40*b1cdbd2cSJim Jagielski getConnection()41*b1cdbd2cSJim Jagielski public Connection getConnection() 42*b1cdbd2cSJim Jagielski { 43*b1cdbd2cSJim Jagielski if (m_aConnection == null) 44*b1cdbd2cSJim Jagielski { 45*b1cdbd2cSJim Jagielski try 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski m_aConnection = DBHelper.getMySQLConnection(); 48*b1cdbd2cSJim Jagielski } 49*b1cdbd2cSJim Jagielski catch(java.sql.SQLException e) 50*b1cdbd2cSJim Jagielski { 51*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: ERROR: can't connect to DB."); 52*b1cdbd2cSJim Jagielski m_aConnection = null; 53*b1cdbd2cSJim Jagielski } 54*b1cdbd2cSJim Jagielski } 55*b1cdbd2cSJim Jagielski return m_aConnection; 56*b1cdbd2cSJim Jagielski } 57*b1cdbd2cSJim Jagielski } 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski class MySQLThread extends Thread 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski Connection m_aCon = null; 62*b1cdbd2cSJim Jagielski String m_sSQL; MySQLThread(Connection _aCon, String _sSQL)63*b1cdbd2cSJim Jagielski public MySQLThread(Connection _aCon, String _sSQL) 64*b1cdbd2cSJim Jagielski { 65*b1cdbd2cSJim Jagielski m_aCon = _aCon; 66*b1cdbd2cSJim Jagielski m_sSQL = _sSQL; 67*b1cdbd2cSJim Jagielski } 68*b1cdbd2cSJim Jagielski run()69*b1cdbd2cSJim Jagielski public void run() 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski Statement oStmt = null; 72*b1cdbd2cSJim Jagielski if (m_aCon == null) 73*b1cdbd2cSJim Jagielski { 74*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: ERROR: in ExecSQL, connection not established."); 75*b1cdbd2cSJim Jagielski return; 76*b1cdbd2cSJim Jagielski } 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski // Connection oCon = null; 79*b1cdbd2cSJim Jagielski try 80*b1cdbd2cSJim Jagielski { 81*b1cdbd2cSJim Jagielski // oCon = getMySQLConnection(); 82*b1cdbd2cSJim Jagielski oStmt = m_aCon.createStatement(); 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: " + m_sSQL); 85*b1cdbd2cSJim Jagielski /* ResultSet oResult = */ 86*b1cdbd2cSJim Jagielski oStmt.executeUpdate(m_sSQL); 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski catch(Exception e) 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: Couldn't execute sql string '" + m_sSQL + "'"); 91*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: Reason: " + e.getMessage()); 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski public class DBHelper 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski /** 99*b1cdbd2cSJim Jagielski * This method inserts given values into<br> 100*b1cdbd2cSJim Jagielski * the table 'states' 101*b1cdbd2cSJim Jagielski * @param values a set of comma separated values to be inserted 102*b1cdbd2cSJim Jagielski */ 103*b1cdbd2cSJim Jagielski SQLinsertValues(Connection _aCon, String _sTableName, String value_names, String values)104*b1cdbd2cSJim Jagielski public void SQLinsertValues(Connection _aCon, String _sTableName, String value_names, String values) 105*b1cdbd2cSJim Jagielski { 106*b1cdbd2cSJim Jagielski if (_aCon == null) 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: ERROR: in SQLinsertValues, connection not established."); 109*b1cdbd2cSJim Jagielski return; 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski // String aInsertStr = ""; 113*b1cdbd2cSJim Jagielski // 114*b1cdbd2cSJim Jagielski // aInsertStr = "INSERT INTO " + _sTableName + " (" + value_names + " ) VALUES (" + values + ")"; 115*b1cdbd2cSJim Jagielski // ExecSQL(_aCon, aInsertStr); 116*b1cdbd2cSJim Jagielski StringBuffer aInsertStr = new StringBuffer(); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski aInsertStr.append( "INSERT INTO " ) . append( _sTableName ); 119*b1cdbd2cSJim Jagielski aInsertStr.append( " (").append( value_names ).append ( ")" ); 120*b1cdbd2cSJim Jagielski aInsertStr.append(" VALUES (" ).append( values ).append( ")" ); 121*b1cdbd2cSJim Jagielski ExecSQL(_aCon, aInsertStr.toString() ); 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski SQLupdateValue(Connection _aCon, String _sTableName, String _sSet, String _sWhere)124*b1cdbd2cSJim Jagielski public void SQLupdateValue(Connection _aCon, String _sTableName, String _sSet, String _sWhere) 125*b1cdbd2cSJim Jagielski { 126*b1cdbd2cSJim Jagielski if (_aCon == null) 127*b1cdbd2cSJim Jagielski { 128*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: ERROR: in SQLinsertValues, connection not established."); 129*b1cdbd2cSJim Jagielski return; 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski // String aUpdateStr = ""; 133*b1cdbd2cSJim Jagielski // 134*b1cdbd2cSJim Jagielski // aUpdateStr = "UPDATE " + _sTableName + " SET " + _sSet + " WHERE " + _sWhere; 135*b1cdbd2cSJim Jagielski // ExecSQL( _aCon, aUpdateStr ); 136*b1cdbd2cSJim Jagielski StringBuffer aUpdateStr = new StringBuffer(); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski aUpdateStr.append( "UPDATE " ).append( _sTableName ) 139*b1cdbd2cSJim Jagielski .append( " SET " ).append( _sSet ) 140*b1cdbd2cSJim Jagielski .append( " WHERE " ).append( _sWhere ); 141*b1cdbd2cSJim Jagielski ExecSQL( _aCon, aUpdateStr.toString() ); 142*b1cdbd2cSJim Jagielski } 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski private static String m_sDBServerName; 145*b1cdbd2cSJim Jagielski private static String m_sDBName; 146*b1cdbd2cSJim Jagielski private static String m_sDBUser; 147*b1cdbd2cSJim Jagielski private static String m_sDBPasswd; 148*b1cdbd2cSJim Jagielski fillDBConnection(String _sInfo)149*b1cdbd2cSJim Jagielski protected synchronized void fillDBConnection(String _sInfo) 150*b1cdbd2cSJim Jagielski { 151*b1cdbd2cSJim Jagielski StringTokenizer aTokenizer = new StringTokenizer(_sInfo,",",false); 152*b1cdbd2cSJim Jagielski while (aTokenizer.hasMoreTokens()) 153*b1cdbd2cSJim Jagielski { 154*b1cdbd2cSJim Jagielski String sPart = aTokenizer.nextToken(); 155*b1cdbd2cSJim Jagielski if (sPart.startsWith("db:")) 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski m_sDBName = sPart.substring(3); 158*b1cdbd2cSJim Jagielski // GlobalLogWriter.get().println("DB: source version: " + m_sSourceVersion); 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski else if (sPart.startsWith("user:")) 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski m_sDBUser = sPart.substring(5); 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski else if (sPart.startsWith("passwd:")) 165*b1cdbd2cSJim Jagielski { 166*b1cdbd2cSJim Jagielski m_sDBPasswd = sPart.substring(7); 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski else if (sPart.startsWith("server:")) 169*b1cdbd2cSJim Jagielski { 170*b1cdbd2cSJim Jagielski m_sDBServerName = sPart.substring(7); 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski /** 176*b1cdbd2cSJim Jagielski * This method establishes a Connection<br> 177*b1cdbd2cSJim Jagielski * with the database 'module_unit' on jakobus 178*b1cdbd2cSJim Jagielski */ 179*b1cdbd2cSJim Jagielski getMySQLConnection()180*b1cdbd2cSJim Jagielski public static Connection getMySQLConnection() throws SQLException 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski try 183*b1cdbd2cSJim Jagielski { 184*b1cdbd2cSJim Jagielski Class.forName("org.gjt.mm.mysql.Driver"); 185*b1cdbd2cSJim Jagielski String sConnection = "jdbc:mysql://" + m_sDBServerName + ":3306/" + m_sDBName; 186*b1cdbd2cSJim Jagielski // Connection mysql = DriverManager.getConnection( 187*b1cdbd2cSJim Jagielski // "jdbc:mysql://jakobus:3306/jobs_convwatch","admin","admin"); 188*b1cdbd2cSJim Jagielski Connection mysql = DriverManager.getConnection(sConnection, m_sDBUser, m_sDBPasswd); 189*b1cdbd2cSJim Jagielski return mysql; 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski catch (ClassNotFoundException e) 192*b1cdbd2cSJim Jagielski { 193*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: Class not found exception caught: " + e.getMessage()); 194*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: Maybe mysql.jar is not added to the classpath."); 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski return null; 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski /** 201*b1cdbd2cSJim Jagielski * This method removes all entries of the given<br> 202*b1cdbd2cSJim Jagielski * module/platform combination 203*b1cdbd2cSJim Jagielski * @param mdl the name of the module, e.g. sal 204*b1cdbd2cSJim Jagielski * @param os the name of the platform, e.g. unxsols 205*b1cdbd2cSJim Jagielski */ 206*b1cdbd2cSJim Jagielski // LLA: public static void SQLdeleteValues(Connection _aCon, String _sEnvironment, String _sUnitName, String _sMethodName, String _sCWS, String _sDate) 207*b1cdbd2cSJim Jagielski // LLA: { 208*b1cdbd2cSJim Jagielski // LLA: String sSQL = 209*b1cdbd2cSJim Jagielski // LLA: "DELETE FROM states WHERE " + 210*b1cdbd2cSJim Jagielski // LLA: " unit=" + DatabaseEntry.Quote(_sUnitName) + 211*b1cdbd2cSJim Jagielski // LLA: " AND pf=" + DatabaseEntry.Quote (_sEnvironment) + 212*b1cdbd2cSJim Jagielski // LLA: " AND meth=" + DatabaseEntry.Quote (_sMethodName) + 213*b1cdbd2cSJim Jagielski // LLA: " AND cws=" + DatabaseEntry.Quote(_sCWS) + 214*b1cdbd2cSJim Jagielski // LLA: " AND dt=" + DatabaseEntry.Quote(_sDate); 215*b1cdbd2cSJim Jagielski // LLA: 216*b1cdbd2cSJim Jagielski // LLA: // ExecSQL(_aCon, sSQL); 217*b1cdbd2cSJim Jagielski // LLA: } 218*b1cdbd2cSJim Jagielski ExecSQL(Connection _aCon, String _sSQL)219*b1cdbd2cSJim Jagielski protected synchronized void ExecSQL(Connection _aCon, String _sSQL) 220*b1cdbd2cSJim Jagielski { 221*b1cdbd2cSJim Jagielski MySQLThread aSQLThread = new MySQLThread(_aCon, _sSQL); 222*b1cdbd2cSJim Jagielski aSQLThread.start(); 223*b1cdbd2cSJim Jagielski } 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski // public static int QueryIntFromSQL(String _sSQL, String _sColumnName, String _sValue) 228*b1cdbd2cSJim Jagielski // { 229*b1cdbd2cSJim Jagielski // boolean bNeedSecondTry = false; 230*b1cdbd2cSJim Jagielski // int nValue = 0; 231*b1cdbd2cSJim Jagielski // do 232*b1cdbd2cSJim Jagielski // { 233*b1cdbd2cSJim Jagielski // try 234*b1cdbd2cSJim Jagielski // { 235*b1cdbd2cSJim Jagielski // nValue = QueryIntFromSQL(_sSQL, _sColumnName, _sValue); 236*b1cdbd2cSJim Jagielski // } 237*b1cdbd2cSJim Jagielski // catch (ValueNotFoundException e) 238*b1cdbd2cSJim Jagielski // { 239*b1cdbd2cSJim Jagielski // bNeedSecondTry = true; 240*b1cdbd2cSJim Jagielski // String sSQL = "INSERT INTO " + _sTable + "(" + _sColumnName + ") VALUES (" + _sValue + ")"; 241*b1cdbd2cSJim Jagielski // ExecSQL(sSQL); 242*b1cdbd2cSJim Jagielski // } 243*b1cdbd2cSJim Jagielski // } while (bNeedSecondTry); 244*b1cdbd2cSJim Jagielski // return nValue; 245*b1cdbd2cSJim Jagielski // } 246*b1cdbd2cSJim Jagielski QueryIntFromSQL(Connection _aCon, String _sSQL, String _sColumnName)247*b1cdbd2cSJim Jagielski public int QueryIntFromSQL(Connection _aCon, String _sSQL, String _sColumnName) 248*b1cdbd2cSJim Jagielski throws ValueNotFoundException 249*b1cdbd2cSJim Jagielski { 250*b1cdbd2cSJim Jagielski Statement oStmt = null; 251*b1cdbd2cSJim Jagielski Connection oCon = null; 252*b1cdbd2cSJim Jagielski int nValue = 0; 253*b1cdbd2cSJim Jagielski try 254*b1cdbd2cSJim Jagielski { 255*b1cdbd2cSJim Jagielski // oCon = getMySQLConnection(); 256*b1cdbd2cSJim Jagielski oStmt = _aCon.createStatement(); 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski ResultSet oResult = oStmt.executeQuery(_sSQL); 259*b1cdbd2cSJim Jagielski oResult.next(); 260*b1cdbd2cSJim Jagielski 261*b1cdbd2cSJim Jagielski try 262*b1cdbd2cSJim Jagielski { 263*b1cdbd2cSJim Jagielski if (_sColumnName.length() == 0) 264*b1cdbd2cSJim Jagielski { 265*b1cdbd2cSJim Jagielski // take the first row value (started with 1) 266*b1cdbd2cSJim Jagielski nValue = oResult.getInt(1); 267*b1cdbd2cSJim Jagielski } 268*b1cdbd2cSJim Jagielski else 269*b1cdbd2cSJim Jagielski { 270*b1cdbd2cSJim Jagielski nValue = oResult.getInt(_sColumnName); 271*b1cdbd2cSJim Jagielski } 272*b1cdbd2cSJim Jagielski // System.out.println("value: " + String.valueOf(nValue)); 273*b1cdbd2cSJim Jagielski } 274*b1cdbd2cSJim Jagielski catch (SQLException e) 275*b1cdbd2cSJim Jagielski { 276*b1cdbd2cSJim Jagielski String sError = e.getMessage(); 277*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: Original SQL error: " + sError); 278*b1cdbd2cSJim Jagielski throw new ValueNotFoundException("Cant execute SQL: " + _sSQL); 279*b1cdbd2cSJim Jagielski } 280*b1cdbd2cSJim Jagielski } 281*b1cdbd2cSJim Jagielski catch(SQLException e) 282*b1cdbd2cSJim Jagielski { 283*b1cdbd2cSJim Jagielski String sError = e.getMessage(); 284*b1cdbd2cSJim Jagielski GlobalLogWriter.get().println("DB: Couldn't execute sql string " + _sSQL + "\n" + sError); 285*b1cdbd2cSJim Jagielski } 286*b1cdbd2cSJim Jagielski return nValue; 287*b1cdbd2cSJim Jagielski } 288*b1cdbd2cSJim Jagielski Quote(String _sToQuote)289*b1cdbd2cSJim Jagielski public String Quote(String _sToQuote) 290*b1cdbd2cSJim Jagielski { 291*b1cdbd2cSJim Jagielski String ts = "'"; 292*b1cdbd2cSJim Jagielski String ds = "\""; 293*b1cdbd2cSJim Jagielski int nQuote = _sToQuote.indexOf(ts); 294*b1cdbd2cSJim Jagielski if (nQuote >= 0) 295*b1cdbd2cSJim Jagielski { 296*b1cdbd2cSJim Jagielski return ds + _sToQuote + ds; 297*b1cdbd2cSJim Jagielski } 298*b1cdbd2cSJim Jagielski return ts + _sToQuote + ts; 299*b1cdbd2cSJim Jagielski } 300*b1cdbd2cSJim Jagielski 301*b1cdbd2cSJim Jagielski /* default date format in the MySQL DB yyyy-MM-dd */ today()302*b1cdbd2cSJim Jagielski public static String today() 303*b1cdbd2cSJim Jagielski { 304*b1cdbd2cSJim Jagielski return DateHelper.getDateString("yyyy-MM-dd"); 305*b1cdbd2cSJim Jagielski } 306*b1cdbd2cSJim Jagielski 307*b1cdbd2cSJim Jagielski public static final String sComma = ","; 308*b1cdbd2cSJim Jagielski public static final String sEqual = "="; 309*b1cdbd2cSJim Jagielski public static final String sAND = " AND "; 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski } 312*b1cdbd2cSJim Jagielski 313