PDA

View Full Version : Java-Fehlermeldung: Descriptor index not valid.



Seiten : [1] 2

hartmuth
24-06-13, 08:42
Hallo

Seit ca. zwei Monaten übertrage ich für eine Schnittstelle den Inhalt einer Textdatei in eine Datei auf AS400, die nur aus EINEM Feld besteht, um diese Daten dort weiterzuverarbeiten.

Obwohl beide Seiten beteuern, nichts am Programm geändert zu haben, kommt seit Dienstag voriger Woche folgende Fehlermeldung:
Descriptor index not valid.

Ein konkreter Datensatz hat z.b. folgenden Inhalt:
AU0000289369002013061800160801SAM GmbH., Best.Nr.: 70047867 an Produktion übergeben KB Hr. Mosshammer Martin 20130619 2000 03000140400 Grundner Klaus nicht def. 00000000 0662/6588

Ich weiß mir keinen Rat mehr. Vor allem finde ich nicht schlüssig heraus, was die Fehlermeldung in diesem Zusammenhang wohl besagt

Vielen Dank im Voraus für eure Hilfe.

Fuerchau
24-06-13, 08:44
Dazu wäre die Codezeile, bei dem der Fehler auftritt nicht unwichtig.

mk
24-06-13, 09:19
Hallo,

eine Beschreibung wie Du die Daten importierst wäre
auch hilfreich.

Gruß
Michael

hartmuth
24-06-13, 09:49
Auf die simpelste Weise erfolgt der Import:

Textdatei Zeile für Zeile durchlesen
--------------

// Datei mit dem betreffenden Namen Zeile für Zeile
// lesen den Inhalt jeder Zeile mit
// writeAS400ToDB(Zeileninhalt) verarbeiten
// Open the file for reading
PreparedStatement insert = null;
BufferedReader br = null;
try
{
br = new BufferedReader(new FileReader(file));
insert = m_connection
.prepareStatement(genInsertString(sTableName));
String line;
int lineNr = 1;
while ((line = br.readLine()) != null)
{ // while loop begins here
log.info(lineNr + ":" + line.trim());
insert.setString(1, line.trim());
insert.executeUpdate();
lineNr++;
} // end while
// end try
} catch (SQLException e)
{
log.error(e);
} catch (IOException e)
{
log.error(e);
} finally
{
try
{
if (br != null)
{
br.close();
}
if (insert != null)
{
insert.close();
}
} catch (Exception e)
{
log.error(e);
}
------

Insert-Anweisung generieren
------------
public String genInsertString(String sTableName)
{
StringBuffer sb = new StringBuffer();
sb.append("INSERT INTO ");
sb.append(sTableName);
sb.append(" (FELD) VALUES ('");
sb.append("?");
sb.append("')");
String query = sb.toString();
return query;
}
---------

Wie eine Zeile aussieht, habe ich ja vorhin gezeigt.
Also überhaupt nichts "Aufregendes"

mk
24-06-13, 10:08
HI,

da müssen aber noch weitere Fehlerhinweise vorhanden sein.
Java protokolliert wo die Exception stattgefunden hat.

BenderD
24-06-13, 10:31
... verwende mal Parameter Markers, der String könnte Dein SQL Statement kaputt machen (der sogenannte O'Hara Effekt).

D*B

hartmuth
24-06-13, 10:51
Ich verwendet Parameter -Markers

Und was mich so irritiert. An der Klasse wurde nichts geändert?!?!

try
{
br = new BufferedReader(new FileReader(file));
log.info(lineNr + ":" + line.trim());
...
insert.setString(1, line.trim());
insert.executeUpdate();
...
lineNr++;
} // end while
// end try

Fuerchau
24-06-13, 11:38
An der Klasse muss was geändert worden sein:

sb.append(" (FELD) VALUES ('");
sb.append("?");
sb.append("')");

Parametermarker in Hochkomma ist eine Konstante!!!!

sb.append(" (FELD) VALUES (?)");

wäre korrekt.

mk
24-06-13, 11:51
HI,

warum eigenmtlich ein Javaprogramm.

Ein CPYFRMIMPF würde vielleicht auch funktionieren.
Gruß
Michael

Fuerchau
24-06-13, 12:27
In diesem Fall: nicht nur vielleicht :).