Avatar billede havmaage Juniormester
03. juli 2002 - 17:51 Der er 9 kommentarer og
1 løsning

hvorfor bliver mine rækker ikke skrevet ud(newbie)

Hej!
Jeg har med nogen hjælp fået nørklet et program sammen der kan connecte til en access database lokalt på min maskine, jeg kan få et fornavn ud, ved at sætte en System.out.println(rs.Getstring("fornavn"); ind i select metoden. Men jeg kan ikke gennemskue hvorfor den ikke looper igennem og skriver det ud på skærmen.

Den outputer bare 0 Results were found.

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

public class Access {

    private Connection con;
    private Vector results;

    //public static void main(String[] args) {
      //  Access ac = new Access();
        //ac.Access();
public static void main(String[] args) {
        Access ac = new Access();
        ac.Access();

        try {
            ac.open();
        }

        catch (SQLException e) {
            e.printStackTrace();
        }


        ac.select("SELECT fornavn,efternavn,Adresse FROM person;");



    }

   

    public void Access() {

        // Load the JDBC-ODBC bridge driver
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException ee) {
            ee.printStackTrace();
        }
    }


    //    2.open a data source name by means of the jdbcodbcdriver.

    public void open() throws SQLException {

        // ODBC data source name
        String dsn = "jdbc:odbc:person";
        String user = "admin";
        String password = "";

        // Connect to the database
        con = DriverManager.getConnection(dsn, " ", " ");

        // Shut off autocommit
        con.setAutoCommit(false);

    }


    //  3.executing a query on the opened connection.
//Det er denne metode med udskrivt af v1 og v3 jeg ikke kan se hvad laver forkert.
    public void select(String whereClause) {

        Statement stmt; // SQL statement object
        String query;  // SQL select string
        ResultSet rs;  // SQL query results
        boolean more;  // "more rows found" switch
        String v1, v2, v3; // Temporary storage results

        results = new Vector(10);

        query = whereClause;


        try {
            stmt = con.createStatement();
            rs = stmt.executeQuery(query);

            // Check to see if any rows were read
           
            more = rs.next();
            if (!more) {

                System.out.println("No rows found.");
                return;

            }

            // Loop through the rows retrieved from the query
            while (more) {
                ;
                v1 = "fornavn: " + rs.getString("fornavn");
                v2 = "efternavn: " + rs.getString("efternavn") + " " + rs.getString("Addresse");
                //v3 = "adresse: " + rs.getString("Addresse");

                System.out.println(v1);
                System.out.println(v2);
                //System.out.println(v3);
                System.out.println("");

              //  results.addElement(v1 + "\n" + v2 + "\n" + v3 + "\n");
                results.addElement(v1 + "\n" + v2 + "\n");
                more = rs.next();

            }

            rs.close();
            stmt.close();
        } catch (SQLException e) {
            System.out.println("" + results.size() + " results where found.");
        }

    }

}
Avatar billede r9 Nybegynder
03. juli 2002 - 18:04 #1
fjern simikolonet efter din while
Avatar billede havmaage Juniormester
03. juli 2002 - 18:22 #2
Hej Igen r9 :-), desværre gjore det ikke udfaldet. Det mærkelige er at når jeg sætter en System.out.println(rs.getstring("fornavn")), IND i while loopet så skriver den recorden ud, iøvrigt kun den første record i tabellen.
Avatar billede r9 Nybegynder
03. juli 2002 - 18:24 #3
kigger lige på det
Avatar billede r9 Nybegynder
03. juli 2002 - 18:34 #4
Dette virker i min Access:

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

public class Access {

    private Connection con;
    private Vector results;

    //public static void main(String[] args) {
    //  Access ac = new Access();
    //ac.Access();
    public static void main(String[] args) {
        Access ac = new Access();
        ac.Access();

        try {
            ac.open();
        } catch (SQLException e) {
            e.printStackTrace();
        }


        ac.doQuery("SELECT * FROM person");


    }


    public void Access() {

        // Load the JDBC-ODBC bridge driver
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException ee) {
            ee.printStackTrace();
        }
    }


    //    2.open a data source name by means of the jdbcodbcdriver.

    public void open() throws SQLException {

        // ODBC data source name
        String dsn = "jdbc:odbc:person";
        String user = "admin";
        String password = "";

        // Connect to the database
        con = DriverManager.getConnection(dsn, " ", " ");

        // Shut off autocommit
        //    con.setAutoCommit(true);

    }


// udtræk fra databasen, resultatet består af en sekvens af felter
    public Vector doQuery(String sqlUdtryk) {
        ResultSet rs = null;
        Vector data = new Vector();
        try {
            Statement stmt = con.createStatement();
            rs = stmt.executeQuery(sqlUdtryk);

            ResultSetMetaData rsmd = rs.getMetaData();

            int numberOfColumns = rsmd.getColumnCount();


            while (rs.next()) {
                if (numberOfColumns > 1) {
                    for (int i = 1; i <= numberOfColumns; i++) {
                        data.add(rs.getString(i));
                        System.out.println(data);
                    }
                } else {
                    data.add(rs.getString(1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return data;
    }


}



Resultatet ligger nu i en vector
Avatar billede r9 Nybegynder
03. juli 2002 - 18:40 #5
Brug denne Main:

public static void main(String[] args) {
        Access ac = new Access();
        ac.Access();

        try {
            ac.open();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        Vector res = new Vector();
        res = ac.doQuery("SELECT * FROM person");

        if (res != null && res.size() > 0) {

                for (int i = 0; i < res.size(); i++) {

                    System.out.println(res.elementAt(i));

                }

        }


    }

 
Det er pænere.
Avatar billede havmaage Juniormester
03. juli 2002 - 18:44 #6
jubii nu virker de også hos mig. Den er lidt anderledes en den vi har arbejdet med indtil videre. Nu kan jeg selv prøve at implementere Testklasse og prøve om der kan skrives til databasen
Tak for hjælpen
Avatar billede r9 Nybegynder
03. juli 2002 - 18:57 #7
takker for point.

Hvis du vil insætte og slette i db, kan du bruge denne metode:

    // udfør sql statement uden resultset
    public  void execSql(String sql) {

        try {
            Statement stmt = con.createStatement();
            stmt.execute(sql);
        } catch(Exception e) {e.printStackTrace();}

    }
Avatar billede havmaage Juniormester
04. juli 2002 - 20:22 #8
Det er bare helt fint. hmmmm det der try {
do something
}  catch(Exception e) {e.printStackTrace();}

Er det ikke det som f.eks vb. on error goto
den der Exception e, kalder vel et eller andet std.err, men hvad med printstackTrace()

Bare lige i korte vendinger :-) hvis du gider
Avatar billede r9 Nybegynder
04. juli 2002 - 20:32 #9
Nu kender jeg ikke noget til vb.

Men try/catch bruges hver gang du bruger en metode som kan kaste en exception.

På Java's Api: http://java.sun.com/j2se/1.3/docs/api/
kan du se alle de klasser og metoder som du kan kalde (der en mange:-)))

Der er en klasse der hedder "Exception" og den har en metode som hedder "printStackTrace".
Så e.printStackTrace(); er et metodekalde på Exception-klassen, som udskriver den fejl der er opstået.

Eller som Sun skriver:
"Prints this Throwable and its backtrace to the specified print stream."
Avatar billede havmaage Juniormester
04. juli 2002 - 20:38 #10
tak for det:-)
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