datenbankverbindung macht ärger

tinella

Erfahrenes Mitglied
hi hallo

ich hab ein programm programmiert, welches aus zwei datenbanken daten herausfiltert, um diese danach formatiert in ein externes file zu speichern.
ich wäre damit fertig, doch am ende des programms gibts mir noch ne fehlermeldung aus (ich hab das so programmiert dass wenn die verbinung nicht gemacht werden kann das programm mir das zurückgibt).
komisch daran ist, dass ich nachheinander auf zwei datenbanken zugreiffe, die fehlermeldung mir aber nur für die eine (APV_DB) datenbank ausgibt! die meldung kommt erst am schluss, vorher funktioniert das ganze super.
ich habe das programm so aufgebaut, dass es mir für jeden datensatz welchen ich herausfilter eine neue verbinung aufmacht. (ja könnte besser sein ich weiss nur lasst bitte das jetzt mal das ist nicht das eigentliche problem..) nur macht das programm jetzt halt etwa 800 oder mehr verbindungen auf.

Code:
// Collect the readed out datas from the two databases.
public class APVCollectorData implements Persistence {
	// Initialize a list for datas called "apv_nr".
	List apvCollection = null;

	// Query (both databases) for readout only the apv_nr.
	private static final String ApQuery = "SELECT APV_NR FROM Attribut ORDER BY APV_NR";
	
	// Printinfo about statuf of loading.
	public static final void printInfo() {
		System.out.println("Loading...\n");
	}
    
    // Empty conctructor.
	public APVCollectorData() {
    }
	public void load() {
		// APV&ADD: Driver-Initialisation.
		String apv = "jdbc:odbc:APV";
		String add = "jdbc:odbc:ADD";
		// New Vector for datas bezD, bezF and bezI.
		apvCollection = new Vector();
		// Invoke conn() method from dbhandler.
		DBHandler.conn();
		// Connect-variables for databases.
		Statement command = null;
		Connection apvConn = null;
		Connection addConn = null;
		// Make connection to database for filter datas.
		try {
			apvConn = DriverManager.getConnection(apv);			command = apvConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			// Invoke query for filter apvNr.
			ResultSet resultSet = command.executeQuery(ApQuery);
			// Add data to the first place on resultSet.
			resultSet.beforeFirst();			
			// Take datas from database into resultSet.
			while (resultSet.next()) {
				 Integer value = new Integer(resultSet.getInt("APV_NR"));
				 //ERR: APVCollection apvData = new APVData(value.toString());	
				 APVData apvData = new APVData(value.toString());
				 apvCollection.add(apvData);
			}
			//System.out.println("Connect to the database 'ACC-DB66-8.mdb' sucessfully done.");
			// Connection close.
			apvConn.close();
		} catch (SQLException sqle) {
			System.err.println("Access to " + apv + " is denied. \n");
		}
		// Invoke conn() method from dbhandler.
		DBHandler.conn();	
		try {
			addConn = DriverManager.getConnection(add);
			command = addConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			// Invoke query for filter apvNr.
			ResultSet resultSet = command.executeQuery(ApQuery);
			// Add data to the first place on resultSet.
			resultSet.beforeFirst();
			// Take datas from database into resultSet.
			while (resultSet.next()) {
				String result = resultSet.getString("APV_NR");
				 //APVCollection apvData = new APVData(result);
				 APVData apvData = new APVData(result);
				 apvCollection.add(apvData);
			}
			//System.out.println("Connect to the database 'Additional.mdb' sucessfully done.");
			// Connection close.
			addConn.close();
		} catch (SQLException sqle) {
			System.err.println("Access to " + add + " is denied. \n");
		}
		//message: connection to the database closed!
		printInfo();
}
		public List getAPVList() {
		return apvCollection;
	}

	public void setAPVList(List list) {
		apvCollection = list;
	}
}

- könnte es sein, dass es eine maximale anzahl gibt der zu öffnenden datenbankverbindungen und mir deshalb einen fehler ausgibt?
- hat jemand ne idee an was das sonst noch so liegen könnte?

könnte sich das bitte jmd. mal angucken?


danke.
tinella
 
Die Fehlermeldung lautet folgendermassen:

Access to sun.jdbc.odbc.JdbcOdbcConnection@1cbda0a is denied.
Query SELECT "BEZEICHNUNG-D" , "BEZEICHNUNG-F" , "BEZEICHNUNG-I" FROM Attribut WHERE APV_NR = CircuitID
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
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)
at APVEntity.load(APVEntity.java:72)
at APVData.load(APVData.java:87)
at AnalyseAPVId.analyse(AnalyseAPVId.java:114)
at PropertyFileGenerator.run(PropertyFileGenerator.java:42)
at PropertyFileGenerator.main(PropertyFileGenerator.java:36)

Das ist das was ich bekomm. :confused:
 
Da ist auf jedem Fall etwas an deinem SQL falsch.

Entweder eines der abgerufenen Felder existiert nicht, oder die CircuitID.

Was ist die CircuitID? Eine Variable, sollte hier nicht der Wert der Variablen stehen?

Lass dir doch mal den Sql ausgeben, bevor er ausgeführt wird und teste ihn dann direkt.
 
Zuletzt bearbeitet:
Ich würde auch schätzen, dass da was mit dem SQL Statement in hinsicht mit dem Parameter count nicht in ordnung ist. Wie Bernd sagte, lass dir mal das SQL Statement komplett anzeigen und versuch dieses mal in einem SQL Client zu deiner DB ausführen zu lassen.

Grüsse

Torsten
 
Zurück