Zum Inhalt springen

BMAS

Mitglieder
  • Gesamte Inhalte

    244
  • Benutzer seit

  • Letzter Besuch

Beiträge von BMAS

  1. @derflix

    Also mit getContentPane().setLayout() hast du recht, bin halt noch etws AWT geschädigt :P

    Mit der MySQL Datenbank die wir benutzen, funktioniert die last() Sache ganz gut, ich werde es aber mal mit deiner Methode probieren, um das Mögliche unmöglich zu machen ;)

    Das Programm ist ja noch nicht fertig, später wird dann über das dazugehörige GUI abgefragt, ob der User auch was eingegeben hat, eventuell wird er dann zur Eingabe gezwungen oder ich setze die Abfrage auf "SELECT * FROM TABLE".

    @all

    Aber ich glaube ich habe den Fehler gefunden, wenn ich mir den Stacktrace ausgeben lasse, wie Jaraz es vorgeschlagen hat kommt folgende Fehlermeldung:

    java.sql.SQLException: ResultSet is closed
    java.lang.Throwable(java.lang.String)
    java.lang.Exception(java.lang.String)
    java.sql.SQLException(java.lang.String)
    java.sql.ResultSetMetaData sun.jdbc.odbc.JdbcOdbcResultSet.getMetaData()
    javax.swing.JTable gui_v_200.Tools.getJTable(java.sql.ResultSet, java.lang.String [])
    gui_v_200.TableFrame(java.lang.String)
    void gui_v_200.TableFrame.main(java.lang.String [])[/PHP]

    Wenn ich jetzt aber meine beiden rset.close() rausnehme, kommt die Fehlermeldung immernoch, hat jemand eine Idee? :(

  2. Mein Programm hängt irgendwo und ich weiss nicht wo, ich versuche aus einem ResultSet ein JTable zu erstellen, aber irgendwie klappt das nicht so ganz, während des Kompilierens bekomme ich keine Fehler aber zur Laufzeit bleibt das Programm stehen, bitte helft mir ich habe mir schon seit heute früh den Kopf zerbrochen (und habe jetzt Kopfschmerzen :D ) und komme nicht weiter...

    Die SQL Abfrage:

    import java.sql.*;
    import java.util.StringTokenizer;

    public final class Sql {

    private String wert;
    private String feld;

    private String werte[];
    private String felder[];

    private ResultSet rSet;
    public Sql() {

    }
    public ResultSet getResultSet(String wert) throws Exception{

    String select = "SELECT * FROM ldd WHERE (";

    int i = 1;

    boolean x = false;

    this.wert = wert;

    String token;

    StringTokenizer st = new StringTokenizer(wert, ";");

    while (st.hasMoreTokens()) {

    token = st.nextToken();

    if (i == 1 && token.equals("-") == false) {
    select = select + "Lieferantenname LIKE '%" + token + "%'";
    x = true;
    }

    if (i == 2 && token.equals("-") == false) {

    if (x == false) {
    select = select + "Lieferantennr='" + token + "'";
    x = true;
    } else
    select = select + " AND Lieferantennr='" + token + "'";

    }

    if (i == 3 && token.equals("-") == false) {

    if (x == false) {
    x = true;
    select = select + "Branche='" + token + "'";
    } else
    select = select + " AND Branche='" + token + "'";

    }

    if (i == 4 && token.equals("-") == false) {

    if (x == false)
    select = select + "Bewertung='" + token + "'";

    else
    select = select + " AND Bewertung='" + token + "'";
    }
    i = i + 1;

    }

    select = select + ");";

    /*um die Eventualität auszuschliessen dass etwas mit meinem SELECT Befehl nicht stimmt, habe ich mal einen genommen, der eigentlich funktionieren sollte...*/

    select = "SELECT * FROM ldd";

    System.out.println(select);

    select(select);
    rSet.close();
    return rSet;

    }
    private void select(String sqlQuery) throws Exception{

    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    } catch (Exception e) {
    System.out.println("Fehler bei ODBC-JDBC " + e);

    return;
    }

    ResultSet rSet;
    Statement stmt;
    Connection conn;

    try {
    String url = "jdbc:odbc:MList";

    conn = DriverManager.getConnection(url, "root", "");
    stmt = conn.createStatement();

    rSet = stmt.executeQuery(sqlQuery);
    } catch (Exception e) {
    System.out.println(e);

    return;
    }

    this.rSet = rSet;
    stmt.close();
    rSet.close();
    conn.close();
    }
    }[/PHP]

    Hier wird das ResultSet zu einem Object[][] gemacht, das ResultSet wird erstellt(ich lasse mir die Ergebnisse ja System.out.prinlnen :) ), es kann also nicht an meiner SQL abfrage liegen:

    [PHP]import javax.swing.JTable;
    import java.sql.SQLException;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;

    public class Tools {


    public JTable getJTable(ResultSet rset, String[] columnnames) throws Exception{

    ResultSetMetaData rsetmd = rset.getMetaData();
    int cols = rsetmd.getColumnCount();
    rset.last();
    int rows=rset.getRow();

    int i=0;
    int p=0;

    Object[][] o = new Object[rows][cols];

    while(i<=rows)
    {
    for (p = 0; p <= cols; p++){
    o[i][p]=rset.getString(p+1);
    System.out.println(o[i][p].toString());
    }
    i++;

    }

    return new JTable(o,columnnames);
    }
    }

    Und hier wird dann schliesslich das JTable erstellt und auf einem jFrame platziert...


    import java.awt.Insets;
    import java.awt.GridBagLayout;
    import javax.swing.JTable;
    import javax.swing.JPanel;
    import javax.swing.JSeparator;
    import javax.swing.JButton;
    import java.awt.GridBagConstraints;
    import java.awt.BorderLayout;
    import javax.swing.ImageIcon;

    public class TableFrame extends javax.swing.JFrame{

    private JTable datenTable = new JTable();

    private Sql sql = new Sql();

    private JPanel süden = new JPanel();

    private JSeparator sep = new JSeparator();

    private JButton bOK = new JButton(new ImageIcon("C:/images/tick_blue.gif"));
    private JButton bZur = new JButton(new ImageIcon("C:/images/cross_red.gif"));

    public TableFrame(String werte) throws Exception{

    int i=0;

    Tools tools = new Tools();

    String[] columnnames =
    { "iD","Branche","Leistungsverzeichnis","Lieferantenname", "Adresse", "Telefon"
    ,"Ansprechpartner","Anspr. P. Einkäufer","Anspr. P. AG Einkauf","Bewertung"
    ,"Bemerkung zu Bewertung", "Bewertungszeitraum","Rahmenvertrag","BM Nummer" };

    datenTable = tools.getJTable(sql.getResultSet(werte),columnnames);

    süden.setLayout(new GridBagLayout());

    GridBagConstraints csep = new GridBagConstraints();
    csep.gridx = 0;
    csep.gridy = 0;
    csep.fill = GridBagConstraints.HORIZONTAL;
    csep.weightx = 1.0;
    csep.gridwidth = 1;
    csep.anchor = GridBagConstraints.WEST;
    csep.gridwidth = GridBagConstraints.REMAINDER;
    csep.insets = new Insets(4, 4, 4, 4);

    GridBagConstraints cbOK = new GridBagConstraints();
    cbOK.gridx = 0;
    cbOK.gridy = 1;
    cbOK.weightx = 1.0;
    cbOK.gridwidth = 1;
    cbOK.fill = GridBagConstraints.HORIZONTAL;
    cbOK.anchor = GridBagConstraints.WEST;
    cbOK.insets = new Insets(4, 4, 4, 4);

    GridBagConstraints cbZur = new GridBagConstraints();
    cbZur.gridx = 1;
    cbZur.gridy = 1;
    cbZur.weightx = 1.0;
    cbZur.gridwidth = 1;
    cbZur.fill = GridBagConstraints.HORIZONTAL;
    cbZur.anchor = GridBagConstraints.EAST;
    cbZur.insets = new Insets(4, 4, 4, 4);

    süden.add(sep, csep);
    süden.add(bOK, cbOK);
    süden.add(bZur, cbZur);

    this.setLayout(new BorderLayout());
    this.getContentPane().add(datenTable, BorderLayout.CENTER);
    this.getContentPane().add(süden, BorderLayout.SOUTH);

    this.setVisible(true);
    this.pack();
    }
    public static void main(String[] args) {

    try {new TableFrame("-;-;-;A");}catch(Exception e){}}
    }[/PHP]

  3. Man kann aber die Metadaten des ResultSets auslesen, einfach mal:

    ResultSetMetaData rsetmd = rset.getMetaData();

    int cols = rsetmd.getColumnCount();

    rset.last();

    int rows=rset.getRow();

    damit probieren, wobei rset dann dein ResultSet sein sollte.

    Du bekommst dadurch die Menge der Spalten und der Zeilen zurückgeliefert, vielleicht hilft dir das ja weiter, denn anhand der Zeilenanzahl kannst du bestimmen wieviele Ergebnisse du bekommen hast...

  4. @Jaraz

    Also die Sache mit den HashMaps werde ich mir mal anschauen, wird wohl aber ein wenig dauern, da ich damit noch nichts gemacht habe.

    @all

    Mal eine dumme Frage

    Wie kann ich eigentlich Komponenten austauschen?

    Ich habe versucht, das Panel, welches ersetzt werden soll, auf invisible zu setzen und das welches angezeigt werden soll auf visible, (beide sind auf demselben JFrame mit BorderLayout.CENTER angeordnet) aber leider wird dann nur das erste Panel unsichtbar, dass zweite ist(!) nicht sichtbar.

    Wenn ich das erste Panel entferne(remove()) und das Zweite hinzufüge(add()) bekomme ich dasselbe Ergebnis.

    ein repaint bringt nichts,

    validate habe ich auch probiert, bringt auch nichts...

    Ein kleiner Anhaltspunkt wie das gehen könnte würde schon reichen... :(

    Grüsse BMAS

  5. Geht das? Ich habe versucht, einen Tab ohne Titel hinzuzufügen, aber dann ist der Reiter noch sichtbar, (nur ein paar Pixel breit aber sichtbar!)...

    Oder gibt es Alternativen dazu?

    Ich möchte ein GUI schreiben, mit dem man über eine JToolBar im Westen des Frames, Anwendungen im Osten anzeigen kann, ein JTabbedPane ohne Reiter wäre dazu ziemlich gut geeignet (recht performant und man müsste dann nicht die einzelnen Widgets entfernen und wieder hinzufügen etc., sondern nur die Tabs wechseln), aber leider habe ich keine Methode gefunden, um die Reiter selber zu entfernen .

    Ich hoffe ihr versteht was ich meine, das ganze ist ein wenig schwer zu erklären... :P

  6. Original geschrieben von Erbeere

    Hi

    Mit welchem Model arbeitest Du ?

    Das Model des JTables hälst alle Daten. Demnach musst Du diesem Model und nicht dem JTable die neuen Daten übergeben.

    Wenn dieses Model die Methode dafür nicht hat so schreibe Dir ein eigenes. Ist recht einfach, Du erbst einfach von dem AbstractTableModel und implementierst die erforderlichen Methoden

    Daten hälste am einfachsten in nem Vector oder so und hier kannste nun auch die Methode addRow (Daten) einfügen

    Gruß Erbeere

    Könnte mir vielleicht irgendwer mal einen Beispielcode geben? Ich habe bisher immer nur ein neues JTable erstellt, wenn sich die Daten geändert haben oder wenn neue hinzugekommen sind... Bitte, bitte!

  7. Na, so schwer ist das auch nicht:

    Hier ein kleines Bespiel:

    In der Field deklaration

    JTable tabledaten;

    JScrollPane scrollPane;

    deklarieren und dann:

    Object[][] data =

    { { "ABC GmbH", "12345678", "Automobile","bla,bla,bla,bla,bla,bla", "A", "Strasse,PLZ,Ort","123/456",},};

    String[] spaltenNamen =

    { "Lieferantenname", "Lieferantennr", "Branche","Leistungsverzeichnis", "Bewertung", "Adresse", "Telefon" };

    tabledaten = new JTable(daten, spaltenNamen);

    scrollPane= new JScrollPane(tabledaten);

    wo auch immer du dein Gui zusammenstöpselst.

  8. Sorry, hat etwas länger gedauert...

    Wir haben den Citrix Metaframe mit Sp2 auf W2k mit SP2 drauf laufen...

    Die 32 Bit Sache werde ich mal ausprobieren, aber ich denke nicht, dass es daran liegt, denn es ist kein Grafikfehler. (Du kannst auf den Startbutton klicken wie du willst, aber es kommt kein Startmenü).

    Aber was zum Henker ist ein Speed Screen 2?

  9. Ich habe da ein kleines Problem, ich verstehe nicht so ganz was da falsch ist:

    Ich habe um eine Access Tabelle (Datenbank kann man das ja nicht nennen :D ) mit Testdaten erstellt, nun will ich diese mittels JDBC auslesen... (später wird das Programm dann auf eine Sybase Datenbank zugreifen)

    Dafür habe ich eine Klasse geschrieben, welche mir die SQL Abfrage automatisch generiert und per JDBC-ODBC Bridge an Access schickt.

    Das funktioniert soweit auch ganz gut, die Abfrage wird richtig generiert und ein Ergebnis zurückgeliefert, aber ich bekomme trotzdem eine Fehlermeldung, mit der ich jedoch nichts anfangen kann. Weiss da jemand weiter?

    Abfrage: SELECT * FROM MList WHERE (Lieferantenname='MNO GmbH' )

    Ergebnis: MNO GmbH 12348888 Gastronomie Essen, Getränke A Strasse PLZ Ort 123/987

    Fehler: java.sql.SQLException: [Microsoft][ODBC Driver Manager] Fehler in der Funktionsreihenfolge.

    Oh, ja und hier die Klasse:

    Die Update und Insert Geschichten funzen noch nicht (bzw. sind noch nicht fertig), erstmal ist nur der Select Befehl lauffähig.


    package gui;

    import java.sql.*;
    import java.util.StringTokenizer;


    public class Sql {

    private String wert;
    private String feld;

    private String werte[];
    private String felder[];


    private ResultSet rSet;

    public Sql() {

    }
    public ResultSet getData(String wert) {

    String select = "SELECT * FROM MList WHERE (";

    int i=1;

    boolean x = false;

    this.wert = wert;

    String token;

    StringTokenizer st = new StringTokenizer(wert, ";");


    while(st.hasMoreTokens())
    {

    token = st.nextToken();

    if (i == 1 && token.equals("-")==false) {
    select = select + "Lieferantenname='" + token + "' ";
    x = true;
    }

    if (i == 2 && token.equals("-")==false) {

    if (x == false)
    {
    select = select + "Lieferantennr='" + token + "' ";
    x = true;
    }

    else
    select = select + "AND Lieferantennr='" + token + "' ";


    }

    if (i == 3 && token.equals("-")==false) {

    if (x == false)
    {
    x = true;
    select = select + "Branche='" + token + "' ";
    }

    else
    select = select + "AND Branche='" + token + "' ";


    }

    if (i == 4 && token.equals("-")==false) {

    if (x == false)
    select = select + "Bewertung='" + token + "' ";

    else
    select = select + "AND Bewertung='" + token + "'";
    }
    i=i+1;


    }



    select = select + ")";

    System.out.println(select);

    select(select);
    return rSet;

    }


    private void select(String sqlQuery) {

    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    } catch (Exception e) {
    System.out.println("Fehler bei ODBC-JDBC" + e);

    return;
    }

    ResultSet rSet;
    Statement stmt;
    Connection conn;

    try {
    String url = "jdbc:odbc:MList";

    conn = DriverManager.getConnection(url, "User", "User");
    stmt = conn.createStatement();

    rSet = stmt.executeQuery(sqlQuery);
    } catch (Exception e) {
    System.out.println(e);

    return;
    }

    try {
    while (rSet.next())
    System.out.println(
    rSet.getString(1)
    + "\t"
    + rSet.getString(2)
    + "\t"
    + rSet.getString(3)
    + "\t"
    + rSet.getString(4)
    + "\t"
    + rSet.getString(5)
    + "\t"
    + rSet.getString(6)
    + "\t"
    + rSet.getString(7)
    + "\t");

    stmt.close();
    conn.close();
    } catch (Exception e) {
    System.out.println(e);

    return;
    }
    this.rSet = rSet;
    }

    public Sql(String sqlQuery) {

    }

    public void delete(String sqlQuery) {}

    public void setData() {}

    public void setData(String vorgang, String wert) {

    String sqlQuery;

    StringTokenizer st = new StringTokenizer(wert,";");

    if (vorgang=="update")
    {
    sqlQuery = "UPDATE FROM MList WHERE (";
    update(sqlQuery);
    }

    if (vorgang=="Update")
    {
    sqlQuery = "INSERT INTO MList VALUES ("+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+")";

    }

    if (vorgang=="delete")
    {
    String token=st.nextToken();
    token=st.nextToken();
    sqlQuery="DELETE * FROM MList WHERE ('Lieferantennr="+token+"')";
    delete(sqlQuery);
    }
    }

    private void update(String sqlQuery) {

    }
    }
    [/PHP]

  10. Nein, ich habe mir das Projekt nochmal ein wenig durch den Kopf gehen lassen, ich glaube ich werde das anders machen, es kein Kennwort in dem Sinne geben, es wird nur abgeglichen wer an der Domäne angemeldet ist und welche Rechte er hat (dann müssen sich die Benutzer kein weiteres Kennwort merken *g*). Also werde ich in das File nur reinschreiben:

    [Admin]

    Benutzer1

    Benutzer2

    [superuser]

    Benutzer4

    Benutzer7

    Benutzer8

    [user]

    Benutzer3

    Benutzer5

    Benutzer6

    Benutzer9

    etc.

    Wie sollte ich sowas am besten verschlüsseln?

    PS: Ich muss es dann natürlich auch wieder entschlüsseln können, um die Benutzernamen abgleichen zu können.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...