Zum Inhalt springen

Probleme beim Zugriff auf Excel Dateien per JDBC-ODBC-Bridge


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

folgendes Problem. Ich habe eine Excel datei mit 4 Spalten und ca. 2000 Zeilen. Wenn ich jetzt mit untenstehendem Proggi auf das ExcelSheet per JDBC-ODBC-Bridge zugreife, dann bekomme ich ab dem Eintag der in der 858. Zeile null-Werte zurück. Keine Ahnung woran es liegt.


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;


/**
* @author T.Haberkern
*/
public class PhpArrayCreator
{
public PhpArrayCreator()
{
dbLogin();

String strTableName = "";
String strProductName = "";

for (int nIndex = 0; nIndex < 3; nIndex++)
{
switch (nIndex)
{
case 0: strTableName = "Kombi3Plus";
strProductName = "Kombi-3-plus";
break;
case 1: strTableName = "Kombi2Plus";
strProductName = "Kombi-2-plus";
break;
case 2: strTableName = "KombiF2";
strProductName = "Kombi-F-II";
break;
case 3: strTableName = "VerafixCool";
strProductName = "Verafix-Cool";
break;
}

String strLastDn = "0";
boolean bFirstTime = true;

System.out.println("$"+strTableName+" = array(");
try
{
String strSqlStatement = "SELECT DISTINCT * FROM [tblvalvesizing$] WHERE Productname='"+strProductName+"' ORDER BY DN";
ResultSet rsData = m_objStatement.executeQuery(strSqlStatement);

while (rsData.next())
{
String strDn = rsData.getString(2);
if (null != strDn)
{
if (strLastDn.compareToIgnoreCase(strDn) != 0)
{
if (false == bFirstTime)
{
System.out.println("\t),");
}
bFirstTime = false;
System.out.println("\t\""+strDn+" => array(");
strLastDn = strDn;
}

String strPre = rsData.getString(3);
strPre = strPre.replace(',', '.');

String strKv = rsData.getString(4);
strKv = strKv.replace(',', '.');

System.out.println("\t\tarray(\""+strKv+"\", \""+strPre+"\"),");
}
}

}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("\t)");
System.out.println(");");
System.out.println("");
}
}

public boolean dbLogin()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Properties connInfo = new Properties();
connInfo.put("user", user);
connInfo.put("password", password);
this.m_objConnection = DriverManager.getConnection(dbUrl, connInfo);
this.m_objStatement = this.m_objConnection.createStatement();
return true;
}
catch (Exception ex)
{
ex.printStackTrace();
return false;
}
}

public static void main(String[] args)
{
PhpArrayCreator runMainApp = new PhpArrayCreator();
}

private String dbUrl = "jdbc:odbc:MNG";
private String user = "";
private String password = "";
private Connection m_objConnection;
private Statement m_objStatement;
}
[/PHP]

Geschrieben

Also in den Zeilen 857-.. steht nix aussergewöhnliches. Spielt auch keine Rolle ob ich die Lösch. Die "neuen" Zeilen 858 usw. haben dann das gleiche Problem.

Und das weglassen des DISTINCTS bringt auch keine Besserung.

:confused:

Geschrieben

Hm, und was passiert wenn du in den ersten 800 Zeilen ein paar Zellen mit mehr Daten füllst, verschiebt sich dann der Abbruch?

Dann ist es irgendein internes Buffer Problem.

Der JdbcOdbcDriver ist allgemein nicht der stabilste.

Du kannst dir auch mal POI anschauen:

http://jakarta.apache.org/poi/index.html

Die haben eine HSSF Schnittstelle zu Excel.

Gruß Jaraz

Der volle Name von HSSF ist übrigens ganz nett. :D

Geschrieben

Heißt soviel wie: Horrible Spread Sheet Format.

:-)

Aber POI hilft mir nicht, weil ich da die Selektion der Dataen selbst vornehmen muss (siehe die Querys in meinem Beispiel)

Geschrieben
Original geschrieben von Habi

Aber POI hilft mir nicht, weil ich da die Selektion der Dataen selbst vornehmen muss (siehe die Querys in meinem Beispiel)

Nun ja, wenn es bei 2000 Datensätzen oder <10000 bleibt, würde ich alles einlesen und mit Java bearbeiten. Du könntest aber bei mehr Datensätzen auch alles z.B. in eine hsqldb einlesen und dann damit arbeiten. Ist alles besser als mit ODBC auf Excel zuzugreifen. *mich schauderts alleine bei dem Gedanken*

Gruß Jaraz

Geschrieben
Original geschrieben von Jaraz

Ist alles besser als mit ODBC auf Excel zuzugreifen. *mich schauderts alleine bei dem Gedanken*

:D Prinzipiell schon richtig. Ich würde ja nieeee auf Excel zurückgreifen, wenns nicht die einfachste Lösung wäre

Das ganze Proggi wird allerdings nur 2-3 mal im Jahr ausgeführt. Die Daten werden immer als Excel File geliefert (vom Kunde). Das Progggi wandelt diese Daten nur in PHP-Arrays um (siehe Programm).

Da möchte ich eigentlich nicht den wahnsinns-Aufwand treiben :rolleyes:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...