package de.memtext.db; import de.memtext.util.StringUtils; /** * Hilfsklasse zum Erstellen von Prozeduraufrüfen für verschd. * Datenbanken. * Wird mit DB Object erstellt, z.B. ProcedureSql(DB.INFORMIX) * dann setName() * dann beliebig oft addParam(),oder addDateParam() * Falls nach Aufruf der Prozedur ein select notwendig ist, * reinsetzen mit setFinalSelect() * zum Schluss. getFinishedCall für fertigen Datenbankspezifischen * Prozeduraufruf */ public class ProcedureSql { private DB dbsystem; private boolean isAddPossible = true,isNameSet, isFinished; private String finalSelect = ""; private StringBuffer result = new StringBuffer(); public ProcedureSql(DB db) { this.dbsystem = db; if (dbsystem.equals(DB.INFORMIX)) result.append("execute procedure "); if (dbsystem.equals(DB.POSTGRES)) result.append("select "); } public ProcedureSql(DB dbsystem, String procname) { this(dbsystem); result.append(procname + ("(")); isNameSet=true; } public void setName(String procName) { if (isNameSet)throw new IllegalStateException("Name wurde schon gesetzt"); result.append(procName+("(")); isNameSet=true; } public void addParam(String param) { if (!isAddPossible) throw new IllegalStateException("kann keine Parameter hinzufügen, vielleicht wurde getFinishedCall schon aufgerufen"); result.append(param + ","); } public void addDateParam(String param) { if (!isAddPossible) throw new IllegalStateException("kann keine Parameter hinzufügen, vielleicht wurde getFinishedCall schon aufgerufen"); if (dbsystem.equals(DB.INFORMIX)) result.append("date"); if (dbsystem.equals(DB.POSTGRES)) result.append("date_val"); result.append("('" + param + "'),"); } public void setFinalSelect(String sel) { finalSelect = sel; } public String getFinishedCall() { if (!isFinished) finish(); return result.toString(); } private void finish() { addClosingBracket(); result.append(finalSelect); isAddPossible = false; isFinished = true; } private void addClosingBracket() { char lc=result.charAt(result.length()-1);// StringUtils.getLastChar(result); if (lc==',') StringUtils.deleteLastChar(result); result.append(");"); } public void addParam(Integer integer) { addParam(integer.toString()); } public void addParam(int in) { addParam(new Integer(in).toString()); } public void addParam(Object param) { addParam(param.toString()); } public static void main(String args[]) { ProcedureSql p=new ProcedureSql(DB.POSTGRES,"test"); p.addParam(23); System.out.println(p.getFinishedCall()); } } //Created on 03.12.2003 at 15:56:43