Hallo,
ich bin am verzweifeln. Seit Stunden versuche ich ein Java Programm zu schreiben, dass mir Punkte in eine Geodatenbank importiert. Wenn ich es per Hand eingeben, dann funktioniert es, aber wenn ich es über mein Java Programm versuche kommt der Fehler "Ungültiger Spaltenindex" und ich finde einfach nicht meinen Fehler. ;(
Meine Quellcode sieht momentan wie folgt aus:
Erst habe ich das Statement so gebildet wie in der manuellen Eingabe und dann mit JGeometry. Bei beiden meckert er.
ich bin am verzweifeln. Seit Stunden versuche ich ein Java Programm zu schreiben, dass mir Punkte in eine Geodatenbank importiert. Wenn ich es per Hand eingeben, dann funktioniert es, aber wenn ich es über mein Java Programm versuche kommt der Fehler "Ungültiger Spaltenindex" und ich finde einfach nicht meinen Fehler. ;(
Meine Quellcode sieht momentan wie folgt aus:
Java:
public void DATImport() throws ClassNotFoundException, SQLException, IOException
{
try{
Connection con = ConnectDB();
PreparedStatement pstmt_punkte = null;
String sql_punkte = "INSERT INTO dat_tb "
+ "(pkt_id, pkt_art, zusatz, zeitstempel, point) "
+ "VALUES ("
+ "(SELECT MAX(pkt_id)+1 from dat_tb), "
+ "?, ?, to_date('?', 'dd.mm.yyyy hh24:mi:ss'), "
+ "?)";
pstmt_punkte = con.prepareStatement(sql_punkte);
File[] files = null;
JFileChooser chooser = new JFileChooser();
chooser.addChoosableFileFilter(new FileFilter() {
public boolean accept(File f) {
if (f.isDirectory()) return true;
return f.getName().toLowerCase().endsWith(".dat");
}
public String getDescription () { return "DAT"; }
});
chooser.setMultiSelectionEnabled(true);
if (chooser.showOpenDialog(null) ==
JFileChooser.APPROVE_OPTION)
{
files = chooser.getSelectedFiles();
}
// JFileChooser fc = new JFileChooser();
// int returnVal = fc.showOpenDialog(null);
//
// if (returnVal == JFileChooser.APPROVE_OPTION)
// {
// file=fc.getSelectedFile();
// }
for(File file : files)
{
if(file != null)
{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
int bytesRead =0,
progress = 0;
long length = file.length();
float teiler = length / 100;
status.setMaximum(Math.round(teiler));
String line;
while ((line = br.readLine()) != null) {
Messdaten a = new Messdaten(0,0, 0, 0, 0, 0, null);
bytesRead = bytesRead + line.length();
progress = bytesRead / 100;
status.setValue(progress);
StringTokenizer tok = new StringTokenizer(line, ";");
String s1 = tok.nextToken();
a.rw = Double.valueOf(s1.replace(',', '.'));
String s2 = tok.nextToken().trim();
a.hw = Double.valueOf(s2.replace(',', '.'));
String s3 = tok.nextToken().trim();
a.h = Double.valueOf(s3.replace(',', '.'));
String s4 = tok.nextToken().trim();
a.pkt_art = Integer.valueOf(s4);
a.zeitstempel = tok.nextToken().trim();
JGeometry geom = JGeometry.createPoint(new double[]{a.rw,a.hw,a.h}, 3, 31468);
pstmt_punkte.setInt(1, a.pkt_art);
pstmt_punkte.setInt(2, a.zusatz);
pstmt_punkte.setString(3, a.zeitstempel);
pstmt_punkte.setObject(4, JGeometry.store(geom,con));
pstmt_punkte.execute();
}
status.setValue(Math.round(teiler));
}
}
pstmt_punkte.close();
con.close();
}catch( Exception ex ) {
System.out.println(ex);
errorMassage(null, ex);
}
}
Erst habe ich das Statement so gebildet wie in der manuellen Eingabe und dann mit JGeometry. Bei beiden meckert er.
Zuletzt bearbeitet: