Avatar billede krukken Mester
28. april 2004 - 13:36 Der er 13 kommentarer og
1 løsning

Jeg får en fejl.

Jeg får følgende fejl:
reference to Statement is ambiguous, both class java.sql.Statement in java.sql and class java.beans.Statement in java.beans match


Hvordan angiver jeg at det er Statement fra sql jeg ønsker at bruge?
Avatar billede rasmusbg Nybegynder
28. april 2004 - 13:39 #1
Har du importeret java.sql.* og java.beans.*?
Avatar billede krukken Mester
28. april 2004 - 13:45 #2
Ja, begge to. Den klasse jeg er ved at lave skal fungere som en Java Bean
***************************
import java.beans.*;
import java.io.Serializable;
import java.io.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Database extends Object implements Serializable {
   
    public static final String PROP_SAMPLE_PROPERTY = "sampleProperty";
    private String sampleProperty;
    private PropertyChangeSupport propertySupport;
    private Connection con;
    private Statement stmt;
    private PreparedStatement pstmt;
    private ResultSet rs;
   
    public Database() {
        propertySupport = new PropertyChangeSupport(this);
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            DriverManager.setLoginTimeout(30);
            con = DriverManager.getConnection("jdbc:mysql://localhost/kollegie", "", "");
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
   
    public String getSampleProperty() {
        return sampleProperty;
    }
   
    public void setSampleProperty(String value) {
        String oldValue = sampleProperty;
        sampleProperty = value;
        propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, sampleProperty);
    }
   
   
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }
   
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
    }
   
    public String getServletInfo()
    {
      return "Servlet connects to PostgreSQL database and displays result of a SELECT";
    }

   
    public static void main(String[] args)
    {
        Database db = new Database();
        System.out.println(""+db.getText("INDEX"));
    }
       

    // Use http GE
   
    public String getText(String label)
    {
        String m_text = null;
        try
            {
                // Declare our statement
                Statement statement = con.createStatement();

                String query = "SELECT description FROM site WHERE Subjekt=?";

                // Perform the query
                ResultSet rs = statement.executeQuery(query);

                // Iterate through each row of rs
                while (rs.next())
                {
                  m_text = rs.getString("name");
                }
                statement.close();
            }
        catch(Exception ex)
            {
                ex.printStackTrace();
        }
        return m_text;
    }
   
    public String getSubjekt(String label)
    {
        String m_text = null;
        try
            {
                // Declare our statement
                Statement statement = con.createStatement();

                String query = "SELECT Subjekt FROM site WHERE subjekt=?";

                // Perform the query
                ResultSet rs = statement.executeQuery(query);

                // Iterate through each row of rs
                while (rs.next())
                {
                  m_text = rs.getString("name");
                }
                statement.close();
            }
        catch(Exception ex)
            {
                ex.printStackTrace();
        }
        return m_text;
    }
   
    public boolean validUser(String email, String psword)
    {   
        boolean valid = false;
        try
            {
                // Declare our statement
                Statement statement = con.createStatement();

                String query = "SELECT id,varnr FROM users WHERE email=? AND password=?";

                // Perform the query
                ResultSet rs = statement.executeQuery(query);

                // Iterate through each row of rs
                if(rs.next())
                {
                    valid = true;
                }
            }
        catch(Exception ex)
            {
                ex.printStackTrace();
        }
        return valid;
    }
*****************'
Avatar billede rasmusbg Nybegynder
28. april 2004 - 13:47 #3
Enten kan du nøjes med kun at importere de klasser fra java.beans og java.sql, som du skal bruge, eller også skal du, hver gang du erklærer et Statement skrive java.sql.Statement.

:o)
Avatar billede arne_v Ekspert
28. april 2004 - 13:48 #4
Du skriver bare eksplicit java.sql.Statement i stedetfor Statement
Avatar billede arne_v Ekspert
28. april 2004 - 13:49 #5
Men jeg vil give Rasmus helt ret i at det er meget pænere kun at importere
de klasser du faktisk skal bruge.
Avatar billede rasmusbg Nybegynder
28. april 2004 - 13:50 #6
Forresten skal du passe på med at lave connections til databasen, der er åbne i længere tid. De har en tendens til at blive lukket pga. et timeout, også selvom de bliver brugt jævnligt :o)
Avatar billede arne_v Ekspert
28. april 2004 - 18:03 #7
Det jeg jeg aldrig oplevet.

Og det må vel være noget uhensigtsmæssigt i forbindelse med en connection pool.
Avatar billede arne_v Ekspert
28. april 2004 - 18:05 #8
Men derudover kan man jo angive autoReconnect=true i sin MySQL JDBC URL ...
Avatar billede rasmusbg Nybegynder
28. april 2004 - 18:42 #9
Jeg har oplevet det i forbindelse med en test af et system, jeg har været med til at lave i et projekt på datamatikeruddannelsen. Lige pludselig var der nogle kørsler af testprogrammet, der crashede pga. forbindelserne var blevet lukket.
I en connection pool vil man typisk teste på om en connection er åben, inden den bliver udleveret, og hvis den ikke er bliver der oprettet en ny eller taget en anden.
Avatar billede arne_v Ekspert
28. april 2004 - 19:31 #10
Hvis timeout er fra created og ikke fra last activity, så er det vel
ikke tiltrækkeligt at connection pool checker ved udlevering.
Avatar billede rasmusbg Nybegynder
28. april 2004 - 22:07 #11
Hvornår mener du ellers det er nødvendigt?
Ideen med en connection pool er jo, at et objekt, der har brug for en connection får den fra poolen på det tidspunkt, den skal bruge den, og lægger den tilbage med det samme den er færdig med den. En connection skal jo ikke holdes af objektet i længere tid.
Avatar billede arne_v Ekspert
28. april 2004 - 22:10 #12
Vi er helt enige om at medium-high performance java web apps bør bruge
containerens database connection pool.

Jeg argumenterer bare for at en database/driver som lave timeout efter
created i stedet for last activity er ubrugelig, fordi den ikke egner sig
til connection pool.
Avatar billede krukken Mester
05. maj 2004 - 09:37 #13
rasmugbg ligger du et svar?
Avatar billede krukken Mester
05. juni 2004 - 10:04 #14
intet svar
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