Archief - [JAVA] Databse updaten werkt niet.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Shotterke

Legacy Member
Ik ben bezig aan een project en ik moet bij een bepaald onderdeel mijn database updaten:

Wanneer een klant iets selecteert moet de checkbox in de database geupdate worden in checked.

Ik heb de volgende code geschreven:

Code:
public void statusAanpassen(int idResource)
{
	
	Connection connection = PersistentieController.getInstance().getConnection();

	try {
		
	    String query = "UPDATE tblResources SET Status = ? WHERE tblResources.idResource= ?";
	    PreparedStatement pstmt = connection.prepareStatement(query); 
	    pstmt.setBoolean(1, true); 
	    pstmt.setInt(2, idResource); 
	    pstmt.executeUpdate();
	}
	catch (SQLException e) 
	{	
		e.printStackTrace();
	}
}

Nu kan ik geeft hij geen enkele fout bij het uitvoeren maar toch verandert er niets in mijn database.

Andere dingen zoals deleten of toevoegen in mijn database werkt wel maar het updaten niet. :(

Cycloon

Legacy Member
daigon zei:
doe je een commit van je bewerking?

commit is enkel nodig als je een transactie uitvoert wat hier niet het geval is (alhoewel dat niet 100% duidelijk, het is te zien wat die PersistentieController nog uitvoert met de verbinding).

Shotterke

Legacy Member
Ik zal het effe uitleggen. :p

Degene die de computer gebruikt kiest een tafel en wijst hieraan een klant toe.
Daardoor moet de database ge-update worden dat deze tafel niet meer vrij is. (checkbox op true zetten).

En in de persistentieController gebeurt er niets met de connectie. Voor de connectie hebben we een aparte class in de persistentielaag.

Code:
package persistentie;

import java.sql.DriverManager;
import javax.swing.JOptionPane;
import java.sql.SQLException;
import java.sql.Connection;
public class Connectie {

	// JDBC driver name and database UR
	private static final String JDBC_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";

	private static final String DATABASE_URL = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ= Snooker_gr51";


	
	//private static final String DATABASE_URL = "jdbc:odbc:MS Access-database;DBQ=books";

	// declare Connection for accessing and querying database
	private Connection connection;

	/**
	 * @directed true
	 */

	// constructor connects to database
	public Connectie() {
		// connect to database books 
		try {
			// load database driver class
			Class.forName(JDBC_DRIVER);

			// establish connection to database
			connection = DriverManager.getConnection(DATABASE_URL);

		} catch (SQLException sqlException) {
			JOptionPane.showMessageDialog(null, sqlException.getMessage(),
					"Database Error", JOptionPane.ERROR_MESSAGE);

			System.exit(1);
		}
		// detect problems loading database driver
		catch (ClassNotFoundException classNotFound) {
			JOptionPane.showMessageDialog(null, classNotFound.getMessage(),
					"Driver Not Found", JOptionPane.ERROR_MESSAGE);

			System.exit(1);
		}
	}

	public void closeConnection() {
		try {
			connection.close();
		}

		// handle exceptions closing statement and connection
		catch (SQLException sqlException) {
			JOptionPane.showMessageDialog(null, sqlException.getMessage(),
					"Database Error", JOptionPane.ERROR_MESSAGE);

			System.exit(1);
		}
	}

	public Connection getConnection() {
		return connection;
	}
}

daigon

Legacy Member
Cycloon zei:
commit is enkel nodig als je een transactie uitvoert wat hier niet het geval is (alhoewel dat niet 100% duidelijk, het is te zien wat die PersistentieController nog uitvoert met de verbinding).

een commit van de database is wel nodig als je updates doet op tabellen. bij DDL queries wordt dit impliciet gedaan en bij DML queries niet als autocommit niet op staat. Er is ook niet duidelijk of deze connectie naar de database open blijft of geclosed wordt of terug in een connection pool komt.

Probeer eens connection.commit(); en kijk dan eens in je database.

Cycloon

Legacy Member
daigon zei:
een commit van de database is wel nodig als je updates doet op tabellen. bij DDL queries wordt dit impliciet gedaan en bij DML queries niet als autocommit niet op staat.

Dat is dan ook wat ik zei...

Anyway, hij heeft net de code daar gezet en daaruit blijkt dat autocommit niet op false staat en een commit doen dus niet veel zal veranderen.

Het probleem lijkt mij gewoon dat er geen rows worden gevonden om te updaten door een foutieve where clausule ofzo.

Shotterke

Legacy Member
Het was inderdaad nogal een stomme fout waar ik natuurlijk niet aan gedacht had.
Ik was mijn connectie vergeten sluiten. :$

Ice

Legacy Member
Als ik zo'n code zie (en zo'n vragen lees) vraag ik mij toch enkele dingen af.
- Waarom het wiel altijd opnieuw uitvinden? (tenzij dat dit uw eerste db code is, gebruikt ge normaal een simpel db mapping frameworkske)
- Als je echt alles zelf wil doen, doe het dan deftig en zet geen GUI code in uw db layer
- Kies een taal voor uw code en blijf daarbij cfr PersistentieController <-> getConnection
- Kies deftige namen voor uw methoden / attributen een attribuut status met TRUE/ FALSE zegt helemaal NIETS, noem het dan 'occupied' ofzo

WHiSPy

Legacy Member
Zoek eens best practices op qua sluiten van connectie, resultset, etc? Dat is een hele boterham qua try-catch-finally statements die je daarvoor moet opstellen om 't ordelijk te laten verlopen. :)

Shotterke

Legacy Member
Het probleem is dat we nooit hebben geleerd om met een database te werken maar voor ons project moeten we dit natuurlijk wel gebruiken. Dus de meeste van die dingen hebben we gekregen van de leerkrachten (zoals de class Connectie) en we moesten er ons plan maar mee trekken.

Moto

Legacy Member
Het probleem is dat we nooit hebben geleerd om met een database te werken maar voor ons project moeten we dit natuurlijk wel gebruiken. .. en we moesten er ons plan maar mee trekken
Welkom in de wondere wereld van IT :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan