Schon einmal probiert eine Tabelle zu verwenden?
Beiträge von java-girl
-
-
Vieleicht eine naive Frage, aber hast Du dich schon mit den selben accountdaten ueber einen anderen client (commandline, Toad oder so) eingeloggt und versucht ein update zu machen? Eventuell blockt das Statement ja auch da. Oder vielleicht hat der Account nicht die notwendigen Rechte, und der Treiber versaut das Errorhandling. Read und Insert Rechte vergeben, aber keine updates oder deletes zu erlauben, macht ja manchmal durchaus Sinn.
Ja habe ich. Mein Benutzer hat alle Rechte und die von mir produzierten Queries waren OK, ich habe sie vorher ausprobiert.
Versuch vielleicht mal ein explizites commit [b]vor[.b] dem execute(). Z.b. ein select statement wird erst committed, wenn das ResultSet geschlossen wurde. Vielleicht leaked das ja irgendwo. Prüf deshalb auch ob alle ResultSets ordentlich geschlossen werden.Das ResultSet (gibt eh nur eines, das in der Methode mit dem SELECT) habe ich nicht geschlossen...vielleicht liegt es wirklich an dem!
Oder ist es vielleicht möglich, dass Teile der Daten, die du verändern möchtest, von anderer Stelle (einem anderen Benutzer / einer anderen App) aus gelockt sind?Das wäre ebenfalls möglich, ich hatte nämlich zu diesem Zeitpunkt eine SQL Kommandozeile offen.
Danke, ich werde das einmal ausprobieren, geht aber erst frühestens am Montag, dann werde ich mich melden.
-
Mich wundert nur wo du die Anleitung hast? Wenn du sie weggeschmissen hast dann bist du selbst schuld...ansonsten such sie dort steht alles übergenau drinnen. Und so ein großer Unterschied zwischen Vista und XP besteht jetzt auch nicht.
-
Kenn deine Zugriffsreihenfolge nicht aber eventuell fehlt nur ein commit?
Die Reihenfolge ist unerheblich, habe es schon mehrmals ausprobiert.
Wo meinst du dass das commit fehlen könnte?
Denn nachdem es sich beim execute() bzw. executeUpdate() aufhängt ist ein commit danach nutzlos. -
Kann ich mal probieren, allerdings bezweifle ich das auch, da ja das INSERT funktioniert, welches ebenfalls mit einem stinknormalen execute() abgesetzt wird.
-
Eben gar keine, das gesamte Programm hängt sich auf. Er kommt bis vor die Anweisung statement.executeUpdate() und dort bleibt er dann hängen. Und wie gesagt, execute() liefert selbiges Ergebnis.
Hab' auch schon 2 verschiedene Oracle-Treiber probiert (die beiden die bei Windows angeboten werden), ist bei beiden gleich. -
eine zeile im code, die erst wo anders ein problem macht?
na, das kanns ja wirklich nicht geben. wär ja echt was ganz neues. ich seh schon, du hast mich durchschaut. ich hab natürlich keine ahnung im gegensatz zu dir.wenn dir fad is, dann können wir gerne noch ein bisschen 'wieso-weils halt so is' spielen. aber alternativ könntest du natürlich auch was ganz verrücktes machen und einfach ausprobieren was ich dir vor 6h geraten habe.
ps: der geneigten leserin empfiehlt der trux:
http://www.dbai.tuwien.ac.at/education/dbs/folien/JDBC.pdf Seite 35Das war jetzt wenigstens einmal eine Begründung.
Aber wie gesagt ich glaube nicht dass das mein Fehler ist, denn immerhin mache ich UPDATE und DELETE nicht aus dem ResultSet heraus sondern setze mit executeUpdate() bzw. execute() hab' ich auch schon ausprobiert - ein eigenes, syntaktisch richtiges Query ab. Das Beispiel auf der Folie ist ein anderes.
Außerdem kann ich es jetzt gerade nicht ausprobieren, habe es nicht da. -
freut mich, dass du meinen tipp ausprobiert hast.
Dann erklär' mir mal bitte, was der Unterschied sein soll - immerhin geht ja UPDATE und DELETE nicht und nicht SELECT.
Im Übrigen...nachdem das Ganze dynamisch ist geht das gar nicht, denn ich weiß im Vorhinein nicht, wie die Spalten heißen.
-
probier mal die spalten namen beim selecten explizit anzugeben.
also:
select columnA, columnB, columnC from table;
anstatt
select * from table
Wieso?
Immerhin fuktioniert dieses Query ja. Nur bei UPDATE und DELETE gehts nicht.
Zitat
Sind das lauter String-Spalten?
Nein, aber DBMS führen implizite Typecasts durch. Probiers aus. Auf diese Weise spare ich mir die mühsame Unterscheidung der Datentypen, welche wahnsinnig viele sind. Dadurch wird das Query zwar etwas langsamer, aber das wirkt sich nicht wirklich aus. -
Hallo!
Ich habe zwei kleine Klassen geschrieben, die eine beliebige Tabelle (egal, welches DBMS dahintersteckt) in einer JTable anzeigt. Außerdem kann man neue Datensätze einfügen, löschen und Datensätze verändern.
Ich habe bisjetzt nur auf MySQL gearbeitet und natürlich sollte es keinen Unterschied machen, ob ich jetzt auf MySQL oder Oracle arbeite, immerhin sind ja die Queries identisch.
Allerdigs geht bei Oracle nur das auslesen - will ich ein Update, Delete oder Insert machen dann hängt sich das Programm auf.
Die wesentlichen Stellen:Verbindungsaufbau - funktioniert
Code
Alles anzeigen[B][size=10][COLOR=#7f0055][align=left]private void createConnection(String driver, String user, String password){ try{ //Parameter String url="jdbc:odbc:" + driver; //Verbindungsaufbau connection=DriverManager.getConnection(url, user, password); //Statement Object erzeugen statement = connection.createStatement(); } catch(SQLException e){ e.printStackTrace(); System.out.println(e.getErrorCode()); add(new JTextField(e.toString())); } }[/B][/COLOR][/SIZE][size=10][/align] [/SIZE]
Tabelle auslesen - funktioniertCode
Alles anzeigenprivate void refreshTable(){ String[] columnNames; String[][] data; try{ ResultSet rs = statement.executeQuery("SELECT count(*) FROM " + table); rs.next(); int num = rs.getInt(1); rs = statement.executeQuery("SELECT * FROM " + table); ResultSetMetaData md = rs.getMetaData(); columnNames = new String[md.getColumnCount()]; for(int i = 1; i <= md.getColumnCount(); i ++) { columnNames[i-1] = md.getColumnName(i); } data = new String[num][columnNames.length]; int j = 0; while(rs.next()){ for(int i=1; i <= md.getColumnCount(); i++){ data[j][i-1] = rs.getString(i); } j++; } DataModel m = new DataModel(columnNames, data); m.addTableModelListener(new TableListener()); jTable.setModel(m); } catch(SQLException e){ e.printStackTrace(); add(new JTextField(e.toString())); } }
Neue Datensätze einfügen - funktioniertCode
Alles anzeigenprivate class AddButtonListener implements ActionListener{ @Override public void actionPerformed(ActionEvent arg0) { StringBuilder build = new StringBuilder("INSERT INTO " + table + " VALUES("); for(JTextField t : fields){ build.append("'" + t.getText() + "', "); } build.deleteCharAt(build.length()-1); build.deleteCharAt(build.length()-1); build.append(")"); try{ statement.execute(build.toString()); refreshTable(); } catch(Exception e){ e.printStackTrace(); } for(JTextField t : fields){ t.setText(""); } } }
Update - funktioniert nicht, hängt sich bei statement.executeUpdate(query.toString()); auf.Code
Alles anzeigenprivate class TableListener implements TableModelListener{ @Override public void tableChanged(TableModelEvent evt) { DataModelEvent m = (DataModelEvent)evt; int row = evt.getFirstRow(); StringBuilder query = new StringBuilder("UPDATE " + table + " SET"); int cols = jTable.getModel().getColumnCount()-1; for(int i = 0; i < cols; i++){ query.append(" " + jTable.getModel().getColumnName(i) + "='"); query.append((String)jTable.getModel().getValueAt(row, i)); query.append("',"); } query.deleteCharAt(query.length()-1); query.append(" WHERE " + jTable.getModel().getColumnName(0) + "='" + m.getVal() + "'"); try{ statement.executeUpdate(query.toString()); System.out.println(query.toString()); } catch(SQLException e){ e.printStackTrace(); refreshTable(); } } }
Datensatz löschen - funktioniert nicht, hängt sich ebenfalls an der selben Stelle auf.Code
Alles anzeigen[B][size=10][COLOR=#7f0055][align=left]private class DeleteButtonListener implements ActionListener{ @Override public void actionPerformed(ActionEvent arg0) { DataModel m = (DataModel)jTable.getModel(); int rows = m.getRowCount(); for(int i = 0; i < rows; i++){ if(m.isRowSelected(i)){ String query = "DELETE FROM " + table + " WHERE " + m.getColumnName(0) + "='" + m.getValueAt(i, 0) + "'"; try{ statement.executeUpdate(query); } catch(SQLException e){ e.printStackTrace(); refreshTable(); } } } refreshTable(); } }[/B][/COLOR][/SIZE][size=10][/align] [/SIZE]
Also scheinbar liegt es an dem executeUpdate - aber wieso? Es müsste doch theoretisch auf jeder Datenbank funtionieren! Hat jemand eine Ahnung, was da genau der Fehler ist bzw. wie man dem ausweichen kann?
Lg. -
Und bitte schreib doch Klassennamen groß, das tut in den Augen weh :(.
-
hal: Mittlerweilen ist der Apostroph nach dem Genitiv in der Deutschen Sprache erlaubt, siehe Duden. Dennoch verwende ich ihn nicht weil er eine Unart ist. Sonst hast du Recht, eigentlich ist der Apostroph im Deutschen ein Auslassungszeichen.
Aber weder im Deutschen noch im Englischen ist der Apostroph nach dem Plural erlaubt, wie in diesem Fall. -
Sorry, auch wenn das jetzt komplett OT ist, aber es muss raus: es heißt MacBooks und nicht MacBook's! Der Apostroph ist falsch, da es sich nicht um einen Genitiv sondern einen Plural handelt! Immerhin heißt es ja auch Fotos und nicht Foto's, Autos und nicht Auto's, usw.
Dieser Apostroph ist ürigens weder im Deutschen noch im Englischen erlaubt. Würde mich freuen wenn ihr euch das zu Herzen nehmt :engel: -
Kann mir vielleicht jemadn sagen warum diese Methode nicht meine double zahl in eine binärzahl umwandelt??
Welche Methode?
Kommt immer ein fehler und zwar dass die Präzision verloren gingeAlso das wundert mich nicht...
-
Meine Sätze sind leider grammatikalisch korrekt!
Denk' vielleicht noch einmal darüber nach. Aber wenn ich mich nicht täusche, brauchst du für diesen Satz nur ein Verb. Ich glaub' dir eh dass das ein Versehen war, wenn man den Satz neu formuliert und vergisst den alten Teil vollständig weg zu löschen passiert das halt manchmal. Nur wie gesagt, mir war die Bedeutung des Satzes schleierhaft.
Der Satz sollte soviel bedeuten wie:
"Meine Ansicht wie dieser Multiplexer funktioniert, ist bestimmt falsch und deswegen versuche ich erst garnicht meine Gedanken in Worte zu fassen."Besser so?^^
Ja
Im übrigen ist mir die moralische Regelung bezüglich der Hausaufgaben bekannt (wie in jedem Forum), aber meine Aufgabe bezieht sich auf etwas mehr als nur eine WWT für einen MUX zu erstellen!Teil oder ganz, ich glaube, so viel Unterschied ist da nicht.
Ich wollte bloß nachfragen, ob mir jemand den entscheidenen Anschub geben kann.
Wie gesagt, mein erster Post. Hab' dir sogar ein Beispiel gegeben. Du musst es ja nur aus dem Schaltbild ablesen...
trotzdem vielen dank für deine Mühe!Kein Problem.
-
Bitte versuche, dass du grammatikalisch korrekte Sätze schreibst, denn ehrlich gesagt verstehe ich nicht, was der erste Satz bedeuten soll.
Zitat
es wird eh falsch seinWas wird "eh falsch sein"? Auf jeden Fall stimmt das, was ich gesagt habe.
Zitat
also wie erstelle ich aus dieser schaltung eine WWT?Siehe mein erster Post. Ich glaube genauer kann man es nicht erklären, wobei eigentlich das Schaltbild ja schon selbsterklärend ist. Wenn du das nicht verstehst, dann kann ich dir leider auch nicht mehr helfen.
Im Übrigen solltest du dir vielleicht Folgendes zu Herzen nehmen:http://www.informatik-forum.at/showthread.php?p=167379#post167379
-
sorry, aber wenn die steuerleitungen (b,c) 0 sind, dann sind x und y immer 0, egal was a für einen wert hat!
Stimmt ja gar nicht!
y schon aber nur weil der Eingang der beim zweiten Multiplexer auf 0, 0 kodiert ist immer 0 ist.Wieso sollte bitte x da immer 0 sein???
-
bin mir sicher, dass jeder so seine startschwierigkeitem beim programmieren hatte.... is halt nicht das natürlichste der welt;)Nein, das ist nicht so. Ich habs eigentlich von Anfang an gekonnt wie ich es in der Schule gelernt habe ohne jegliche Vorkenntnisse. Aber die meisten haben wohl Schwierigkeiten, es ist einfach so wie bei Mathematik...
-
Wo liegt das Problem?
Du hast je vier Eingänge und jeder Eingang braucht ein eindeutiges Steuersignal, also brauchst du 2 Steuerleitungen. Und die Steuerkodierung ist schon vorgegeben, d.h. du brauchst es eigentlich nur aus der Schaltung ablesen.
Beispiel: x = a wenn b = 0 und c = 0 -
Was heißt "es funktioniert nicht"?