JTable ja tietokanta

pulma

Miten saan seuraavassa esimerkissä näkymään henkilöiden tiedot JTable-komponentissa? Yhteys kantaan toimii mutta tiedot eivät tule näkyviin. Tämän olen todennut käyttämällä silmukassa välitulostusta. Tiedot saan näkyville, mikäli laitan henkilöiden tiedot suoraan koodiin mutta kun tarkoitus olisi hakea ne tietokannasta.

package henkilot;

import java.awt.*;
import javax.swing.*;
import com.borland.jbcl.layout.XYLayout;
import com.borland.jbcl.layout.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.*;
import java.util.*;


public class Frame1
extends JFrame
{
String sNimi;
String eNimi;
String ika;
static Statement stmt=null;
Vector data = new Vector();
Vector otsikot = new Vector(3);

JPanel contentPane;
XYLayout xYLayout1 = new XYLayout();
JScrollPane jScrollPane1 = new JScrollPane();
JTable jTable1 = new JTable();
JButton jButton1 = new JButton();

public Frame1()
{
try
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch (Exception exception)
{
exception.printStackTrace();
}
}

/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception
{
contentPane = (JPanel) getContentPane();
contentPane.setLayout(xYLayout1);
setSize(new Dimension(400, 300));
setTitle("Frame Title");
jButton1.setText("jButton1");
jButton1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jButton1_actionPerformed(e);
}
});
contentPane.add(jScrollPane1, new XYConstraints(32, 36, 332, 141));
contentPane.add(jButton1, new XYConstraints(57, 208, 93, 39));
jScrollPane1.getViewport().add(jTable1);

otsikot.addElement("Sukunimi");
otsikot.addElement("Etunimi");
otsikot.addElement("Ikä");

connect();

}

private void connect()
{
try
{
Connection conn;
String url = "jdbc:sqlserver://localhost;databaseName=tkanta;user=root";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
conn = DriverManager.getConnection(url);
conn.setAutoCommit(false);
}
catch(Exception e)
{

}
}

public void jButton1_actionPerformed(ActionEvent e)
{
try
{
String sql;
sql = "Select * from henkilot";
ResultSet rs = stmt.executeQuery(sql);

while(rs.next())
{
sNimi = rs.getString("sukunimi");
eNimi = rs.getString("etunimi");
ika = rs.getString("ika");

data.addElement(sNimi);
data.addElement(eNimi);
data.addElement(ika);

jTable1 = new JTable(data, otsikot);
}

}
catch (Exception ex)
{

}
}
}

1

544

    Vastaukset 1

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Kattotaan

      Aika paljon ihan perus virheitä.


      1. Ohitat ajonaikaiset virheet ilman tulostusta, joten et näe koodissasi olevia virheitä. Käsittele virheet vaikka seuraavasti:

      --- ALKAA ---

      } catch(Exception ex) {
         ex.printStackTrace();
         System.exit(1);
      }

      --- LOPPUU ---


      2. Kun luot JTabelen käyttäen nimi ja data vektoria, niin data vektori on tyyppiä Vector eikä Vector. Joten data vektorin luonti tietokannan perusteella tapahtuu seuraavasti:

      --- ALKAA ---

      data = new Vector();

      while(rs.next())
      {
         data_row = new Vector();

         data_row.addElement(rs.getString("sukunimi"));
         data_row.addElement(rs.getString("etunimi"));
         data_row.addElement(rs.getString("ika"));

         data.add(data_row);
      }

      --- LOPPUU ---


      3. Luot jostain syystä aina uuden taulukon (eli JTablen) kun haet tietokannasta uuden rivin, ja sen lisäksi et kuitenkaan vie kyseistä taulukkoa edes näytölle. Uutta taulukkoa (eli JTablea) ei kannata luoda (tai silloin pitää myös poistaa vanha syömästä resursseja) vaan kannattaa päivittää vanhan taulukon sisältö jotenkin.


      4. Ohjelmassasi on stmt muuttuja jota ei alusteta mistään.


      Alla yksinkertainen esimerkki ohjelma taulukosta jonka sisältö muuttuu/päivittyy/latautuu aina kun painetaan päivitys nappia. Voi tehdä kai helpomminkin, mutta etköhän sen perusteella pysty tekemään ohjelmastasi toimivan.

      --- ESIMERKKI ALKAA ---

      import java.awt.BorderLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.util.Random;
      import java.util.Vector;

      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JScrollPane;
      import javax.swing.JTable;
      import javax.swing.table.AbstractTableModel;

      public class Esimerkki extends JFrame implements ActionListener {

         private static final long serialVersionUID = -2813992171295808194L;

         private OmaTaulukkoMalli   omaTaulukkoMalli;
         private JTable            omaJTaulukko;
         private JButton            omaPainike;
         private Random            omaSatunnainen;


         public Esimerkki() {
            super("Esimerkki 1.0");

            omaTaulukkoMalli   = new OmaTaulukkoMalli(new String[] { "Etunimi", "Sukunimi", "Ikä" });
            omaJTaulukko      = new JTable(omaTaulukkoMalli);
            omaPainike         = new JButton("Päivitä");
            omaSatunnainen      = new Random();
            
            omaPainike.addActionListener(this);
            
            getContentPane().setLayout(new BorderLayout());
            getContentPane().add(new JScrollPane(omaJTaulukko), BorderLayout.CENTER);
            getContentPane().add(omaPainike, BorderLayout.SOUTH);
         }


         public static void main(String[] args) {
            Esimerkki esimerkki = new Esimerkki();
            
            esimerkki.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            esimerkki.setSize(500,500);
            esimerkki.setVisible(true);
         }

         
         public void actionPerformed(ActionEvent e) {
            Vector dataRivit = new Vector();

            
            for (int i = 0; i < 1 omaSatunnainen.nextInt(80); i ) {
               Vector rivi = new Vector();
               
               rivi.addElement("1: " omaSatunnainen.nextInt(20));
               rivi.addElement("2: " omaSatunnainen.nextInt(20));
               rivi.addElement("3: " omaSatunnainen.nextInt(20));
               
               dataRivit.add(rivi);
            }
            
            omaTaulukkoMalli.päivitäData(dataRivit);      
         }
         
         
         class OmaTaulukkoMalli extends AbstractTableModel {
            
            private static final long serialVersionUID = 4531209187715544316L;
            
            private String[]            sarakkeidenNimet;
            private Vector   dataRivit;
            
            public OmaTaulukkoMalli(String[] sarakkeidenNimet)
            {
               this.dataRivit         = new Vector();
               this.sarakkeidenNimet   = sarakkeidenNimet;
            }

            public int getColumnCount() {
               return sarakkeidenNimet.length;
            }
            
            public int getRowCount() {
               return dataRivit.size();
            }

            public String getColumnName(int col) {
               return sarakkeidenNimet[col];
            }

            public Object getValueAt(int row, int col) {
               return dataRivit.get(row).get(col);
            }
            
            public void päivitäData(Vector dataRivit) {
               this.dataRivit = dataRivit;
               fireTableDataChanged();
            }
         }
      }

      --- ESIMERKKI LOPPUU ---

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nyt se syksy on sitten alkanut

      Esimerkiksi tänään sataa aamusta iltaan, ja nytkin.
      Maailman menoa
      51
      981
    2. Minä en ole koskaan

      Rakastanut ketään toista yhtä paljon kuin sinua
      Ikävä
      98
      974
    3. Tiesitkö? Jorma Uotisen EX-rakas on Helena Lindgren - Nämä ovat välit nyt: "Me ollaan..."

      Jorma Uotinen ja Helena Lindgren olivat avoliitossa v. 1982-1999. Pariskunta oli aikansa näyttävä julkkispari, missä i
      Kotimaiset julkkisjuorut
      20
      827
    4. Vähän pitää

      Kiusia ja näyttää
      Ikävä
      134
      792
    5. Anteeksi J-mies

      Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t
      Ikävä
      119
      759
    6. Olet nainen ollut vaikein rasti

      Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔
      Ikävä
      36
      673
    7. Taidat olla

      Luovuttanut jo minun suhteeni osalta?
      Ikävä
      45
      656
    8. Minä muistan

      Minä muistan sinut nauravana. Sellaisena, joka sai tavallisenkin hetken tuntumaan vähän kevyemmältä, kuin huoneeseen ol
      Ikävä
      45
      610
    9. Kenen viisautta on ollut laittaa tie väärällä murskeella pilalle

      Kenen viisautta on ollut kun Siimeksen/Kylmänpurontie pantu pilalle kun on ajettu liian karkeaa mursketta. Rengasliikke
      Hyrynsalmi
      22
      606
    10. Mä voisin rakastua noihin tähti silmiin

      Katseesi on niin lumoava nainen💚.
      Ikävä
      19
      596
    11. Jos tullaan toisiamme vastaan, niin

      pitäiskö pysähtyä ja onnitella?
      Ikävä
      46
      578
    12. Riittääkö mahkut

      Kaivattuusi 🤭.
      Ikävä
      38
      569
    13. Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille

      Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.
      Ikävä
      72
      548
    14. Voisiko vielä välillemme jotain kehittyä

      Vai heihei ja ei nähdä enää.
      Ikävä
      33
      543
    15. Koska Martina viettää aikaansa lapsiensa kanssa

      Äiti vaan juoksee miehen perässä Tallinnassa, Lontoossa, Turussa. Kyllä oli kätilö oikeassa, kun sanoi, että ei olisi ka
      Kotimaiset julkkisjuorut
      137
      526
    16. Ähtäri on taas TV: n ja radion ykkösuutinen

      Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast
      Ähtäri
      44
      506
    17. Tilanteenne

      Onko tilanteenne tällä hetkellä hyvä?
      Ikävä
      47
      505
    18. Mitä muuta on olemassa kuin lisääntyminen

      Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok
      Sinkut
      110
      505
    19. Kerro kolme hyvää asiaa

      Kaipaamastasi ihmisestä ja lisää perään onko kaivattusi n vai m 😍
      Ikävä
      25
      502
    20. Pahkalassa tapahtuu

      Mitäs on tapahtunut yöllä pahkalan kerrostaloilla.oli poliisia ja ambulanssia taas vaihteeksi
      Parkano
      7
      487
    Aihe