Een jTextArea vullen met gegevens uit mijn Database(where naam like %naam%)

  • Onderwerp starter Onderwerp starter Agap
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Agap

Gebruiker
Lid geworden
1 nov 2010
Berichten
40
Wat ik probeer te doen:

Door middel van "select naam, type, kenteken from auto where naam like '%" + naam + "%'"; wil ik alle auto's die bv de letter e in hun naam hebben uit mijn database halen en in een jTextArea printen.

Ik heb op dit moment een method "myString":

public String myString() {
String output = "";
output += JSqlList.setSpaces("Naam: " + getNaam(), 20);
output += JSqlList.setSpaces("type: " + getKenteken(), 20);
output += JSqlList.setSpaces("type: " + getKenteken(), 20);
return output;
}

En deze print ik in een jTextArea:

String naam = aamZoekField.getText();
autoLijst.setText(eenLeraar.myString());

Dit lukt, maar ik krijg maar 1 resultaat uit de datebase in mijn jTextArea, ik wil dus niet 1 maar alle objecten uit mijn database halen die voldoen aan wat ik bij naam invul.

Dit heb ik zelf bereikt dmv array's, maar dit gaat erg traag, dus als ik op zoek druk dan duurt het nog een aantal seconden voordat ik resultaat heb.

Ik wil het dus op een andere manier dan met array's werkend krijgen.

Mijn vraag is: Hoe?

Alvast bedankt!
 
waarom zou je een textarea te gebruiken

Code:
table = new JTable(new OptionsTableModel(settings));
met dit voorbeeld kan je een eigen tabel maken dit is van projectsettings erft van properties dus kan het testen maar
Code:
public class OptionsTableModel extends AbstractTableModel {
	private static final long serialVersionUID = 1L;
	private static ResourceBundle translations;
	private Vector keys = new Vector();
    private Vector values = new Vector();
    private Vector datatype = new Vector();
	private Projectsettings settingstest;
    private static final String columnNames[] = {"key", "Value","type" };
    public int getColumnCount() {
      return columnNames.length;
    }
    /**
     * @param settings
     */
    public OptionsTableModel(Projectsettings settings) {
		settingstest = settings;
    	setdata(settingstest.gethashtable());
	}
    /**
     * @param settings
     * @param translationsPropertieFileName
     */
    public OptionsTableModel(Projectsettings settings,String translationsPropertieFileName) {
    	translations = ResourceBundle.getBundle(translationsPropertieFileName);
		settingstest = settings;
		setdatatranslated(settingstest.gethashtable());
	}
    /*
     *  (non-Javadoc)
     * @see javax.swing.table.AbstractTableModel#getColumnName(int)
     */
    public String getColumnName(int column) {
      return columnNames[column];
    }
    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getRowCount()
     */
    public int getRowCount() {
      return keys.size();
    }
    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getValueAt(int, int)
     */
    public Object getValueAt(int row, int column) {
      Object returnValue = null;
      try {
	      if (column == 0) {
	        returnValue = keys.elementAt(row);
	      } else if (column == 1) {
	        returnValue = values.elementAt(row);
	      } else if (column == 2) {
	    	  if (Statics.DEBUG){
	    		  returnValue = datatype.elementAt(row);
	    	  }
		  }
      }catch(ArrayIndexOutOfBoundsException ae){
    	  log(Level.ALL, "<ERROR: getValueAt>ArrayIndexOutOfBoundsException Projectsettings properties emty");
      }catch(Exception e){
    	  log(Level.FINEST, "<ERROR: getValueAt> <FINEST>"+e+"</FINEST>");
      }
      return returnValue;
    }
    /**
     * 
     */
    private void init(){
    	keys.removeAllElements();
    	values.removeAllElements();
    	datatype.removeAllElements();
    	
    }
    /* (non-Javadoc)
     * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
     */
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
    public boolean isCellEditable(int row, int col) {
        //Note that the data/cell address is constant,
        //no matter where the cell appears onscreen.
        if (col != 1) {
            return false;
        } else {
            return true;
        }
    }
    public void setValueAt(Object value, int row, int col) {
        if (Statics.DEBUG){log(Level.FINE, "<SET VALUE> <POS:"+row+","+col+"|TO:"+value+"//"+value.getClass()+">");}
        try{
            values.set(row, value);
            String key = (String)keys.get(row);
            settingstest.setProperty(key, value.toString());
            fireTableCellUpdated(row, col);

            //fireTableCellUpdated(row, col);
        }catch(Exception e){
        	log(Level.ALL, "<ERROR: SET VALUEAT> <POS:"+row+","+col+"|KEY:"+keys.get(row).toString()+"TO:"+value+"//"+value.getClass()+">");
        	printDebugData();
        	log(Level.FINEST, "<ERROR: setValueAt> <FINEST>"+e+"</FINEST>");
        }
        if (Statics.DEBUG) {log(Level.FINE,"<NEW VALUE>");printDebugData();}
    }
	private static  void log(Level level, String msg ){
	    String tag ="<>>>>*"+Statics.LIBNAME+"-"+Statics.COPYRIGHTBY+"*<<<<>StreamManipulator";
	    Logger.getLogger(OptionsTableModel.class.getName()).log(level, tag + msg);
	}
    private void printDebugData() {
        int numRows = getRowCount();
        int numCols = getColumnCount();
        log(Level.FINEST,"-<start>-");
        for (int i=0; i < numRows; i++) {
            log(Level.FINEST,"    row " + i + ":");
            for (int j=0; j < numCols; j++) {
                log(Level.FINEST," + data[i][j]");
            }  
        }
        log(Level.FINEST,"-<end>-");
    }
    private synchronized void setdata(Hashtable<Object, Object> table) {
        Set set = table.entrySet();
        Iterator it = set.iterator();
        init();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            keys.addElement( entry.getKey());
            Object val =entry.getValue();
            values.addElement(val);
            datatype.addElement(val.getClass().getName());
       }
       fireTableDataChanged();
    }
    private synchronized void setdatatranslated(Hashtable<Object, Object> table) {
        Set set = table.entrySet();
        Iterator it = set.iterator();
        init();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            keys.addElement(translations.getString((String)entry.getKey()));
            Object val =entry.getValue();
            values.addElement(val);
            datatype.addElement(val.getClass().getName());
       }
       fireTableDataChanged();
    }
}
 
waarom zou je een textarea te gebruiken

Code:
table = new JTable(new OptionsTableModel(settings));
met dit voorbeeld kan je een eigen tabel maken dit is van projectsettings erft van properties dus kan het testen maar
Code:
public class OptionsTableModel extends AbstractTableModel {
	private static final long serialVersionUID = 1L;
	private static ResourceBundle translations;
	private Vector keys = new Vector();
    private Vector values = new Vector();
    private Vector datatype = new Vector();
	private Projectsettings settingstest;
    private static final String columnNames[] = {"key", "Value","type" };
    public int getColumnCount() {
      return columnNames.length;
    }
    /**
     * @param settings
     */
    public OptionsTableModel(Projectsettings settings) {
		settingstest = settings;
    	setdata(settingstest.gethashtable());
	}
    /**
     * @param settings
     * @param translationsPropertieFileName
     */
    public OptionsTableModel(Projectsettings settings,String translationsPropertieFileName) {
    	translations = ResourceBundle.getBundle(translationsPropertieFileName);
		settingstest = settings;
		setdatatranslated(settingstest.gethashtable());
	}
    /*
     *  (non-Javadoc)
     * @see javax.swing.table.AbstractTableModel#getColumnName(int)
     */
    public String getColumnName(int column) {
      return columnNames[column];
    }
    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getRowCount()
     */
    public int getRowCount() {
      return keys.size();
    }
    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getValueAt(int, int)
     */
    public Object getValueAt(int row, int column) {
      Object returnValue = null;
      try {
	      if (column == 0) {
	        returnValue = keys.elementAt(row);
	      } else if (column == 1) {
	        returnValue = values.elementAt(row);
	      } else if (column == 2) {
	    	  if (Statics.DEBUG){
	    		  returnValue = datatype.elementAt(row);
	    	  }
		  }
      }catch(ArrayIndexOutOfBoundsException ae){
    	  log(Level.ALL, "<ERROR: getValueAt>ArrayIndexOutOfBoundsException Projectsettings properties emty");
      }catch(Exception e){
    	  log(Level.FINEST, "<ERROR: getValueAt> <FINEST>"+e+"</FINEST>");
      }
      return returnValue;
    }
    /**
     * 
     */
    private void init(){
    	keys.removeAllElements();
    	values.removeAllElements();
    	datatype.removeAllElements();
    	
    }
    /* (non-Javadoc)
     * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
     */
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
    public boolean isCellEditable(int row, int col) {
        //Note that the data/cell address is constant,
        //no matter where the cell appears onscreen.
        if (col != 1) {
            return false;
        } else {
            return true;
        }
    }
    public void setValueAt(Object value, int row, int col) {
        if (Statics.DEBUG){log(Level.FINE, "<SET VALUE> <POS:"+row+","+col+"|TO:"+value+"//"+value.getClass()+">");}
        try{
            values.set(row, value);
            String key = (String)keys.get(row);
            settingstest.setProperty(key, value.toString());
            fireTableCellUpdated(row, col);

            //fireTableCellUpdated(row, col);
        }catch(Exception e){
        	log(Level.ALL, "<ERROR: SET VALUEAT> <POS:"+row+","+col+"|KEY:"+keys.get(row).toString()+"TO:"+value+"//"+value.getClass()+">");
        	printDebugData();
        	log(Level.FINEST, "<ERROR: setValueAt> <FINEST>"+e+"</FINEST>");
        }
        if (Statics.DEBUG) {log(Level.FINE,"<NEW VALUE>");printDebugData();}
    }
	private static  void log(Level level, String msg ){
	    String tag ="<>>>>*"+Statics.LIBNAME+"-"+Statics.COPYRIGHTBY+"*<<<<>StreamManipulator";
	    Logger.getLogger(OptionsTableModel.class.getName()).log(level, tag + msg);
	}
    private void printDebugData() {
        int numRows = getRowCount();
        int numCols = getColumnCount();
        log(Level.FINEST,"-<start>-");
        for (int i=0; i < numRows; i++) {
            log(Level.FINEST,"    row " + i + ":");
            for (int j=0; j < numCols; j++) {
                log(Level.FINEST," + data[i][j]");
            }  
        }
        log(Level.FINEST,"-<end>-");
    }
    private synchronized void setdata(Hashtable<Object, Object> table) {
        Set set = table.entrySet();
        Iterator it = set.iterator();
        init();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            keys.addElement( entry.getKey());
            Object val =entry.getValue();
            values.addElement(val);
            datatype.addElement(val.getClass().getName());
       }
       fireTableDataChanged();
    }
    private synchronized void setdatatranslated(Hashtable<Object, Object> table) {
        Set set = table.entrySet();
        Iterator it = set.iterator();
        init();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            keys.addElement(translations.getString((String)entry.getKey()));
            Object val =entry.getValue();
            values.addElement(val);
            datatype.addElement(val.getClass().getName());
       }
       fireTableDataChanged();
    }
}

Het gebruik maken van een jTextArea is een eis voor het project.

De code die jij hebt geplaatst lijkt nogal gevorderd in mijn ogen, ik ben nog niet zo lang bezig met java/programmeren dus wat jij geplaatst hebt is een beetje abracadabra voor mij :P
 
Dit lukt, maar ik krijg maar 1 resultaat uit de datebase in mijn jTextArea, ik wil dus niet 1 maar alle objecten uit mijn database halen die voldoen aan wat ik bij naam invul.

Dit heb ik zelf bereikt dmv array's, maar dit gaat erg traag, dus als ik op zoek druk dan duurt het nog een aantal seconden voordat ik resultaat heb.

Ik wil het dus op een andere manier dan met array's werkend krijgen.

Mijn vraag is: Hoe?

Alvast bedankt!
Met arrays werken is niet traag, of toch niet in de grootorde van seconden. Het is de communicatie met je database en de berekeningen op de database zelf die traag zijn. Nu zijn de meeste databases voor huis-, tuin- en keukengebruik niet echt snel, en al zeker AccessBased applicaties niet.Toch vermoed ik dat je ook geen duizenden en duizenden entries hebt in je database dus misschien zijn er wel wat verbeteringen mogelijk aangaande de communicatie, dus zou de code rondom de verbinding met je database welkom zijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan