Archief - nieuw object maken adhv een ander object

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.

Lefky

Legacy Member
ik zou in java voor ons project een personage object moeten aanmaken

hiervoor geef je een naam en categorie op
de categorie moet echter uit een databank komen
dus je hebt de lijst en geeft de naam van de categorie in

de constructor personage:

Code:
	private String naam;
	Categorie categorie;

	public Personage(String naam, Categorie categorie) 
	{
		setNaam(naam);
		setCategorie(categorie);
	}

	public void setNaam(String naam)
	{
		this.naam = naam;
	}

	public void setCategorie(Categorie categorie) 
	{
		this.categorie = categorie;
	}


ik dacht het dan zo te doen, maar dit lukt precies ook niet
Code:
public String[] maakPersonage(String naam, String categorie) {

		//Your class in string
		 String s="<Categorie>";

		//Get class definition
		 Class cls = Class.forName(s);

		//Instantiate
		 Object obj=cls.newInstance();
		
		Personage personage = new Personage(naam, obj);
		
		huidigPersonage = personageRepository.maakPersonage(personage); 
		
		String personageGegevens[] = new String[2];
		personageGegevens[0] = huidigPersonage.getNaam();
		personageGegevens[1] = huidigPersonage.getCategorie().toString();

		return personageGegevens;
	}

alvast bedankt

NeverwinterX

Legacy Member
Ik snap niet echt wat je allemaal bezig bent. De categorie komt uit een database, in welke vorm precies? Tekst? Of is het een OO database? Hoe ziet de klasse Categorie eruit?
Waarom kan je niet gewoon de constructor van Categorie gebruiken? Het zou me verbazen als je echt reflectie nodig hebt hiervoor.

Gebruik trouwens code tags, dat is leesbaarder.

Over die code:
Je zal de exceptions moeten afhandelen die Class.forName(s) en cls.newInstance() smijten. De compiler geeft daar toch duidelijk een error over?
Voorts moet je die <> in String s="<Categorie>"; weglaten.

forloRn_

Legacy Member
Je hebt een instance van Categorie nodig om aan een instance van Personage te geven. Wel, maak ze dan zoals je dat met een Personage doet: new Categorie(titel). Die titel haal je uit de DB.

Lefky

Legacy Member
de code van categorie ziet er zo uit

de database is acces 2007

als er nog iets niet duidelijk is vraag maar :)
en al bedankt

Code:
package domein;


public class Categorie 
{
	// ATRIBUTEN
	private String omschrijving;
	private String naam;

	// CONSTRUCTOR
	public Categorie(String naam, String omschrijving) 
	{
		setNaam(naam);
		setOmschrijving(omschrijving);
	}
	public Categorie (String naam)
	{
		setNaam(naam);
	}

	// GETTERS
	public String getNaam() 
	{
		return this.naam;
	}

	public String getOmschrijving() 
	{
		return this.omschrijving;
	}

	// SETTERS
	public void setNaam(String naam) 
	{
		this.naam = naam;
	}

	public void setOmschrijving(String omschrijving) 
	{
		this.omschrijving = omschrijving;
	}

} // einde klasse categorie

forloRn_

Legacy Member
Bon. Je zult geen objecten uit een Access-databank kunnen halen, ook niet met reflection. Wat je gaat moeten doen is voor elke categorie de naam en de omschrijving uitlezen uit de DB, en nieuwe Categorie-objectjes instantieren met de constructors hierboven. Dat uitlezen doe je bijvoorbeeld met JDBC, en daarvoor moet je maar eens googelen.

Xtralecherus

Legacy Member
Hier is wat code voor connectie te maken met een database voordeel hier is dat je niet met odbcad32.exe u database moet definieren, zet wel je database in je java project folder zoals bv: als u map "Project" noemt plaat de database daarin.

Ik vermoed dat je dit moet doen voor Projecten 1 in TI aalst?

Code:
private String databaseName;
private Adres[] alleAdressen; //dit is u klasse waarvan je een object maakt en hierin u database gegevens insteekt

static String userid="", password = "";
static String url ="jdbc:odbc:Driver=" +
        "{Microsoft Access Driver (*.mdb, *.accdb)};DBQ=../MAPNAAM waar je database instaat/Naam_van_u_database.accdb;" + 
        "DriverID=22;READONLY=true";
static Connection conn;

public databank()
    {
        databaseName ="AdresDB";
        alleAdressen = new Adres[50];
                
    }

//methode voor connectie te maken met je database
public static Connection getConnection() 
    {
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        }
        catch(java.lang.ClassNotFoundException e)
        {
            System.err.println("ClassNotFoundException: "+e.getMessage());
        }
        try
        {
            conn= DriverManager.getConnection(url, userid, password);
        }
        catch (SQLException s)
        {
            System.err.println("SQLException1234: "+s.getMessage());
        }
        return conn;
    }


//simpele "select all query" dat alles uit je database haalt 
    public void vraagAdresOp() 
    {
        try
        {
            //teller aanmaken die beslist waar het wordt opgeslagen in de array
            int telle r = 0;
            ResultSet rs;
            
            //connectie maken dmv methode 
            getConnection();
            
            try
            {
            
                Statement s = conn.createStatement();
                
                rs = s.executeQuery("SELECT * FROM Adresbestand");
                
                while (rs.next())
                {
                    // lokale velden uit DB
                    int id = rs.getInt(1);
                    String achternaam = rs.getString(2);
                    String voornaam = rs.getString(3);
                    String adres = rs.getString(4);
                    String woonplaats = rs.getString(5);
                    int postcode = rs.getInt(6);
                   
                    
                    //Adres v is een klasse die je vult met deze gegevens hieronder
                    Adres v = new Adres();
                    v.setID(id);
                    v.setAchternaam(achternaam);
                    v.setVoornaam(voornaam);
                    v.setAdres(adres);
                    v.setWoonplaats(woonplaats);
                    v.setPostcode(postcode);

                    // dit adres-object in de eindoplossing steken = de
                    // array van adressen
                    alleAdressen[teller] = v;
                    

                    teller++;
                }
                s.close();
                conn.close();
                
            }
            catch (SQLException sqle)
            {
                sqle.printStackTrace();

            }
        }
        //catch (SQLException e)
        catch(Exception e)
        {
            System.err.println("databankfout"+ e);
        }
    }

Lefky

Legacy Member
L3ThaL zei:
Hier is wat code voor connectie te maken met een database voordeel hier is dat je niet met odbcad32.exe u database moet definieren, zet wel je database in je java project folder zoals bv: als u map "Project" noemt plaat de database daarin.

Ik vermoed dat je dit moet doen voor Projecten 1 in TI aalst?

Code:
private String databaseName;
private Adres[] alleAdressen; //dit is u klasse waarvan je een object maakt en hierin u database gegevens insteekt

static String userid="", password = "";
static String url ="jdbc:odbc:Driver=" +
        "{Microsoft Access Driver (*.mdb, *.accdb)};DBQ=../MAPNAAM waar je database instaat/Naam_van_u_database.accdb;" + 
        "DriverID=22;READONLY=true";
static Connection conn;

public databank()
    {
        databaseName ="AdresDB";
        alleAdressen = new Adres[50];
                
    }

//methode voor connectie te maken met je database
public static Connection getConnection() 
    {
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        }
        catch(java.lang.ClassNotFoundException e)
        {
            System.err.println("ClassNotFoundException: "+e.getMessage());
        }
        try
        {
            conn= DriverManager.getConnection(url, userid, password);
        }
        catch (SQLException s)
        {
            System.err.println("SQLException1234: "+s.getMessage());
        }
        return conn;
    }


//simpele "select all query" dat alles uit je database haalt 
    public void vraagAdresOp() 
    {
        try
        {
            //teller aanmaken die beslist waar het wordt opgeslagen in de array
            int telle r = 0;
            ResultSet rs;
            
            //connectie maken dmv methode 
            getConnection();
            
            try
            {
            
                Statement s = conn.createStatement();
                
                rs = s.executeQuery("SELECT * FROM Adresbestand");
                
                while (rs.next())
                {
                    // lokale velden uit DB
                    int id = rs.getInt(1);
                    String achternaam = rs.getString(2);
                    String voornaam = rs.getString(3);
                    String adres = rs.getString(4);
                    String woonplaats = rs.getString(5);
                    int postcode = rs.getInt(6);
                   
                    
                    //Adres v is een klasse die je vult met deze gegevens hieronder
                    Adres v = new Adres();
                    v.setID(id);
                    v.setAchternaam(achternaam);
                    v.setVoornaam(voornaam);
                    v.setAdres(adres);
                    v.setWoonplaats(woonplaats);
                    v.setPostcode(postcode);

                    // dit adres-object in de eindoplossing steken = de
                    // array van adressen
                    alleAdressen[teller] = v;
                    

                    teller++;
                }
                s.close();
                conn.close();
                
            }
            catch (SQLException sqle)
            {
                sqle.printStackTrace();

            }
        }
        //catch (SQLException e)
        catch(Exception e)
        {
            System.err.println("databankfout"+ e);
        }
    }

ik zit in gent :)
en we hebben deze klasse al
ik vond gewoon geen manier om dit op een juiste wijze te doen
maar toch bedankt ;)
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