isLast() Probleme bei Pervasive

Reggie

Aktives Mitglied
Tach zusammen,

Ich habe ein problem mit Pervasive und der Methode isLast() im ResultSet. Obwohl das ResultSet ein Type_Forward_Only ist wirft es eine Exception "Incorrect Cursor Type". Ich hab das ganze mal gegoogelt aber nichts gefunden. Hat jemand eine Idee?

isLast wird auf zeile 36 aufgerufen.

Hier mein Code:
Java:
Connection conn = (Connection) Def.getConn();
        Statement st;
        ResultSet rs;
        String[] DKOList = new String[]{"13", "106"};

        try {
            st = (Statement) conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            rs = (ResultSet) st.executeQuery("Select Produkt.\"_USERFIELD8\" as SpezialNR, Produkt.\"_USERFIELD1\" as DZNR, Produkt.\"_USERFIELD2\" as EZNR, Produkt.\"_USERFIELD3\" as VERPNR, "
                    + "ADRE_AKT.LINK, DEBI_DST.DNR, PUBL_AKP.ADR_INR, PUBL_ADR.EMAIL, "
                    + "Kontakt.\"_USERFIELD8\" as Tagung, Kontakt.\"_USERFIELD7\"as Spezial, Kontakt.\"_USERFIELD3\" as DZ, Kontakt.\"_USERFIELD4\" as EZ, Kontakt.\"_USERFIELD5\" as Verpf "
                    + "from ADRE_AKT "
                    + "join ADRE_AKT_EXT as Aktiv on (ADRE_AKT.RECNUM$ = Aktiv.PARENT_RECNUM$) "
                    + "join ORDE_ADO on(ADRE_AKT.LINK = ORDE_ADO.ART_NRA) "
                    + "join ORDE_ADO_EXT as Produkt on (ORDE_ADO.RECNUM$ = Produkt.PARENT_RECNUM$) "
                    + "join PUBL_ADR on (ADRE_AKT.ADR_INR = PUBL_ADR.INR) "
                    + "join PUBL_AKP on (PUBL_ADR.INR = PUBL_AKP.ADR_INR and PUBL_AKP.FREI2SW = '1') "
                    + "Join PUBL_AKP_EXT as Kontakt on (PUBL_AKP.RECNUM$ = Kontakt.PARENT_RECNUM$) "
                    + "left outer join DEBI_DST on (PUBL_ADR.INR = DEBI_DST.INR) "
                    + "Where ADRE_AKT.LINK = '" + CourseNr + "' and ADRE_AKT.AKA_ID ='KITA'" + AdreCheck);
            switch(rs.getType()){
                case 1003: System.out.println("TYPE_FORWARD_ONLY");break;
                case 1004: System.out.println("TYPE_SCROLL_INSENSITIVE");break;
                case 1005: System.out.println("TYPE_SCROLL_SENSITIVE");break;
            }
            float DZMenge = 0;
            float EZMenge = 0;
            float Verpf = 0;
            float Tagung = 0;
            float Spezial = 0;
            while (rs.next()) {
                if (rs.getInt("DEBI_DST.DNR") == 0) {
                    fail++;
                    fail2.add(rs.getString("ADR_INR"));
                }
                if (fail == 0) {
                    if ((tmpAdre != rs.getInt("ADR_INR") && tmpAdre != 0)|| rs.isLast()) {
                        String[] DKOWerte = new String[]{rs.getString("DNR"), rs.getString("LINK")};
                        try {
                            buffy.write(",N,DKO");
                            buffy.newLine();
                            for (int a = 0; a < DKOList.length; a++) {
                                buffy.write(",D,DKO," + DKOList[a] + "," + DKOWerte[a]);
                                buffy.newLine();
                            }
                            buffy.write(",S");
                            buffy.newLine();
                            if (Tagung > 0) {
                                buffy.write(",N,DPO");
                                buffy.newLine();
                                buffy.write(",D,DPO,6," + "A");
                                buffy.newLine();
                                buffy.write(",D,DPO,7," + rs.getString("LINK"));
                                buffy.newLine();
                                buffy.write(",D,DPO,12," + String.valueOf(Tagung));
                                buffy.newLine();
                                buffy.write(",S");
                                buffy.newLine();
                            }
                            if (DZMenge > 0) {
                                buffy.write(",N,DPO");
                                buffy.newLine();
                                buffy.write(",D,DPO,6," + "B");
                                buffy.newLine();
                                buffy.write(",D,DPO,7," + rs.getString("DZNR"));
                                buffy.newLine();
                                buffy.write(",D,DPO,12," + String.valueOf(DZMenge));
                                buffy.newLine();
                                buffy.write(",S");
                                buffy.newLine();
                            }
                            if (EZMenge > 0) {
                                buffy.write(",N,DPO");
                                buffy.newLine();
                                buffy.write(",D,DPO,6," + "B");
                                buffy.newLine();
                                buffy.write(",D,DPO,7," + rs.getString("EZNR"));
                                buffy.newLine();
                                buffy.write(",D,DPO,12," + String.valueOf(EZMenge));
                                buffy.newLine();
                                buffy.write(",S");
                                buffy.newLine();
                            }
                            if (Verpf > 0) {
                                buffy.write(",N,DPO");
                                buffy.newLine();
                                buffy.write(",D,DPO,6," + "B");
                                buffy.newLine();
                                buffy.write(",D,DPO,7," + rs.getString("VERPNR"));
                                buffy.newLine();
                                buffy.write(",D,DPO,12," + String.valueOf(Verpf));
                                buffy.newLine();
                                buffy.write(",S");
                                buffy.newLine();
                            }
                            if (Spezial > 0) {
                                buffy.write(",N,DPO");
                                buffy.newLine();
                                buffy.write(",D,DPO,7," + rs.getString("Spezial"));
                                buffy.newLine();
                                buffy.write(",D,DPO,6," + "B");
                                buffy.newLine();
                                buffy.write(",D,DPO,12," + String.valueOf(Verpf));
                                buffy.newLine();
                                buffy.write(",S");
                                buffy.newLine();
                            }
                        } catch (IOException ex) {
                            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                        }
                        DZMenge = 0;
                        EZMenge = 0;
                        Verpf = 0;
                        Tagung = 0;
                        Spezial = 0;
                        if (canc == 0) {
                            Runtime rt = Runtime.getRuntime();
                            Process z;
                            try {
                                //if (rs.getString("PUBL_ADR.EMAIL").equals("")) {
                                z = rt.exec(Def.getAbaview().getAbsolutePath() + " -q1='" + CourseNr + "' -q2='" + AdreNr == null ? rs.getString("PUBL_ADR.INR") : AdreNr + "' -p " + Def.getReport().getAbsolutePath());
                                z.waitFor();
                                //} else {
                                //    z = rt.exec(Def.getAbaview().getAbsolutePath() + " -q1='" + CourseNr + "' -q2='" + AdreNr == null ? rs.getString("PUBL_ADR.INR") : AdreNr + "' -pMailTo:" + rs.getString("PUBL_ADR.EMAIL") + " " + Def.getMailReport().getAbsolutePath());
                                //    z.waitFor();
                                //}


                            } catch (InterruptedException ex) {
                                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IOException ex) {
                                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                    Tagung = Tagung + rs.getFloat("Tagung");
                    Spezial = Spezial + rs.getFloat("Spezial");
                    Verpf = Verpf + rs.getFloat("Verpf");
                    EZMenge = EZMenge + rs.getFloat("EZ");
                    DZMenge = DZMenge + rs.getFloat("DZ");
                    tmpAdre = rs.getInt("ADR_INR");
                }
            }
            st.close();
            conn.close();
            try {
                buffy.close();
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
 

Michael...

Top Contributor
Vielleicht unterstützt der Datenbanktreiber diese Methode nicht. Was für eine Exception tritt denn auf und wie lautet die genaue Fehlermeldung?
 

Reggie

Aktives Mitglied
TYPE_FORWARD_ONLY
20.10.2010 09:49:05 auftragsschnittstelleKirhgemeindetagungen.Main main
SCHWERWIEGEND: null
java.sql.SQLException: Incorrect cursor type
at com.pervasive.jdbc.lna.ForwardReadResultCache.isRow(ForwardReadResult
Cache.java:190)
at com.pervasive.jdbc.v2.ResultSet.isLast(ResultSet.java:729)
at auftragsschnittstelleKirhgemeindetagungen.Main.main(Main.java:114)
 
G

Gast2

Gast
Was möchtest du mit dem Konstrukt hier denn erriechen?

Java:
  if (rs.getInt("DEBI_DST.DNR") == 0) {
                    fail++;
                    fail2.add(rs.getString("ADR_INR"));
                }
                if (fail == 0) {
                    if ((tmpAdre != rs.getInt("ADR_INR") && tmpAdre != 0)|| rs.isLast()) {

Das sieht mir eher so aus als wenn du einen ganz bestimmten Datensatz suchst? Das sollte man dann aber direkt in der Datenbank mit SQL filtern. Versuch doch bitte mal zu beschreiben was das eigentlich soll?

Zweitens:

Dein Methode ist viel zu lang! Der code ist toal unübersichtlich, versuch das mal etwas besser zu kapseln und in weitere Methoden auszulagern. Refactoring heißt das Zauberwort:
Refactoring

Drittens:
Du solltest besser ein PreparedStatement verwenden als den Query aus Strings zusammenzukonkatenieren.
 

Reggie

Aktives Mitglied
Danke für die Feedbacks erstmal!

Ich weiss der Code ist ziemlich chaotisch. Musste einfach schnell her für eine einfach Schnittstelle, es wurde viel nachgebessert und geplant wurde vorher auch nichts.

Mit diesem Konstrukt muss ich erreichen das verschiedene Datensätze miteinander addiert werden und sobald der Kunde wechselt das als ein Datensatz abgespeichert wird. Das isLast ist dazu da das bei letzten Datensatz das ganze weitergegeben wird obwohl ja kein neuer Kunde mehr kommt.

Ist Flickwerk und wird Flickwerk bleiben, ich denke auch das ich das ohne isLast() auch irgendwie lösen, nur möchte ich gerne wissen warum diese Methode nicht funktioniert.

Edit: Bei der if null abfrage geht es darum ob ein Debitor eröffnet wurde auf der Adresse. falls nicht soll er nurnoch die Adressnummern ohne Debitor sammeln. Da ohne Debitor keine Rechnung versendet werden kann und diese dann mit Standartwerten eröffnet werden.

PreparedStatement kann ich leider nicht verwenden da ich je nach Parameter nach einer bestimmten Adressnummer suche oder sonst alle haben will. War für mich die beste Lösung am das ganze nicht 2 mal schreiben zu müssen.
 
Zuletzt bearbeitet:

Reggie

Aktives Mitglied
Also nach intensiver Recherche habe ich den Fehler gefunden. Die ResultSet Klasse von Java kann isLast nur ausführen wenn das resultSet vom Typ Forward Only ist. Bei Pervasive jedoch muss es der Typ Scroll insensitiv sein.

Vielen Dank für die Wortmeldungen und "Sorry" für den unübersichtlichen Code.

Have a Nice Day!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Probleme bei der Definition von LC_COLLATE Datenbankprogrammierung 2
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
Kirby.exe Probleme mit docker-compose.yml Datenbankprogrammierung 4
B Probleme mit Datenbankverbindung Datenbankprogrammierung 2
N java SQL JAR - Probleme Datenbankprogrammierung 18
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
T Oracle Probleme bei getTableName Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
D Probleme bei Einsteiger Aufgabe SQL Datenbankprogrammierung 2
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
H Probleme mit Unicodedarstellung in Derby DB Datenbankprogrammierung 1
M MySQL probleme beim "Generate Tables from Entities" Datenbankprogrammierung 9
L Probleme mit DriverManager.getConnection(..) - Endlosschleife, Java Absturz, Keine Exception Datenbankprogrammierung 4
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
P Probleme mit meinem 1. Hibernate Beispiel Datenbankprogrammierung 3
W Probleme mit AND und OR Datenbankprogrammierung 5
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
Gossi CallableStatement Probleme Datenbankprogrammierung 8
D Probleme bei der Erzeugung einer Tabelle Datenbankprogrammierung 15
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
R Derby/JavaDB Insert Statement Probleme Datenbankprogrammierung 14
L Derby/JavaDB Derby macht Probleme Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
M Probleme mit Triggering Datenbankprogrammierung 2
F DB2 Probleme mit dem DriverManager Datenbankprogrammierung 4
S Derby/JavaDB OpenJPA, @oneToMany und Probleme Datenbankprogrammierung 2
I MySQL Probleme mit kyrillischen Zeichen Datenbankprogrammierung 2
A Derby/JavaDB Probleme beim Einbinden Datenbankprogrammierung 2
S Probleme mit INSERT Befehl Datenbankprogrammierung 11
S Probleme mit localhost Datenbankprogrammierung 14
M Oracle Probleme mit dem anbinden einer Oracle 10g Datenbank Datenbankprogrammierung 27
J MySQL Hibernate: Probleme beim Speichern von OneToMany - Datensätzen Datenbankprogrammierung 2
P Hibernate -> Probleme bei n:m-Relation und JUnit Datenbankprogrammierung 10
J Probleme mit Datenbankzeiger Datenbankprogrammierung 19
A Probleme mit auf DB2 Express zugreiffen Datenbankprogrammierung 6
N Probleme beim Aufruf aus der DB Datenbankprogrammierung 7
M Probleme bei Select in Schleife Datenbankprogrammierung 7
G Probleme mit Datenbankanbindung Datenbankprogrammierung 3
R Probleme mit Insert Datenbankprogrammierung 2
P Probleme mit Oracle Timestamp Datenbankprogrammierung 3
klattiator Hibernate - Probleme bei Konfiguration Datenbankprogrammierung 3
F Probleme mit entfernter DB und Hibernate Zeichensatz Datenbankprogrammierung 3
G Probleme mit der Schnittstelle H1bernate/Eclipse Datenbankprogrammierung 6
A Probleme mit Jar-File in ein Jar-File Datenbankprogrammierung 8
O Derby Performance Probleme? Datenbankprogrammierung 4
V Probleme beim Öffnen "einiger" SuperbaseTabellen p Datenbankprogrammierung 8
G Probleme beim Methodenaufruf einer EJB Datenbankprogrammierung 10
ARadauer hibernate probleme Datenbankprogrammierung 13
Y Probleme mit H2 und Primary Key Datenbankprogrammierung 4
D Probleme mit mysql-Connection Datenbankprogrammierung 10
G INNODB backup probleme Datenbankprogrammierung 2
S Probleme mit statement.close() Datenbankprogrammierung 10
A Probleme beim Schreiben in eine CSV-Datei aus einer H2-DB Datenbankprogrammierung 2
G Probleme mit Laden des JDBC-Treiber in HSQLDB Datenbankprogrammierung 2
T Probleme mit Date in H2 Datenbank Datenbankprogrammierung 2
4 Probleme mit Select abfrage Datenbankprogrammierung 4
N Probleme mit Access-DB bei einem Webserver Datenbankprogrammierung 5
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
R Probleme mit Datensätzen in MySql DB Datenbankprogrammierung 3
B Oracle Driver Probleme Datenbankprogrammierung 2
I Probleme bei MySQL - Replikation Datenbankprogrammierung 2
R Probleme mit ausführbarem Jar Archiv Datenbankprogrammierung 9
F Probleme mit Jar Datei Datenbankprogrammierung 3
S String probleme Datenbankprogrammierung 3
R Probleme mit der Verbindung zum localhost Datenbankprogrammierung 12
S Probleme bei der Installation von MySQL 5.0 Datenbankprogrammierung 4
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
G Probleme mit Access und Join Datenbankprogrammierung 3
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
M Daten von MySQL nach MSSql probleme beim schreiben Datenbankprogrammierung 3
S JDBC-Anfänger und Probleme beim Treiberfinden etc. Datenbankprogrammierung 4
T Probleme beim Verbindungsaufbau zum SQL 2000 Datenbankprogrammierung 2
G Probleme mit Datenbankeinträge Datenbankprogrammierung 4
G Probleme mit Treiber (connector) Datenbankprogrammierung 20
thE_29 getBytes() - russland/bulgarien -- andere Codecs Probleme Datenbankprogrammierung 8
E Probleme mit JDBC und Executable-Jar Datenbankprogrammierung 2
G Probleme mit MySQL - Anmeldung Datenbankprogrammierung 2
P Probleme mit NullPointerException Datenbankprogrammierung 5
K MySQL: Probleme mit dem Verbinden per IP-Adresse Datenbankprogrammierung 6
T Probleme mit Datenbank Datenbankprogrammierung 6

Ähnliche Java Themen


Oben