Avatar billede sbay Nybegynder
06. december 2001 - 17:49 Der er 13 kommentarer og
1 løsning

Mysql

Hej Endnu et mysql spørgsmål:

Jeg bruger følgende kode, men får en fejl ved class.forname() - hvor den forventer en type i stedet for en sti!!! Forslag?????


page import=\"java.sql.*\"

Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
Connetion con = DriverManager.getConnection(\"jdbc:mysql://212.10.183.149/test_bay\",\"\",\"\");
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(\"Select * from kunder\");
while (rs.next()) {
system.out.println(rs.getString(\"knavn\")+<br>);
}
Avatar billede bmc Nybegynder
06. december 2001 - 19:08 #1
tilføj følge til din klasse: import java.sql.*;
Avatar billede sbay Nybegynder
06. december 2001 - 19:13 #2
det har jeg rettet - det er en fejl det er med her!
Avatar billede disky Nybegynder
06. december 2001 - 22:26 #3
Du bruger denne klasse:

import java.sql.*;

/**
*
* @author  srr
* @version
*/
public class dbHandler extends Object
{
   
    private Connection con=null;

    /** Creates new DataBase */
    public dbHandler()
    {
    }

    public boolean open(String dbDriverName, String dbClassName, String user, String pass)
    {           
//        System.out.println(\"************************************************************************\");
        try
        {
            if(con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName, user, pass);
//                System.out.println(\"con = \"+con);
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (InstantiationException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        return true;
    }
   
    public void close()
    {
        if(con!=null)
        {
            try
            {
                con.close();
                con=null;
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
    }
   
    public int doUpdate(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
//                System.out.println(\"SQL Update = \"+(System.currentTimeMillis()-time)+\" ms  \"+sql);
                return stat.executeUpdate(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return 0;
    }

    public ResultSet doQuery(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
//                System.out.println(\"SQL Update = \"+(System.currentTimeMillis()-time)+\" ms  \"+sql);
                return stat.executeQuery(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return null;
    }
}



Og kalder den med denne her:

import dk.ecsoft.database.mysql.*;
/**
*
* @author  srr
* @version
*/
public class Database extends dbHandler
{
   
    /** Creates new Database */
    public Database()
    {
    }

    public boolean open()
    {
        return super.open(\"org.gjt.mm.mysql.Driver\",\"jdbc:mysql://SERVERNAVN/DATABASENAVN\",\"BRUGERNAVN\",\"PASSWORD\");
    }
}


Så kalder du doQuery() med en sql streng og får et resultset tilbage.
Avatar billede sbay Nybegynder
06. december 2001 - 22:40 #4
Der er lidt problemer med at kalde doQuery, da mainmetoden er static
Avatar billede sbay Nybegynder
06. december 2001 - 23:50 #5
hvor skal driveren placeres på serveren????

Den kan ikke finde den med det her, og den ligger ellers under og ved siden af mysql-bib....
(\"org.gjt.mm.mysql.Driver\")
Avatar billede rbuus Nybegynder
07. december 2001 - 05:40 #6
hmmm - lige nu driller det lidt med at kalde doQuery() - da con == null når  jeg kommer ind i doQuery()???
Avatar billede rbuus Nybegynder
07. december 2001 - 05:42 #7
hov -- er sbay, men sidder på rbuus\'s maskine!
Avatar billede disky Nybegynder
07. december 2001 - 08:33 #8
du kan placere driveren lige der hvor du vil, MEN .jar skal være nævnt i din classpath.

Det med static, kan du nemt løse ved at få main til at oprette et object af den klasse den tilhører og derved komme ud af static.

f.eks.

class test
{

public test()
{
//Nu er det ikke static mere.
}

public void main(String[] args)
{
new test();
}
}
Avatar billede disky Nybegynder
07. december 2001 - 08:34 #9
det med conn==null løser du ved at kale open() først for at åbne en connection til databasen.
Avatar billede sbay Nybegynder
07. december 2001 - 10:39 #10
De to ovenstående ting har vi prøvet, men problemet lader til at være, at con bliver sat lig null, et aller andet sted mellem kaldet af open() og kaldet af doQuery().
Avatar billede disky Nybegynder
07. december 2001 - 12:11 #11
??

Jeg plejer selv at kalde open() efterfulgt af x antal doquery/doupdate og derefter close()

Fungerer fint.
Avatar billede sbay Nybegynder
07. december 2001 - 12:45 #12
For lige at tage det forfra, skal de to ovenstående klasser bare forblive som de er, og så kalde følgende i en main-metode: open() efterfulgt af doQuery() og så close() til sidst.

Skal dette fungerer???
Avatar billede disky Nybegynder
07. december 2001 - 12:49 #13
Først opretter du et objekt af typen Database vi kalder den db.

så gør du

db.open();
ResultSet rs=db.doQuery(\"select * from venner\");
//lav noget med dit resultset
db.close;

Avatar billede sbay Nybegynder
07. december 2001 - 13:56 #14
Tusind tak for hjælpen - nu virker skidtet - efter ca 36 timers næsten uafbrudt kamp!
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