Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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]

Hi,

was steht in den Zeilen 857-859.

Läuft das ganze ohne DISTINCT durch?

Gruß Jaraz

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:

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

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)

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

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:

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.