MySQL Kein DB-Eintrag

Sc0rP1En

Mitglied
Hallo Community,

ich arbeite gerade an einer Client /Server Verbindung bei der, der Server Daten mittels EclipseLink in die DB schreibt.

Server
Java:
ServerBTS() throws IOException
{
	EntityManagerFactory factory;
	factory = Persistence.createEntityManagerFactory("BTS");
	EntityManager em = factory.createEntityManager();
	em.getTransaction().begin();
	
	System.out.println("BTS-Server started!");
	while (true)
	{
		Socket socket = server.accept();
        thread = new Database(socket,em);
        thread.start();
	}
}

public static void main (String[] args)
{
	try {
		ServerBTS server = new ServerBTS();
		
	}
	catch (IOException e)
	{
		System.out.print(e);
	}
}
}

Database
Java:
public class Database extends Thread {

	EntityManager _em;
	Socket _socket;
	double _north;
	double _east;
	
	public Database(Socket socket,EntityManager em)
	{
		this._em = em;
		this._socket = socket;

	}
	
	public void run(){
	 
	int CorHostName=-1;
     ArrayList<String> AlHostNames = new ArrayList<String>();
     AlHostNames.add("Thimo01");
     AlHostNames.add("Thimo02");
     AlHostNames.add("LKW01");
     AlHostNames.add("LKW02");
     
     InetAddress addr = _socket.getInetAddress();
     String hostname = addr.getHostName();
     
     Hostnames:
     for (int i =0; i<AlHostNames.size();i++)
     {
     if (hostname.equals(AlHostNames.get(i)))
      {
    	  CorHostName = i;
    	  break Hostnames;

      }
     }
     
		//Empfang von Doublewerten
		DataInputStream input;
		try {
			input = new DataInputStream(_socket.getInputStream());
			_north = input.readDouble();
			_east = input.readDouble();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

     
     System.out.println(AlHostNames.get(CorHostName));
     System.out.println(CorHostName+"      "+_north+" , "+_east);
     switch (CorHostName)
	{
	case 0:

		 Koordinaten2 koord2 = new Koordinaten2();
		 koord2.setDate(new Date());
		 koord2.setNorth(_north);
		 koord2.setEast(_east);
		 _em.merge(koord2);
//		 _em.getTransaction().commit();
		 break;
		 
	case 1:
		Koordinaten3 koord3 = new Koordinaten3();
		 koord3.setDate(new Date());
		 koord3.setNorth(_north);
		 koord3.setEast(_east);
		 _em.merge(koord3);
//		 _em.getTransaction().commit();
		break;

	default:
	System.out.println("Wrong Hostname");		 
	break;
	}
	}
	
	}

Diese Klasse wird nach dem Server.accept aufgerufen um mehrere Clients afertigen zu können.

Mein Problem ist, dass er nur in die Datenbank schreibt, wenn ich em.transaction.commit(); auch hinzufüge. Leider ist dann aber die Verbindung geschlossen. Ich habe es sowohl mit em.merge() als auch mit em.persist() versucht.

Hat einer eine Idee?

Danke schon im Voraus.

Greets
Sc0rP1En
 
M

Marcinek

Gast
Nachdem du eine Transaktion commitet hast, must du eine neue erzeugen.

Oder deine Datenbankverbindung auf autocommit stellen. Wie das in deinem Fall geht kann ich aber nicht sagen.

Dein Code enthält viele Fehler bezüglich der Java Code-Stlye Konvention.
 

Sc0rP1En

Mitglied
Danke Marcinek,

aber ist eine Persistenzschicht nicht dafür da, dass stetig eine Verbindung offen ist und man nicht immer wieder eine neue Verbindung aufmachen muss?

Wird der eintrag nicht mit persist() oder merge() in die Datenbank geschrieben und das Commit braucht man garnicht? Denn es hat bei mir auch schon ohne das Commit funktioniert :S

Ist die Style-Konvention eine Vorgabe wie der Code formatiert sein soll? Darum habe ich mich noch nicht gekümmert, denn bin ich noch in der Einlernphase für das schlussendliche Projekt.

Greets
Sc0rP1En
 
M

Marcinek

Gast
Du musst das em.getTransaction().begin();

einfach in deinen verarbeitenden Thread packen.

Was Transaktionen sind, welche Vorteile und Nachteile sie haben, kann man in den entprechenden Büchern nachlesen. Das werde ich hier nicht tippen.

Eventuell auch versuchen pro Thread einen eigenen EntityManager packen.

Wenn du das erst lernst, dann ist es umsowichtiger, dass die Basics sitzen. Und wenn du vor hast mit anderen Leuten an einem Code zu arbeiten, wirst du die Style Vereinbarungen zu schätzen wissen.
 

Sc0rP1En

Mitglied
Okay Danke ich werde das mal probieren. :)

Das mit dem Style ist mir klar, habe auch schon mit unformatiertem Code arbeiten müssen und das war kein Spaß. Daran werde ich mich halten!

greets
Sc0rP1En
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
C Mir fällt kein Feldname ein Datenbankprogrammierung 4
M PL/SQL Fehler "Kein Wert zurückgegeben" Datenbankprogrammierung 4
Blindxantos Datenquellname bzw. kein Standardtreiber Datenbankprogrammierung 7
T Hibernate: Reverse Enigneering - kein Mapping von Beziehungen Datenbankprogrammierung 8
C kein Resultset Datenbankprogrammierung 2
L Postgres kann kein Datum speichern Datenbankprogrammierung 5
G PostGreSQL - Die Abfrage lieferte kein Ergebnis Datenbankprogrammierung 3
B ResultSet aus Session geladen, aber kein Zugriff möglich Datenbankprogrammierung 6
C MySql kein Rollback Datenbankprogrammierung 19
G Kein Geschenk, der JDBC-Treiber ! Datenbankprogrammierung 30
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
D SQLite INSERT OR REPLACE INTO macht neuen Eintrag?! Datenbankprogrammierung 2
M Derby/JavaDB Neu geschriebener Eintrag per UPDATE lässt sich nicht unmittelbar abrufen Datenbankprogrammierung 2
G 2 Tabellen und ein spezieller Eintrag Datenbankprogrammierung 2
J Java DB Neuen Eintrag am Anfang der Table Datenbankprogrammierung 6
E ClassNotFoundException bei verschiedenen MS SQL Treibern trotz Classpath-Eintrag Datenbankprogrammierung 5
C Programm wird nach DB-Eintrag nicht weitergeführt Datenbankprogrammierung 5
M OutOfMemoryException obwohl nur 1 Eintrag abgefragt wird Datenbankprogrammierung 7
A Ausgewählten Jtable Eintrag aus Db löschen Datenbankprogrammierung 9
C H2 Letzten Eintrag auslesen Datenbankprogrammierung 6
N batchupdate, es wird nur der letzte Eintrag eingetragen Datenbankprogrammierung 5
G Existiert schon ein DB- Eintrag Datenbankprogrammierung 1
prakdi einzelnen SQL Eintrag finden der "update" enthält Datenbankprogrammierung 3
K Wird auf den Eintrag referenziert? Datenbankprogrammierung 4
E Aus einer Tabelle Zeilen mit doppeltem Eintrag holen? Datenbankprogrammierung 4
B Datenbank Abfrage: Es fehlt immer ein Eintrag! Datenbankprogrammierung 7
B Eintrag in der MySQL Datenbank eintragen? Datenbankprogrammierung 2
G Policy Eintrag für SQL Zugriff im Netzwerk Datenbankprogrammierung 10
T [jdbc] einen Eintrag aus mehreren Tabellen löschen (Batch) Datenbankprogrammierung 3
J Eintrag aus der Spalte auswählen Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben