Das 1. Wort aus einem String herauslesen

  • Themenstarter Themenstarter deasid
  • Beginndatum Beginndatum
D

deasid

Gast
Hallo,

Ich will folgendes programmieren: Der User soll ein Query schreiben und dazu wird die Tabelle angezeigt.

zum Beispiel: SELECT * FROM stermin.

[JAVA=42]
String query= queryArea.getText();

String[] querycode;
querycode=query.split(" ");

ResultSet resultSet=tableModel.getResultSet();

if(querycode[0].equals("DELETE") || querycode[0].equals("UPDATE") || querycode[0].equals("INSERT") || querycode[0].equals("ALTER") ||
querycode[0].equals("CREATE")) {

tableModel.dmlexecute(query, tableModel.getStatement());
}else{
resultSet=tableModel.ddlexecute(query, tableModel.getStatement());
tableModel.setResultSet(resultSet);
}

// Da der Button getätigt wurde, wird die neue Query übernommen.
tableModel.setQuery(query);[/code]

Wenn eine DDL-Anweisung eingegeben wurde (also alles was mit SELECT beginnt), wird die Methode ddlexecute aufgerufen :

ddlexecute:
[JAVA=42]public ResultSet ddlexecute(String query, Statement statement) throws SQLException {
resultSet = statement.executeQuery( query );
// Hier wird gemeldet, dass die Tabelle geändert wurde

// Hier wird die meta Data für resultSet erhalten.
metaData = resultSet.getMetaData();

resultSet.last(); // springt zur letzten Zeile.
numberOfRows = resultSet.getRow();
// in numberOfRows wird gespeichert, in der wievielten Zeile wir sind.


// Hier wird gemeldet, dass die Tabelle geändert wurde.
fireTableStructureChanged();

return resultSet;
}[/code]

wenn eine DML-Anweisung eingegeben wurde, wird die Methode dmlexecute aufgerufen und da ist das Problem:

[JAVA=42]public void dmlexecute(String query, Statement statement) throws SQLException {
statement.executeUpdate( "INSERT INTO sender VALUES ('PROO7', 'PROSIEBENEUDA', NULL);" );
// Hier wird gemeldet, dass die Tabelle geändert wurde.

}[/code]


Wenn eine DML-Anweisung eingegeben wird (Alles was mit UPDATE, DELETE, CREATE,...) wird folgende Fehlermeldung eingegeben: "Can not issue data manipulation statements with executeQuery()."

Also bei den DML-Anweisungen will er auch auf die executeQuery()-Methode zugreifen, obwohl ich die Methode executeUpdate() geschrieben habe.

Bin dankbar für jede Antwort
MfG
 
Nein tut er nicht, er gibt folgendes ein:

INSERT INTO sender VALUES ('Pro7', 'Prosieben', NULL);
 
Lass dir doch am anfang der Methode mal das Query ausgeben.
Außerdem würd ich die equals zu equalsIgnoreCase ändern.
 
Es wird die gleiche Query ausgegeben..

ignoreCase hat auch nichts geändert (aber danke für den tipp, werde ich in Zukunft noch brauchen)
 
Die Methode setQuery(), die aufgerufen wird ist ein schwachsinn und tut das selbe noch einmal.

Problem gelöst und danke ;D

[JAVA=42]// In der Methode wird die Query, die im Textfeld eingegeben wurde gesetzt.
public void setQuery( String query ) throws SQLException, IllegalStateException {
if ( !connectedToDatabase ) // Wenn man nicht mit der Datenbank verbunden ist..
throw new IllegalStateException( "Not Connected to Database" );
// Wird die Exception geworfen und ausgegeben, dass momentan keine Verbindung zur
// Datenbank besteht.
//Führt die Query aus, die wir erhalten haben.


String[] querycode;
querycode=query.split("");


if(querycode[0].equals("DELETE") || querycode[0].equals("UPDATE") || querycode[0].equals("INSERT") || querycode[0].equals("ALTER")) {
dmlexecute(query, statement);
}else{
ddlexecute(query, statement);
}
}[/code]
 

Zurück
Oben