Avatar billede herman01753 Nybegynder
18. maj 2004 - 12:52 Der er 5 kommentarer og
1 løsning

JDBC:ODBC fejl problem

jeg har lavet en java klasse, som pakke min database forbindelse til en access database ind i JDBC:ODBC kald.
Jeg kan udføre alle mulige select statements, men hvis jeg laver følgende kald virker det ikke:
********

DB.select("select  h2.navn as name, sum(temp.points) as point, sum(temp.GF)as Goals_for, sum(temp.GA) as Goals_Against from ( select sum(hold1_point) as points, sum(hold1_maal) as GF, sum(hold2_maal) as GA from kamp where hold1_id=2 union select sum(hold2_point) as points,sum(hold2_maal) as GF,sum(hold1_maal) as GA from kamp where  hold2_id=2 ) temp, hold h2 where h2.hold_id =2 group by h2.navn;");

******
hvor DB er min DB handler.
koden til DB handler er:
*******



import java.sql.*;
public class DBHandler extends Object{
   
    private Connection con = null;
    private Statement stat = null;
    private ResultSet rs = null;
               
    public DBHandler(){}
   
       
       
    public boolean open(String dbDriverName, String dbClassName)
    {           
        try
        {
            if(this.con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName);
            }
        }
        catch (SQLException e)
        {
            return false;
        }
        catch (ClassNotFoundException e)
        {
            return false;
        }
        catch (InstantiationException e)
        {
            return false;
        }
        catch (IllegalAccessException e)
        {
            return false;
        }
        return true;
    }
    public void close()
    {
        if(con!=null)
        {
            try
            {
                con.close();
                con=null;
            }
            catch (SQLException e)
            {       
            }
        }
    }
    public boolean insert(String sql)
    {
        if(con!=null)
        {
            try
            {
                stat = con.createStatement();
                stat.executeUpdate(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
                return false;
            }
        }
        return true;
    }
    public ResultSet select(String sql)
    {
        if(con!=null)
        {
            try
            {
                stat = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                            ResultSet.CONCUR_UPDATABLE);
                rs = stat.executeQuery(sql);
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return rs;
    }
   
   
}

******

jeg har inden jeg kalder med SQL statemen naturligvis åbent en forbindelse som jeg ved virker, da jeg kan lave andre select statements uden problemer.

jeg har testet SQL sætningen direkte på Access databasen i querys, og her fungerer den fint, men hvis jeg eksekverer den igennem min DBhandler får jeg følgende fejl:

a.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'NAME' as part of an aggregate function.
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253)
        at sun.jdbc.odbc.JdbcOdbcResultSet.calculateRowCount(JdbcOdbcResultSet.java:6357)
        at sun.jdbc.odbc.JdbcOdbcResultSet.initialize(JdbcOdbcResultSet.java:157)
        at sun.jdbc.odbc.JdbcOdbcStatement.getResultSet(JdbcOdbcStatement.java:424)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:254)

håber der er nogen der kan hjælpe mig med at løse problemte, og helst hurtigt. jeg sidder nemlig og bruger det til et skoleprojekt, derfor de mange point...
Avatar billede arne_v Ekspert
18. maj 2004 - 13:07 #1
prøv og ret:

group by h2.navn

til

group by name
Avatar billede herman01753 Nybegynder
18. maj 2004 - 13:15 #2
har jeg prøvet, så brokker den sig over det samme, og hvis jeg tester den sætning direkte på databasen, fra access, så fejler den. Derfor kan det ikke være det.
Avatar billede Slettet bruger
18. maj 2004 - 17:33 #3
Jeg synes det ser ud som om at der står

"...sum(temp.GF)as..."

og ikke

"...sum(temp.GF) as..."

i linie 2. Det skulle ihvertfald være nemt at rette.
Avatar billede arne_v Ekspert
18. maj 2004 - 22:16 #4
http://hotwired.lycos.com/webmonkey/02/35/index4a_page4.html?tw=backend:

You tried to execute a query that does not include the specified expression as part of the aggregate function

The nerve! If you're using a function like "sum" or "count" and you want to get other information at the same time, you have to put all other fields in a GROUP BY section. For example:

select sum(age), name from bandits group by name

The specified field could refer to more than one table listed in the from clause of your SQL statement.

Joining tables are we? A good rule of thumb is to refer to all fields with their complete name in table.field form. That is, it's bandits.id, not just id.

så jeg har svært ved at tro at:

group by name

kan give:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'NAME' as part of an aggregate function.
Avatar billede herman01753 Nybegynder
19. maj 2004 - 10:23 #5
joern_h det er en indættelses fejl. jeg har samlet det fra flere linjer i min kode, så det er ikke der fejlen ligger.

arne_v det her er min fejlbesked når jeg bruger name istedet for navn eller h2.navn:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'name' as part of an aggregate function.
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253)
        at LoginPackage.DBHandler.select(DBHandler.java:89)
        at GameInfoPackage.Game.BuildLeagueTableFromLeagueID(Game.java:143)
        at GameInfoPackage.Game.BuildLeagueTableFromTeamID(Game.java:80)
        at GameInfoPackage.Game.main(Game.java:67)
Avatar billede herman01753 Nybegynder
11. april 2005 - 14:13 #6
lukker spørgsmålet
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