Problem: Barcode Scanner

Berlin55

Mitglied
Hallo Leute,

ich möchte ein Programm für meine Biblithek schreiben, in welchem ich per Barcode-Scanner die EAN-Nummer abfrage. Mein Problem hierbei ist, dass ich beim aktualisieren des Textfeldes die Datenbankabfrage machen möchte. Der Barcode-Scanner schreibt aber die Zahlen einzeln in das Textfeld ein. Da die EAN-Nummer knapp 10stellig ist wird dann 10 mal eine Abfrage gemacht und das Buch wird nicht gefunden. Ich arbeite hierbei mit DocumentListener

Java:
    public void insertUpdate(DocumentEvent arg0) {
        Artikel a = new Artikel();
        
        ArtikelDAO aDAO = new ArtikelDAO();
        a = aDAO.artikelPerArtNummer(txtfArtikelEingabe.getText());

Könnt Ihr mir Bitte weiterhelfen.

Gruß aus Berlin
 
Ziemlich spontane, aus dem Hut gezauberte Idee...
Du hast einen Timer, der die Datenbank abfragt. Der startet z.B. nach 1 Sekunde. Jedes mal wenn das Textfeld aktuallisiert ist, startest du den Timer neu. Dementsprechend, wenn die Änderung schneller als 1 sekunde kommt, dann wird eben der Timer "resetet" und es kommt nicht zu einer Abfrage...

Oder du guckst vor der Abfrage einfach, ob es eine gültige EAN ist (da gibt es bestimmt bestimmte Regeln, wie Länge, Aussehen etc).
 
Erstmal danke für deine schnelle Antwort.
Kannst du mir das mit dem Timer genauer beschreiben. Habe es nicht so genau verstanden.
Wann soll die Abfrage erfolgen?

Gruß
aus
Berlin
 
Sieht ungefähr so aus:
Java:
public class TimerExample {
	private Timer timer;
	private ExampleTask task;

	class ExampleTask extends TimerTask {
		@Override
		public void run() {
			System.out.println("UPDATE!!!");
		}
	}

	public static void main(String[] args) {
		new TimerExample();
	}

	/**
	 * Hier wird eben der Timer neugestartet, so dass es wieder 1 Sekunde
	 * dauert, bis der Task ausgeführt wird.
	 */
	private void resetTimer() {
		task.cancel();
		timer.purge();
		task = new ExampleTask();
		timer.schedule(task, 1000);
	}

	public TimerExample() {
		timer = new Timer();
		task = new ExampleTask();

		for (int i = 0; i < 10; i++) {
			System.out.println("Eingabe");
			// nach jeder Eingabe wird der Timer neugestartet
			resetTimer();
			// Die Dauer der Eingabe simulieren...
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

Nach jeder Eingabe wird der Timer eben zurückgesetzt. Falls die nächste Eingabe innerhalb einer Sekunde erfolgt, wird der Timer erneut resetet, so dass es nicht zur Ausführung kommt. Wenn nicht, dann wird ein Update durchgeführt.
 

Neue Themen


Zurück
Oben