Datenbank Abfrage laut Eingabe anzeigen

BigTicket

Mitglied
Morgen,
versuche schon seit längerer Zeit mit Java ein Abfrage an eine Access DB zu starten. Das Problem hierbei ist, dass die Abfrage gemäß der Eingabe geschehen soll. So soll, wenn SOAD eingegeben wird, auch die Abfrage für SOAD angezeigt werden. Möchte nicht 24x die entscheidenen Klasse aufrufen.

Der Quellcode:
Code:
import java.sql.Statement;  
 import java.sql.Connection;  
 import java.sql.DriverManager;  
 import java.sql.ResultSet;  
 import java.sql.ResultSetMetaData;  
 import java.util.Vector;  
 import javax.swing.JTable;  
   
   
 public class Hauptfenster extends javax.swing.JFrame {  
       
     /** Konstruktor: Hauptfenster erzeugen */  
     public Hauptfenster() {  
         initComponents();  
         aktualisiereTabelle(jTextField1.getText());  
     }  
       
     /** Tabelleninhalte holen und Tabelle erzeugen **/  
     private void aktualisiereTabelle(String rein) {  
         Vector columnNames = new Vector();  
         Vector data = new Vector();  
         try{  
             //Abfrage definieren  
             String query = "SELECT * FROM Hier soll dann die Abfrage auf dem TextFeld eingebunden werden;";  
             //Datenbankverbindung herstellen  
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
             Connection con=DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/db/Musikdb.mdb","","" );  
             System.out.println("Connection Successful ");  
             Statement stmt = con.createStatement();  
             ResultSet rst = stmt.executeQuery(query);  
             ResultSetMetaData md = rst.getMetaData();  
             int columns = md.getColumnCount();  
             //  Spaltennamen ermitteln  
             for (int i = 1; i <= columns; i++) {  
                 String colname=md.getColumnName(i);  
                 columnNames.addElement( colname );  
             }  
             //  Zeileninhalt ermitteln  
             while (rst.next()) {  
                 Vector row = new Vector(columns);  
                 for (int i = 1; i <= columns; i++) {  
                     row.addElement( rst.getObject(i) );  
                 }  
                 data.addElement( row );  
             }  
             rst.close();  
             stmt.close();  
         } catch(Exception e) {  
             e.printStackTrace();  
         }  
         //  Tabelle erzeugen  
         JTable table = new JTable(data, columnNames);  
         scrollTabelle.setViewportView(table);  
     }  
       
                             
     private void initComponents() {  
         scrollTabelle = new javax.swing.JScrollPane();  
   
         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);  
         getContentPane().add(scrollTabelle, java.awt.BorderLayout.CENTER);  
   
         java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();  
         setBounds((screenSize.width-800)/2, (screenSize.height-200)/2, 800, 200);  
     }                          
       
     /**  
      * MAIN-Methode  
      */  
     public static void main(String args[]) {  
         java.awt.EventQueue.invokeLater(new Runnable() {  
             public void run() {  
                 new Hauptfenster().setVisible(true);  
             }  
         });  
     }  
       
     // globale Variablendeklaration                        
     private javax.swing.JScrollPane scrollTabelle;  
     private javax.swing.jTextField jTextField1;
                     
       
 }
 
Zuletzt bearbeitet:
1. CODE-TAGS benutzen

2. Was willst du genau? Dass dort der Text von z.B einem Textfeld steht oder umgekehrt?

3. Is beides einfach: Entweder "SELECT * FROM " + TextFeld.getText() + ";";
Oder, der umgekerhte Weg, du nimmst deinen query String und: TextFeld.setText(query);

Oder was meinst du mit Angezeigt?
 
Ja, vom Prinzip her schon. Habe verschiedene Abfragen und diese sollen dann in einer JTable laut Eingabe angezeigt werden.
Der wichtige Code:
Code:
public class Hauptfenster extends javax.swing.JFrame {

    public Hauptfenster() {
        initComponents();
        aktualisiereTabelle();

    }
private void aktualisiereTabelle() {
        Vector columnNames = new Vector();
        Vector data = new Vector();
        /*rein=jTextField1.getText();
            if (rein.equals("Unearth"))
            {*/
        try {
                     
            String query = "SELECT * FROM" + jTextField1.getText() + ";";
                      
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Dokumente und Einstellungen/Rasty/Eigene Dateien/Musikdb.mdb");
            //jTextField1.setText("Connection Successful");
            Statement stmt = con.createStatement();
            ResultSet rst = stmt.executeQuery(query);
            ResultSetMetaData md = rst.getMetaData();
            
            int columns = md.getColumnCount();
            for (int i = 1; i <= columns; i++) {
                String colname = md.getColumnName(i);
                columnNames.addElement(colname);
            }
            while (rst.next()) {
                Vector row = new Vector(columns);
                for (int i = 1; i <= columns; i++) 
                {
                    row.addElement(rst.getObject(i));
                }
                
                data.addElement(row);
            }
            
            rst.close();
            stmt.close();
            }
            
         catch (Exception e) {
            e.printStackTrace();
         }
           // }
            
        
        JTable table = new JTable(data, columnNames);
        jScrollPane1.setViewportView(table);
    }

Und das erhalte ich als Fehler:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in FROM-Klausel.
 
Zuletzt bearbeitet:
Würdest du dir mit einem einfachen System.out.println(query); deine SQL-Abfrage anzeigen lassen, hättest du gesehen, dass dort ein Fehler ist:

String query = "SELECT * FROM" + jTextField1.getText() + ";"; FALSCH!
String query = "SELECT * FROM " + jTextField1.getText() + ";"; RICHTIG!

Angenommen, in deinem Textfeld steht "user", dann würde deine SQL-Frage lauten:

SELECT * FROMuser;

Du siehst das fehlende Leerzeichen nach FROM? ;)

JAVA-Tags verwenden! [.JAVA] [./JAVA] (ohne die Punkte)
 
Ja war einer der Fehler. Musste noch die Methode aus dem Hauptfenster entfernen und es geht.
Noch eine andere Frage:
Wie kann ich eine Suche nach Liedern in einem Verzeichnis in der Tabelle anzeigen lassen? Weiß nicht wie die Suche aussehen soll, vom Code her.
 
Redest du hier von einer Verzeichnsstruktur, die du in einer Tabelle in Java oder in eine MySQL-Tabelle darstellen möchtest?
 
Ja. Sollte vergleichbar sein mit der Windows suche. Habe selber eine Suchmethode geschrieben, doch geht er hier nicht in die Ebenentiefe, sonderen sucht nur in einem Pfad. Ziel ist es aber, dass der User etwas eingibt (mp3 Name), dann einen Button klickt und anschließen soll das Ergebnis in einer Table angezeigt werden.
 
Du musst schon sagen, dass du die Ergebnisse meinst.
Wo liegt das Problem? Speicher halt einfach die Ergebnisse in einer Struktur, bsp. Vector. Und aus diesem erstellst du dann die Tabelle.

Oder gar nicht erst so kompliziert: Schreib die erhaltenen Ergebnisse doch einfach gleich in die Tabelle/Datenbank
 
Das Problem ist, dass er mir den ersten Ordner und den letzten Ordner im durchsuchten Verzeichnis anzeigt. Er soll aber vom eingegeben Verzeichnis nach unten hin, alles durchsuchen und dann den Pfad+Namen angeben, von den gefundenen Ergebnissen.
Sucht der User nach Are, so soll er als Ergebnis den Pfad erhalten, wo er das Lied finden kann, was Are enthält.
Werde heute Abend den Code posten. Kann mit dem Notebook nicht ins Netz vor Ort.
 
@BigTicket
Du wurdest schon zwei mal darum gebeten die Code-Tags zu benutzen. Darum bitte ich dich jetzt auch nochmal. Am einfachsten ist, du klickst auf die Raute(#) in der Toolbar. Da erscheinen dann zwei Tags, zwischen denen du dann den Code posten kannst.

MFG

zEriX
 

Neue Beiträge

Zurück