Avatar billede damski Nybegynder
20. februar 2002 - 18:40 Der er 4 kommentarer og
2 løsninger

Database/Servlet

Jeg kan ikke finde noget som helst om hvordan man fra sin Servlet skaber forbindelse til sin database, især fordi jeg skal have lagt noget ned i en database, har fundet en lille smule om at hente noget fra en database, måske finder jeg ud af det, men skulle du vide om noget jeg nok kunne bruge, så skriv venligst, alt har interresse....
Avatar billede cs_henrik Nybegynder
20. februar 2002 - 18:53 #1
Her er et stykke kode til der skaber en forbindelse til en PostgreSQL-database. Jeg har brugt det i en servlet. Bemærk, at du skal have hentet driveren til postgreSQL (eller den dbms du vil bruge) og indtaste ip, navn på database, username og password før det vil virke.


try
{
    Class.forName("org.postgresql.Driver");
    connection = DriverManager.getConnection("jdbc:postgresql://ip/DBNAVN", "USERNAME", "PASSWORD");

}
catch (ClassNotFoundException e)
{
    System.err.println(e);
}
catch(SQLException e)
{
    System.err.print(e);
}
Avatar billede damski Nybegynder
20. februar 2002 - 19:35 #2
Okay og hvis jeg så havde Sql sætning på insert into et eller andet, hvor ville jeg så sætte den??
Avatar billede cs_henrik Nybegynder
20. februar 2002 - 19:44 #3
Hvis du har en servlet, der "overtager kontrollen" ved en GET, kan du lave en insert i public void doGet(...).
Hvis det er en POST, hedder den doPost(...).
Avatar billede disky Nybegynder
20. februar 2002 - 20:52 #4
brug denne klasse:

/*
* DataBase.java
*
* Created on 3. december 2000, 21:06
*/

import java.sql.*;

import disky.database.*;

/**
*
* @author  Søren Reinke
* @version
*/

/*
* Funder lidt over om database forbindelsen kun skal åbnes ved brug, eller x antal altid skal være åben
* og man så bruge den/de som connection pool
*/


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)
    {           
        try
        {
            if(con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName, user, pass);
            }
        }
        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;
    }
}




kald open("org.postgresql.Driver","jdbc:postgresql://SERVERNAME/DATABASENAME", "USERNAME", "PASSWORD");

Derefter kan du f.eks. kalde:

executeQuery("select * from table where navn='damski'");

Den leverer et resultset tilbage som du så behandler.


Klassen er blevet brugt i flere projekter,
Avatar billede damski Nybegynder
20. februar 2002 - 21:14 #5
Nu er det en Formservlet jeg skal lave nu, hvor jeg vil lave en masse insert statements, altså en servlet med en jsp eller html side hvor man indtaster oplysninger, som så skal føres ind i databasen via postgresql, kan den så bruges.
Avatar billede logical Nybegynder
24. februar 2002 - 05:59 #6
Disky>>Forresten, I din fine database klasse, hvem har så ansvaret for at lukke resultsets, statements og connections??

Gad vide hvilke typer projekter, der har kunne nøjes med 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