k_mishima
17-05-2011, 17:15
Salve a tutti ho un problema nell'utilizzare la classe ResultSet
Posto il codice estrapolato dal mio programma nella sua parte essenziale
final String USERNAME = "";
final String PASSWORD = "";
final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
final String URLMondrian = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\MondrianFoodMart.mdb;}";
Connection c2 = null; //MondrianFoodMart
Statement statement = null;
String query15 = "SELECT time_by_day.week_of_year, sales_fact_1997.product_id, " +
"sales_fact_1997.store_id, sales_fact_1997.promotion_id, sales_fact_1997.customer_id, " +
"Sum(sales_fact_1997.store_sales) AS SommaDistore_sales, Sum(sales_fact_1997.store_cost) " +
"AS SommaDistore_cost, Sum(sales_fact_1997.unit_sales) AS SommaDiunit_sales " +
"FROM sales_fact_1997 INNER JOIN time_by_day ON sales_fact_1997.time_id = time_by_day.time_id " +
"GROUP BY time_by_day.week_of_year, sales_fact_1997.product_id, sales_fact_1997.store_id, " +
"sales_fact_1997.promotion_id, sales_fact_1997.customer_id";
try {
Class.forName(DRIVER);
try {
c2 = DriverManager.getConnection(URLMondrian, USERNAME, PASSWORD);
statement = c2.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = statement.executeQuery(query15);
resultSet.last();
int rowCountMondrian1997 = resultSet.getRow();
System.out.println(rowCountMondrian1997);
//System.out.println(rowCountMondrian1997);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Cosa fa la query non è importante, comunque raggruppa gli elementi della clausola facendo riferimento a una tabella temporale passando da grana di tempo di giorni a grana settimane.
La tabella sales_fact_1997 ha 86836 record, il risultato della query (testato in access) ne ha 86823.
Quando nel mio programma estrapolo 1 record per volta, il puntatore arrivato sul numero 86824 va in errore
java.sql.SQLException: [Microsoft][Driver Manager ODBC] Stato del cursore non valido.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
Non riesco a capire perchè il resultSet ha 86836 elementi e non 86823. La query in access da 86823 elementi, perchè in java il result set ha 86836 valori?
Nel codice che ho postato mi muovo sull'ultimo elemento e lo stampo, ed è 86836, invece vorrei fosse 86823.
Grazie in anticipo per l'aiuto.
Posto il codice estrapolato dal mio programma nella sua parte essenziale
final String USERNAME = "";
final String PASSWORD = "";
final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
final String URLMondrian = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\MondrianFoodMart.mdb;}";
Connection c2 = null; //MondrianFoodMart
Statement statement = null;
String query15 = "SELECT time_by_day.week_of_year, sales_fact_1997.product_id, " +
"sales_fact_1997.store_id, sales_fact_1997.promotion_id, sales_fact_1997.customer_id, " +
"Sum(sales_fact_1997.store_sales) AS SommaDistore_sales, Sum(sales_fact_1997.store_cost) " +
"AS SommaDistore_cost, Sum(sales_fact_1997.unit_sales) AS SommaDiunit_sales " +
"FROM sales_fact_1997 INNER JOIN time_by_day ON sales_fact_1997.time_id = time_by_day.time_id " +
"GROUP BY time_by_day.week_of_year, sales_fact_1997.product_id, sales_fact_1997.store_id, " +
"sales_fact_1997.promotion_id, sales_fact_1997.customer_id";
try {
Class.forName(DRIVER);
try {
c2 = DriverManager.getConnection(URLMondrian, USERNAME, PASSWORD);
statement = c2.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = statement.executeQuery(query15);
resultSet.last();
int rowCountMondrian1997 = resultSet.getRow();
System.out.println(rowCountMondrian1997);
//System.out.println(rowCountMondrian1997);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Cosa fa la query non è importante, comunque raggruppa gli elementi della clausola facendo riferimento a una tabella temporale passando da grana di tempo di giorni a grana settimane.
La tabella sales_fact_1997 ha 86836 record, il risultato della query (testato in access) ne ha 86823.
Quando nel mio programma estrapolo 1 record per volta, il puntatore arrivato sul numero 86824 va in errore
java.sql.SQLException: [Microsoft][Driver Manager ODBC] Stato del cursore non valido.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
Non riesco a capire perchè il resultSet ha 86836 elementi e non 86823. La query in access da 86823 elementi, perchè in java il result set ha 86836 valori?
Nel codice che ho postato mi muovo sull'ultimo elemento e lo stampo, ed è 86836, invece vorrei fosse 86823.
Grazie in anticipo per l'aiuto.