Avatar billede grevepoliti Nybegynder
28. november 2002 - 17:44 Der er 3 kommentarer

Hvordan får man data fra et tabel i Access ind i en JList i Java

Jeg er ved at programmere et program i JAVA der skal behandle persondata. Jeg har nu koblet programmet sammen med en ACCESS database og vil nu gerne have alle records/posterne ind i en JList så jeg kan vælge personer herfra.

Dataen befinder sig i et table der hedder patient og det er 2 kolonner med henholdsvis fornaven og efternavne, som jeg skal bruge herfra.

Jeg er i tvivl om hvordan man laver en program struktur der henter alle posterne fra databasen og en efter en smider ("efternavn","fornavn") ind i en JList, hvorfra jeg så kan vælge dem.

Håber meget at en venlig person kan hjælpe mig.
Avatar billede magoo20000 Nybegynder
28. november 2002 - 17:57 #1
Hvorfor vil du bruge en JList?
Avatar billede gybel Nybegynder
28. november 2002 - 20:59 #2
Ja det forstår jeg heller ikke..
Jeg ville vælge at ligge dem i en JTable eller en JFrame for sig selv kan evt. gøres sådan:

static TableModel asTableModel(final ResultSet rs) throws SQLException {
    final Vector columnNames = new Vector();
    final Vector rowData = new Vector();

    final ResultSetMetaData rsMeta = rs.getMetaData();
    for (int i = 1; i <= rsMeta.getColumnCount(); i++) {
      columnNames.addElement( rsMeta.getColumnName(i) );
    }

    while ( rs.next() ) {
      final Vector row = new Vector();
      for (int i = 1; i <= rsMeta.getColumnCount(); i++) {
        row.addElement( rs.getObject(i) );
      }
      rowData.addElement( row );
    }
    return new DefaultTableModel(rowData, columnNames);
  }

  static JTable asJTable(final ResultSet rs) throws SQLException {
    return new JTable( asTableModel(rs) );
  }

Her skal du så bare kalde den statiske metode asJTable(ResultSet rs);
Avatar billede grevepoliti Nybegynder
03. december 2002 - 12:34 #3
Tak for hjælpen so far :)

Nu har jeg endelig fået data fra min database ind i en JList. Og hver element i min "vectorliste" der vises i JListen, viser data fra 3 kolonner ved hver records. Dette er helt perfekt.

Nu vil jeg så gerne have det lavet sådan at når jeg trykker på et element i JListen kaster den et actionEvent der søger databasen igennem efter denne record og viser dataene i textfields.

Problemet er bare at jeg skal isolere data fra den første row for at søge og hver element i vector listen består af data fra 3 rows ? Hvordan isolerer jeg det ? Kan jeg lave hver element om til strings - og hvad sker der så hvis jeg bare skal bruge data fra den første row (som forresten er et CPR nummer)...

Her er min kode - uden TextFields og Find-funktion.

import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class TableDisplay extends JFrame {
  private Connection connection;
  private JList list;
   
  public TableDisplay()
  { 
 
      String url = "jdbc:odbc:Database"; 
      String username = "anonymous";
      String password = "guest";


      try {
        Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );

        connection = DriverManager.getConnection(
            url, username, password );
      }
      catch ( ClassNotFoundException cnfex ) {
        System.err.println(
            "Failed to load JDBC/ODBC driver." );
        cnfex.printStackTrace();
        System.exit( 1 );
      }
      catch ( SQLException sqlex ) {
        System.err.println( "Unable to connect" );
        sqlex.printStackTrace();
      }

      getTable();

      setSize( 450, 600 );
      show();
  }

  private void getTable()
  {
      Statement statement;
      ResultSet resultSet;
     
      try {
        String query = "SELECT * FROM patient";

        statement = connection.createStatement();
        resultSet = statement.executeQuery( query );
        displayResultSet( resultSet );
        statement.close();
      }
      catch ( SQLException sqlex ) {
        sqlex.printStackTrace();
      }
  }

  private void displayResultSet( ResultSet rs )
      throws SQLException
  {

      boolean moreRecords = rs.next(); 


      if ( ! moreRecords ) {
        JOptionPane.showMessageDialog( this,
            "ResultSet contained no records" );
        setTitle( "No records to display" );
        return;
      }

      setTitle( "Bitch ass motherfucker" );

      Vector columnHeads = new Vector();
      Vector rows = new Vector();

      try {
 
        ResultSetMetaData rsmd = rs.getMetaData();
     
        for ( int i = 2; i <= rsmd.getColumnCount(); ++i )
            if (i <= 4 ) {columnHeads.addElement( rsmd.getColumnName( i ) );
            }

        do {
            rows.addElement( getNextRow( rs, rsmd ) );
        } while ( rs.next() );

        list = new JList (rows);
       
       
        JScrollPane scroller = new JScrollPane( table );
       
        getContentPane().add(
            list, BorderLayout.NORTH );
        validate();
      }
      catch ( SQLException sqlex ) {
        sqlex.printStackTrace();
      }
  }

  private Vector getNextRow( ResultSet rs,
                              ResultSetMetaData rsmd )
      throws SQLException
  {
      Vector currentRow = new Vector();
     
      for ( int i = 2; i <= rsmd.getColumnCount(); ++i )
          if (i <= 4) {
        switch( rsmd.getColumnType( i ) ) {
            case Types.VARCHAR:
                  currentRow.addElement( rs.getString( i ) );
              break;
            case Types.INTEGER:
                  currentRow.addElement(
                    new Long( rs.getLong( i ) ) );
              break;
            default:
              System.out.println( "Type was: " +
                  rsmd.getColumnTypeName( i ) );
        }}
     
      return currentRow;
  }

  public void shutDown()
  {
      try {
        connection.close();
      }
      catch ( SQLException sqlex ) {
        System.err.println( "Unable to disconnect" );
        sqlex.printStackTrace();
      }
  }

  public static void main( String args[] )
  {
      final TableDisplay app = new TableDisplay();

      app.addWindowListener(
        new WindowAdapter() {
            public void windowClosing( WindowEvent e )
            { 
              app.shutDown();
              System.exit( 0 );
            }
        }
      );
  }
}


Håber en venlig sjæl kan hjælpe mig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester