Avatar billede tchami Nybegynder
25. april 2004 - 14:54 Der er 6 kommentarer og
1 løsning

Vise data i Resultset dynamisk..

Hej,

Jeg har fået oprettet en forbindelse til en MySQL db og i den forbindelse vil jeg gerne vise resultatet af en SELECT query.

Indtil videre ser koden til det således ud:

Conn myTest = new Conn();
objStmt = myTest.connect("customer");
System.out.println("skriv et kundenummer: ");
customerNr = Keyboard.readInt();

String strSQL = "SELECT * FROM customer WHERE Id = '"+customerNr+"'";

int Nr,Alder,p;
String Navn;    p=0;

try
{
svar=objStmt.executeQuery(strSQL);
while (svar.next())
{
Navn=svar.getString("Name");
Nr=svar.getInt("PhoneNo");
System.out.println("Name: " + Navn + " - Tlf: " + Nr);
p++;
}
if(p==0) System.out.println("NOT FOUND!");
objStmt.close();

}
catch(SQLException e)
{
System.out.println("SQL fejl :" + e.getMessage());
}   


Conn klassen ser således ud:

public class Conn {

        Connection objConn;
        Statement objStmt;

        public Statement connect(String table){
           
            String URL = new String("jdbc:mysql://localhost/02344/"+table+"?user=02344&password=123");
           
            try
            {
                Class.forName("org.gjt.mm.mysql.Driver");
            }
            catch(ClassNotFoundException e)
            {
                System.out.println("Kan ikke finde driveren");
            }
                       
            try{
                objConn = DriverManager.getConnection(URL,"","");
                objStmt = objConn.createStatement();
            }   
            catch(SQLException e){
                System.out.println("ERROR: " + e);
            }       

            return objStmt;
        }
   
}

Det virker i og for sig fint nok, men er der ikke en nemmere måde at vise al returneret data for en query? Og kan jeg ikke optimere selve query delen en hel del?
Avatar billede arne_v Ekspert
25. april 2004 - 14:59 #1
Koden ser fin nok ud.

Det kan ike gøres meget simplere.

Det kan måske laves lidt pænere ved at bruge en bean klasse til at repræsentere
en række i.
Avatar billede arne_v Ekspert
25. april 2004 - 15:00 #2
Sammenlign f.eks. følgende to (som jeg lavede til et andet spørgsmål)
Avatar billede arne_v Ekspert
25. april 2004 - 15:00 #3
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;

public class SimpleDBGUI extends JFrame implements ActionListener {
  private JButton find;
  private JTextField kunde;
  private JTextArea res;
  public SimpleDBGUI() {
      getContentPane().setLayout(new BorderLayout());
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setSize(400, 400);
      kunde = new JTextField();
      getContentPane().add(kunde, BorderLayout.NORTH);
      res = new JTextArea();
      getContentPane().add(res, BorderLayout.CENTER);
      find = new JButton("Søg");
      find.addActionListener(this);
      getContentPane().add(find, BorderLayout.SOUTH);
  }
  public void actionPerformed(ActionEvent evt) {
      try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM T1 WHERE F2='" + kunde.getText() + "'");
        while (rs.next()) {
            int ifelt = rs.getInt(1);
            String sfelt = rs.getString(2);
            res.setText(res.getText() + ifelt + " " + sfelt + "\r\n");
        }
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      } catch (SQLException e) {
        e.printStackTrace();
      }
  }
  public static void main(String[] args) {
      SimpleDBGUI f = new SimpleDBGUI();
      f.show();
  }
}
Avatar billede arne_v Ekspert
25. april 2004 - 15:00 #4
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;

public class SimpleDBGUI extends JFrame implements ActionListener {
    private JButton find;
    private JTextField crit;
    private JTextArea res;
    private DBHandler db;
    public SimpleDBGUI() {
        getContentPane().setLayout(new BorderLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);
        crit = new JTextField();
        getContentPane().add(crit, BorderLayout.NORTH);
        res = new JTextArea();
        getContentPane().add(res, BorderLayout.CENTER);
        find = new JButton("Søg");
        find.addActionListener(this);
        getContentPane().add(find, BorderLayout.SOUTH);
        db = new DBHandler("TestMSAccess", "Admin", "");
    }
    public void actionPerformed(ActionEvent evt) {
        res.setText("");
        ArrayList lst = db.getAll(crit.getText());
        for(int i = 0; i < lst.size(); i++) {
            res.setText(res.getText() + lst.get(i) + "\r\n");
        }
    }
    public static void main(String[] args) {
        SimpleDBGUI f = new SimpleDBGUI();
        f.show();
    }
}

class DBHandler {
    private Connection con;
    private Statement stmt;
    public DBHandler(String dsn, String usr, String pwd) {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:" + dsn, usr, pwd);
            stmt = con.createStatement();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public ArrayList getAll(String crit) {
        ArrayList res = new ArrayList();
        try {
            ResultSet rs = stmt.executeQuery("SELECT * FROM t1 WHERE f2 LIKE '" + crit + "'");
            while (rs.next()) {
                res.add(new Record(rs.getInt(1), rs.getString(2)));
            }
            rs.close();       
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res;
    }
}

class Record {
    private int f1;
    private String f2;
    public Record() {
        f1 = 0;
        f2 = "";
    }
    public Record(int f1, String f2) {
        this.f1 = f1;
        this.f2 = f2;
    }
    public int getF1() {
        return f1;
    }
    public String getF2() {
        return f2;
    }
    public void setF1(int f1) {
        this.f1 = f1;
    }
    public void setF2(String f2) {
        this.f2 = f2;
    }
    public String toString() {
        return (f1 + " " + f2);
    }
}
Avatar billede tchami Nybegynder
24. maj 2004 - 20:44 #5
Ok, tak for svaret :)

Beklager det sene svar..
Avatar billede arne_v Ekspert
24. maj 2004 - 20:48 #6
Jeg vil ligge et svar

Skriv hvis du vil have noget uddybet - jeg har lidt svært ved at vurdere
hvor tæt de to eksempler er på din problem stilling
Avatar billede tchami Nybegynder
24. maj 2004 - 20:55 #7
Lige umiddelbart har jeg ikke brug for uddybning, men siger til hvis det er tilfældet..
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