spitfiresoul
20 December 2009, 14:14
ik werk momenteel aan een taak die ik moet afhebben voor mijn examen java programeren.
nu een onderdeel van de taak houd in dat we met een databaseconnectie moeten werken wat we dus nog maar 1 keer in het verleden hebben moeten doen. als gevolg zal het volgende stukje code mss niet echt goed geschreven en omslachtig overkomen dus zou ik tips hierop ook zeker apprecieren maar als jullie me al voorbij deze fout zouden kunnen helpen zou ik al heel dankbaar zijn.
eerst wat informatie. de methode waar ik een exception op krijg dient om de gegevens van een klant te wijzigen op basis van de naam van die klant.
het "moeilijke hieraan is dat de naam, voornaam, nr en adresnr van die klant in de tabel klanten zit en het adres( met als link dus adresnr naar adresid) zit in een andere tabel.
ik moet dus op 1 of andere manier eerst de voornaam van de klant aanpassen. vervolgens op basis van de familienaam het veld adresnr ophalen om vervolgens dit te gebruiken in een nieuwe updatequery om het juiste adres aan te passen.
ik ben voorlopig op deze manier te werk gegaan. het lijk mij wat omslachtig maar bij gebrek aan echt goede voorbeelden of ervaring probeer ik me wel te redeen:
public void wijzigKlant(String naam, String voornaam,String straat, int nr, String postcode, String gemeente )
{
Connection con = null;
try{
con = DatabankConnectie.getInstance().getConnection();
con.setAutoCommit(false);
PreparedStatement select = con.prepareStatement("select Adresnr FROM klanten WHERE naam = ?");
select.setString(1, naam);
PreparedStatement prepStat = con.prepareStatement("update klanten set voornaam = ? where naam = ?");
PreparedStatement prepStat2 = con.prepareStatement("update adres set straat = ?, nr = ?, postcode = ?, gemeente = ? where refnr = ?");
ResultSet id = select.executeQuery();
prepStat.setString(1,voornaam);
prepStat.setString(2,naam);
prepStat2.setString(1,straat);
prepStat2.setInt(2,nr);
prepStat2.setString(3,postcode);
prepStat2.setString(4,gemeente);
prepStat2.setInt(5,id.getInt(1));
prepStat.executeUpdate();
prepStat2.executeUpdate();
con.commit();
}catch(SQLException e){
try {
con.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
con.setAutoCommit(true);
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
de exception die ik hierbij krijg is deze:
: [Microsoft][ODBC-stuurprogrammabeheer] Ongeldige cursorstatus
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unk nown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
at DatabankKlant.wijzigKlant(DatabankKlant.java:85)
at Guitaak$3.actionPerformed(Guitaak.java:105)
at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
de fout krijg ik dus op lijn 85 waar ik dus de methode id.getInt(1) oproep.
het kan zijn dat ik er gewoon overkijk maar na toch al redelijk wat dingen te hebben uitgeprobeerd heb ik toch besloten om even hier hulp in te roepen.
in geval dat het iets uitmaakt:
de tabel klanten bevat: id(keyveld) naam, voornaam en adresnr
de tabel adres bevat adresnr(key), straat, nr, postcode en gemeente
alvast bedankt
nu een onderdeel van de taak houd in dat we met een databaseconnectie moeten werken wat we dus nog maar 1 keer in het verleden hebben moeten doen. als gevolg zal het volgende stukje code mss niet echt goed geschreven en omslachtig overkomen dus zou ik tips hierop ook zeker apprecieren maar als jullie me al voorbij deze fout zouden kunnen helpen zou ik al heel dankbaar zijn.
eerst wat informatie. de methode waar ik een exception op krijg dient om de gegevens van een klant te wijzigen op basis van de naam van die klant.
het "moeilijke hieraan is dat de naam, voornaam, nr en adresnr van die klant in de tabel klanten zit en het adres( met als link dus adresnr naar adresid) zit in een andere tabel.
ik moet dus op 1 of andere manier eerst de voornaam van de klant aanpassen. vervolgens op basis van de familienaam het veld adresnr ophalen om vervolgens dit te gebruiken in een nieuwe updatequery om het juiste adres aan te passen.
ik ben voorlopig op deze manier te werk gegaan. het lijk mij wat omslachtig maar bij gebrek aan echt goede voorbeelden of ervaring probeer ik me wel te redeen:
public void wijzigKlant(String naam, String voornaam,String straat, int nr, String postcode, String gemeente )
{
Connection con = null;
try{
con = DatabankConnectie.getInstance().getConnection();
con.setAutoCommit(false);
PreparedStatement select = con.prepareStatement("select Adresnr FROM klanten WHERE naam = ?");
select.setString(1, naam);
PreparedStatement prepStat = con.prepareStatement("update klanten set voornaam = ? where naam = ?");
PreparedStatement prepStat2 = con.prepareStatement("update adres set straat = ?, nr = ?, postcode = ?, gemeente = ? where refnr = ?");
ResultSet id = select.executeQuery();
prepStat.setString(1,voornaam);
prepStat.setString(2,naam);
prepStat2.setString(1,straat);
prepStat2.setInt(2,nr);
prepStat2.setString(3,postcode);
prepStat2.setString(4,gemeente);
prepStat2.setInt(5,id.getInt(1));
prepStat.executeUpdate();
prepStat2.executeUpdate();
con.commit();
}catch(SQLException e){
try {
con.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
con.setAutoCommit(true);
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
de exception die ik hierbij krijg is deze:
: [Microsoft][ODBC-stuurprogrammabeheer] Ongeldige cursorstatus
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unk nown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
at DatabankKlant.wijzigKlant(DatabankKlant.java:85)
at Guitaak$3.actionPerformed(Guitaak.java:105)
at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
de fout krijg ik dus op lijn 85 waar ik dus de methode id.getInt(1) oproep.
het kan zijn dat ik er gewoon overkijk maar na toch al redelijk wat dingen te hebben uitgeprobeerd heb ik toch besloten om even hier hulp in te roepen.
in geval dat het iets uitmaakt:
de tabel klanten bevat: id(keyveld) naam, voornaam en adresnr
de tabel adres bevat adresnr(key), straat, nr, postcode en gemeente
alvast bedankt