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:

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...