Avatar billede coolfisk Nybegynder
22. november 2003 - 14:55 Der er 22 kommentarer og
1 løsning

Database og java

Har lidt problemer, hvorfor bliver mine værdier ikke skrever ud? Og hvad gør man hvis man vil tilføje en ekstra søjle, f.eks. ´TAL3?

skriver man så ResultSet rs = stmt.executeQuery("select NR, TAL1 from PLADER, TAL3 from PLADER");

her koden delt i 3 klasser:

import java.util.*;

public class BenytDatabaseforbindelse
{
  public static void main(String[] arg)
  {
    try {
      Databaseforbindelse dbf = new Databaseforbindelse();
    //  dbf.opretTestdata(); // fjern hvis tabellen allerede findes
      Vector  v = dbf.hentAlle();
    // System.out.println("Alle data: "+v);
    for(int i = 0 ; i < v.size() ; i++) {
    System.out.println(v.elementAt(i));
    }

    // dbf.sletAlleData();

    // dbf.indsæt( new Kunde("Kurt",1000) );

      System.out.println("Alle data nu: "+ dbf.hentAlle());

    } catch(Exception e) {
      System.out.println("Problem med database: "+e);
      e.printStackTrace();
    }
  }
}

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

public class Databaseforbindelse
{
  private Connection forb;
  private Statement stmt;

  public Databaseforbindelse() throws Exception
  {

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//    forb = DriverManager.getConnection("jdbc:odbc:KUNDER");
    forb = DriverManager.getConnection("jdbc:odbc:PLADER","","");
    stmt = forb.createStatement();


  }

  public void sletAlleData() throws SQLException
  {
    stmt.execute("truncate table PLADER");
  }

  public void opretTestdata() throws SQLException
  {
    try { // hvis tabellen allerede eksisterer opstår der en SQL-udtagelse
        stmt.executeUpdate(
        "create table PLADER (NR float, TAL1 float)" );
    } catch (SQLException e) {
      System.out.println("Kunne ikke oprette tabel: "+e);
    }
    stmt.executeUpdate("insert into PLADER values(1.0, 10.0)");
    stmt.executeUpdate("insert into PLADER values(2, 5)");
  }

  public void indsæt(Plade k) throws SQLException
  {
    stmt.executeUpdate("insert into PLADER (NR,TAL1) values('"
                      + k.nr + "', " + k.tal1 + ")");
  }

  public Vector hentAlle() throws SQLException
  {
    Vector alle = new Vector();
    ResultSet rs = stmt.executeQuery("select NR, TAL1 from PLADER");
    while (rs.next())
    {
      // brug kolonneindeks i stedet for kolonnenavn
      Plade k = new Plade( rs.getInt(1), rs.getInt(2));
      alle.addElement(k);
    }
    return alle;
  }
}

public class Plade
{
  float nr;
  float tal1;
  int tal2;

  public Plade(float n, float k)
  {
    nr = n;
    tal1 = k;

  }

  public String toString()
  {
    return nr+": "+tal1;
  }
}
Avatar billede coolfisk Nybegynder
22. november 2003 - 14:59 #1
har fundet ud af hvorfor den ikke viste værdierne.... Men hvad med hvis man vil tilføje en ekstra søjle, f.eks. ´TAL3?
Avatar billede arne_v Ekspert
22. november 2003 - 15:16 #2
select NR, TAL1, TAL3 from PLADER
Avatar billede coolfisk Nybegynder
22. november 2003 - 15:46 #3
havde jeg også lige fundet ud af :)... skal man anvende throws Exceptions/catch? 

Har en applikation og kan ikke læse objekterne hvis man ikka anvender throws Exceptions
Avatar billede arne_v Ekspert
22. november 2003 - 16:11 #4
De fleste JDBC kald  kald smider SQLException som er en checked eception d.v.s.
at du skal bruge:

public void dinmetode() throws SQLException {
  ...
}

eller:

public void dinmetode() {
  try {
      ...
  } catch (SQLException ex) {
      // process exception
  }
}
Avatar billede roo104 Nybegynder
22. november 2003 - 18:14 #5
Dine data bliver ikke skrevet ud hvis din kode er som foroven
// System.out.println("Alle data: "+v);
den linje er kommenteret ud.
Avatar billede roo104 Nybegynder
22. november 2003 - 18:20 #6
public void dinmetode() throws SQLException {
  ...
}

"tager" en exception med vidre, fx. til din main metode.
public Vector hentAlle() throws SQLException, kan kaste en SQLException når den bliver kaldt. Den ville være oplagt at have en try/catch i main
Avatar billede arne_v Ekspert
22. november 2003 - 18:44 #7
roo>

Hvad gør så:

    for(int i = 0 ; i < v.size() ; i++) {
    System.out.println(v.elementAt(i));
    }

?
Avatar billede roo104 Nybegynder
22. november 2003 - 18:47 #8
ja... der skulle jeg nok lige have kigget lidt bedre efter :)
Avatar billede coolfisk Nybegynder
22. november 2003 - 18:48 #9
:)
Avatar billede arne_v Ekspert
22. november 2003 - 19:12 #10
Øh ????
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:15 #11
den udskriver alle elementerne i vektoren, det vil sige plade nr, tal1
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:17 #12
Vector  v = dbf.hentAlle();

for(int i = 0 ; i < v.size() ; i++) {
    System.out.println(v.elementAt(i));
    }
Avatar billede arne_v Ekspert
22. november 2003 - 20:21 #13
Det var point afgivningen jeg undrede mig over.
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:27 #14
har du ikke fået pointene?
Avatar billede arne_v Ekspert
22. november 2003 - 20:29 #15
No. Dem løb roo med.
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:31 #16
doh... det må du meget undskylde, troede det var dig der skrev. Skal jeg oprette et nyt spørgsmål? Har faktisk et til jeg skal have løst.... så får du 100 point?
Avatar billede arne_v Ekspert
22. november 2003 - 20:33 #17
Jo tak.
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:34 #18
kalder den domodal under java... er der om 1 min
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:39 #19
domodal hjælp
Avatar billede roo104 Nybegynder
22. november 2003 - 21:24 #20
jeg giver bare tilbage, hvordan skal de fordeles coolfisk  ?
Avatar billede coolfisk Nybegynder
22. november 2003 - 21:26 #21
bare halvdelen... hvordan gør man det?
Avatar billede roo104 Nybegynder
22. november 2003 - 21:28 #22
jeg opretter et spg. som giver arne 25 point, så har vi delt dem
Avatar billede coolfisk Nybegynder
22. november 2003 - 21:30 #23
arne kommer lige om lidt
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