Avatar billede jsl Nybegynder
03. maj 2005 - 19:59 Der er 12 kommentarer og
1 løsning

Gem dataset?

I min databaseapp. skal det være muligt at gemme data fra en tabel og jdbTextFields i en SQL db. Jeg vil gerne have at det foregår automatisk, men jeg har også tænkt på at have en knap, der skal aktiveres, før datene gemmes.
Første mulighed er jeg dog mest til, men hvad er normal praktisk, og hvordan laver man den første mulighed?
Avatar billede arne_v Ekspert
03. maj 2005 - 20:06 #1
Det kan gøres på en million milliard forskellige måder.

Men det nemmeste er vel at lave:
  - en JButton
  - actionPerformed ved klik på den kalder en metode
  - den bruger JDBC til at lave en INSERT med
Avatar billede jsl Nybegynder
03. maj 2005 - 20:58 #2
Ja, det tror jeg gerne. Jeg har bestemt mig for, at dataene skal gemmes løbende, mens de indtastes - brugeren skal ikke tænke på at gemme dataene.
Hertil ønsker jeg et eller flere forslag til, hvordan det kan implemteres.
Jeg anvender JBuilder.
Avatar billede arne_v Ekspert
03. maj 2005 - 21:11 #3
Jeg prøver lige at bixe et simpelt eksempel.
Avatar billede arne_v Ekspert
03. maj 2005 - 21:17 #4
Følgende eksempel er ikke specielt seriøs, men det er nok det simplest mulige eksempel
på det du spørger om:

package may;

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

public class DbSave extends JFrame implements ActionListener {
    private JTextField f1;

    private JTextField f2;

    private JButton save;

    public DbSave() {
        getContentPane().setLayout(new GridLayout(3, 1));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1 = new JTextField();
        getContentPane().add(f1);
        f2 = new JTextField();
        getContentPane().add(f2);
        save = new JButton("Gem");
        save.addActionListener(this);
        getContentPane().add(save);
        pack();
    }

    public void actionPerformed(ActionEvent evt) {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
            Statement stmt = con.createStatement();
            stmt.executeUpdate("INSERT INTO T1 (F1,F2) VALUES(" + f1.getText() + ",'" + f2.getText() + "')");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        DbSave f = new DbSave();
        f.setVisible(true);
    }
}
Avatar billede arne_v Ekspert
03. maj 2005 - 21:18 #5
Du taster værdier og klikker save.

f1 er integer og f2 er varchar i tabellen t1.

Jeg har testet mod en Access database - du retter driver og connection URL
til din database.
Avatar billede jsl Nybegynder
03. maj 2005 - 23:09 #6
Det du har lavet, kræver vel en knap? Hvad hvis dataene skal gemmes automatisk - altså uden, at brugeren skal trykke på noget?
Avatar billede arne_v Ekspert
03. maj 2005 - 23:14 #7
jep

du kan jo ikke gemme helt automatisk

du kan gemme efter at en værdi er ændret eller hver x. sekund eller ...

men et eller andet skal trigge save
Avatar billede jsl Nybegynder
04. maj 2005 - 13:46 #8
Jeg har været ved at kigge på de forskellige events til jdbTable, men er lidt i tvivl om hvilken én jeg skal vælge til formålet.
Avatar billede arne_v Ekspert
04. maj 2005 - 19:52 #9
det er jo funktionen af dit program - det kan vi vanskeligt hjælpe med
Avatar billede jsl Nybegynder
10. maj 2005 - 20:03 #10
Nu har jeg forsøgt at få eventet keyPressed til at virke, men den fungerer ikke. Kun dem for musen virker. Jeg tester med println. I jBuilder vælger jeg blot Events, og så dobbelt-klikker på keyPressed, for at tilføje koden. At bemærke, er jdbTablen tilknyttet en TableScollPane.
Avatar billede arne_v Ekspert
10. maj 2005 - 21:45 #11
må vi se lidt kode ?
Avatar billede jsl Nybegynder
11. maj 2005 - 23:58 #12
Ok, nu har jeg fået det til at virke, ved at lave en fælles focusLost listener til tabllen, teksboksene osv.
Arne, du kan få points, hvis du svarer.
Avatar billede arne_v Ekspert
13. maj 2005 - 09:46 #13
ok
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