[Java]Updatable ResultSet

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik wil graag een updatable resultset hebben en het schijnt me maar niet te lukken. Hij wil gewoon niet update krijg verder geen foutmeldingen.

Het is me eerlijk gezegd ook een beetje onduidelijk wie voor die functionaliteit verantwoordelijk is. Ik gebruik op dit moment een sybase 5 database (oud beestje) en de jdbc-odbc bridge van Sun uit jdk1.4. Maar wie is nu verantwoordelijk voor die updatable resultset? Is dat de bridge, is het de odbc->sybase driver?

Ik dacht dat het ook aan mijn db kon liggen maar ik controleer of de db driver die functionaleit ondersteunt (na maken resultset even getConcurrency ophalen) en hij is wel updatable. Ik heb ook nog aan de metadata gevraagd of deze functie wordt ondersteunt en die zegt ook dat het wel snor zit.

mijn code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    public ResultSet createFreshResultSet()throws TableException{
        try{
            RealDatabase realDatabase = m_database.getRealDatabase();
            if(realDatabase.isConnectionClosed())
                realDatabase.makeConnection();
            
            Connection connection = realDatabase.getConnection();
            
            if(connection.getMetaData().supportsResultSetConcurrency( ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE)){
                System.out.println("does supports insensitive and updatable");
            }else{
                System.out.println("does not supports insensitive and updatable");
            }
            
            
            if(m_resultSet!=null)
                m_resultSet.close();
            
            String prepStmtString = createPreparedStmtString();
            
            Statement stmt = m_database.getRealDatabase().getConnection().createStatement(
                ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_UPDATABLE
            );
            
            m_resultSet =  stmt.executeQuery(prepStmtString);
        
            if(m_resultSet.getConcurrency() == ResultSet.CONCUR_UPDATABLE){
                System.out.println("Updatable");
            }else{
                System.out.println("Read only");
            }
            
            
        //  stmt.close();
            
            return m_resultSet;
        }catch(SQLException e){
            MultiDatabase.printSQLException(e);
            e.printStackTrace();
            throw new TableException(e.getMessage(),e);
        }
        catch(RealDatabaseException e){
            throw new TableException(e);
        }
    }

Misschien dat iemand die hier wat ervaring mee heeft me even kan uitleggen wat ik fout doe.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 23 februari 2002 13:39 schreef Alarmnummer het volgende:
Het is me eerlijk gezegd ook een beetje onduidelijk wie voor die functionaliteit verantwoordelijk is. Ik gebruik op dit moment een sybase 5 database (oud beestje) en de jdbc-odbc bridge van Sun uit jdk1.4. Maar wie is nu verantwoordelijk voor die updatable resultset? Is dat de bridge, is het de odbc->sybase driver?
Misschien dat je es sybase 12.5 kan installeren simpelweg om te testen of het daar wel mee werkt? ;)

jdbc-odbc -- odbc-sybase is ook al een stap extra die daarvoor in de weg kan zitten. Dus misschien dat je ook sybase's eigen JDBC classes kan gebruiken (zijn die eigenlijk wel geschikt voor oude db-versies?)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Deze db is een demo die werd ooit eens bijgeleverd bij visual cafe 2.0 :) Hij heeft standaard geen jdbc driver van zichzelf. Maar ik vraag me af wie nou verantwoordelijk is voor dat updaten?? Ik zie op de sunsite staat dan mensen met een access db het wel voor elkaar krijgen om updatable resultset te krijgen. En access staat nou niet bepaald bekend als vriendelijk/modern voor een java programmeur omdat functies gewoon niet ondersteunt worden. Daarom dacht/denk ik dat die sun jdbc-odbc driver er misschien verantwoordelijk kon zijn?

En ik ben al op zoek naar een nieuwe db (liefst gratis) die wel modern is. Alhoewel mijn sybase me verder uitstekend bevalt.

En het allervervelendste is dat ik dus verder geen foutmeldingen krijg. Mijn connection die heb ik maar op autocommit gezet en ik heb na een update zelfs een commit gedaan:
code:
1
2
3
4
int intValue = Integer.parseInt(stringValue);
m_resultSet.updateInt(columnIndex,intValue);
m_resultSet.updateRow();
connection().commit();      //voor veiligheid

En hij heeft niets in de db veranderd.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
en zelfs bij sun zeggen ze dat de bridge die functionaliteit in zich heeft:
9.4 New JDBC 2.0 API Features Supported by the Bridge

The JDBC-ODBC Bridge driver in this release supports the following new features in the JDBC 2.0 API:

batch updates
updatable result sets
scrollable result sets
the new BigDecimal methods
the new Date, Time, and Timestamp methods

The current release of the Bridge supports multi-threaded ODBC drivers and contains numerous bug fixes.
http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/bridge.doc.html

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik zie trouwens dat sybase een odbc 2.0 driver heeft terwijl ze bij sun zeggen dat die bridge alleen is getest met een odbc 3.0 driver. Ik zal hier even naar kijken.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Als je een linuxbakje kan gaan draaien is Sybase-11.9.2 helemaal niet slecht en best wel gratis.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op zaterdag 23 februari 2002 14:12 schreef Glimi het volgende:
Als je een linuxbakje kan gaan draaien is Sybase-11.9.2 helemaal niet slecht en best wel gratis.
Ik heb deze week net een sparcstation 10 gekregen die ik voor dit soort dingen ga misbruiken ;) Maar de applicatie waaraan ik werk doe moet op allerlei soorten databases werken. Mijn grootste vraag is waarom het niet werkt? Want dan kan ik er bij andere databases ook mee uit de voeten. Weet ik tenminste waar het aan ligt.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik heb ff noorderwind (demo db uit access) erop aangesloten en ik krijg nog steeds foutmeldingen. Hij zit te zeuren over een 'error in row'. En nu zal iedereen denken, maar dan sta je niet op de goeie row! Helaas, dat sta ik wel omdat ik eerst even uitlees welke info in die cell van de resultset staat en ik sta echt op de goeie. Als ik na het editen (wat mislukt) verderga dan krijg ik allerlei rotzooi in mijn resultset, allemaal adressen.
Pagina: 1