MS Access und Jarkarta POI

Chriss_07

Aktives Mitglied
Ich lasse eine Query über eine Access DB laufen und gebe die Daten in einem Excelsheet aus. Insgesamt 1100 Rows mit 16 Columns.
Dabei stürzt meine JAva SWT Anwendung mit folgender Fehlermeldung ab:
Java:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Zusätzliche Tabellen können nicht geöffnet werden.
	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(Unknown Source)

Ich habe mir den Durchlauf auch schon im Debug Modus angesehen und dabei festgestellt, dass mein ResultSet die Daten korrekt aufnimmt ( stimmt 100% mit einer Abfrage im SQL Developer überein), dann aber beim füllen des Excelsheets schmiert es ab.
Wenn ich die Query um weitere Einschränkungen erweitere, sodass die Datenmenge nicht mehr so groß wird, klappt der Export.
Kennt jemand ähnliche Probleme mit Access?
 
Zuletzt bearbeitet:
zeig mal deinen Code.. sieht für mich so aus als gehn dir die Resourcen aus.. zb Datenbank zeiger..

machst du mehrer ResultSets, Statements oder Connections auf?
 
Die Query sieht so aus:
Java:
public List<ExportManager> getDataExport(List<String> aList) throws SQLException {

		List<ExportManager> emList = new ArrayList<ExportManager>();

		try {

			String query = "SELECT * FROM touring WHERE ";

			if (aList.size() > 0) {
				for (int i = 0; i < aList.size(); i++) {
					query += aList.get(i);
					query += " AND ";
				}
			}

			query += "(STRASSE) AND " + "(ORT) AND " + "(PLZ);";

			ResultSet rs = getDb().createQuery(query);

			while (rs.next()) {
				buList.add(new ExportManager(rs));
			}
		} catch (SQLException e) {
			e.printStackTrace();

		}

		return emList;
	}

Die DB Connection:
Java:
		public static void main(String[] args) {
	
				new DBConnection();
	
			}
	
	public Connection getInstance() {
		if (conn == null)
			conn = new DBConnection().Connection();
		return conn;
	}
	
	public DBConnection(){
		try {
			conn = DriverManager.getConnection(
					"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
							+ getDbUrl(), dbUser, dbPW);
			
		} catch (SQLException e) {
		}

	public ResultSet createQuery(String queryString) throws SQLException {
		st = conn.createStatement();
		rs = st.executeQuery(queryString);
		return rs;
	}
	public void commitStatment() throws SQLException {
		conn.commit();
	}
	public void closeDBConnection() throws SQLException {
		conn.close();
	}
	public void closeResultSet() throws SQLException {
		rs.close();
	}
	public void closeStatement() throws SQLException {
		st.close();
	}
}
	}

Ja habe eben festgestellt, dass tatsächlich mehrere ResultSets offen sind und kein closeDB gemacht wird.
 
Zuletzt bearbeitet:
Hi, habe das gleiche Problem, dass ich viele ResultSets öffne.
Ich habe eine Rekursive Funktion, die mir einen Pfad - halt rekursiv - aus der Datenbank ausliest.
Aber ich weis nicht, wo ich die ResultSets die abgelaufen sind, schließen kann.
Kann mir vllt. wer helfen. Hier mein Code:

Java:
public static String searchUIDParent(String filename, String uid_parent, Connection conn, int magicCounter) {
		System.out.println("Counter: "+magicCounter);
		magicCounter++;
		System.out.println(filename);
		
		String sPath = "";
		String katPath = "";

		if (filename.contains("|||")) {
			String[] paths = filename.split("\\|\\|\\|");
			sPath = paths[0];
			katPath = paths[1];
		} else {
			sPath = filename;
		}
		ResultSet mrs = null;
		try {
			mrs = conn.createStatement().executeQuery("SELECT * FROM main WHERE uid = '" + uid_parent + "' and (type = 1 and subtype = 2)");
			while (mrs.next()) {
				
				if (sPath.contains("|||")) {
					String[] paths = filename.split("\\|\\|\\|");
					sPath = paths[0];
					katPath = paths[1];
				} 

				if (katPath.length() > 0) {
					sPath = searchUIDParent(mrs.getString("filename") + "/" + sPath + "|||" + mrs.getString("caption") + " > " + katPath, mrs.getString("uid_parent"), conn, magicCounter);
				} else {
					sPath = searchUIDParent(mrs.getString("filename") + "/" + sPath + "|||" + mrs.getString("caption"), mrs.getString("uid_parent"), conn, magicCounter);
				}
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
		if (katPath.length() > 0) {
			if (!sPath.contains("|||")){
			
			return sPath + "|||" + katPath;
			} else {
				
				return sPath;
			}
			
		} else {
			return sPath;
		}

	}

in Zeile 35 wird der gleiche Fehler geworfen:
" java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Zusätzliche Tabellen können nicht geöffnet werden. "
 
Zuletzt bearbeitet:

Zurück
Oben