Derby/JavaDB Insert Statement Probleme

Rin

Mitglied
Hallo Leute,

ich hab folgendes Problem mit einem Insert Statement 2 funktionieren bis jetzt einbandfrei nur genau bei diesem :

SQL:
"INSERT INTO Incidents2(SDCallID,Eroeffnet,Beschreibung,EinmelderID) " +
								"SELECT import.SDCallID, import.Eroeffnet, import.Beschreibung, einmelder.EinmelderID " +
								"FROM Import2 import, Einmelder2 einmelder " +
								"WHERE ((import.Betroffener IS NOT NULL AND import.Betroffener <> '') " +
								"AND import.Betroffener = einmelder.Einmelder) " +
								"OR ((import.Betroffener IS NULL OR import.Betroffener = '') " +
								"AND import.Einmelder = einmelder.Einmelder)"

obwohl ich den gleichen Tabellen Aufbau (Datentyptechnisch) wie bei den anderen verwende nämlich diesen hier :
SQL:
CREATE TABLE Incidents2 (SDCallID VARCHAR(40) PRIMARY KEY," +
														"Eroeffnet VARCHAR(30)," +
														"Beschreibung VARCHAR(255)," +
														"EinmelderID INT)

schreibt er mir jedes mal diese exception:
Java:
java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL110601095210540' defined on 'INCIDENTS2'.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown Source)
	at Classes.Import.ImportFromCsvToAccessTable(Import.java:136)
	at Forms.ImportForm$2.actionPerformed(ImportForm.java:216)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown 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.mouseReleased(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(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown 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.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

hoffe ihr könnts mir helfen

danke LG Rin
 

hansmueller

Bekanntes Mitglied
Hallo,

wenn ich die Fehlermeldung richtig interpretiere, wird beim Insert ein oder mehrere identische Primärschlüssel verwendet. Der Primärschlüssel muß aber einmalig sein.

Schau dir mal an, was bei deiner Abfrage
SQL:
"SELECT import.SDCallID, import.Eroeffnet, import.Beschreibung, einmelder.EinmelderID " +
                                "FROM Import2 import, Einmelder2 einmelder " +
                                "WHERE ((import.Betroffener IS NOT NULL AND import.Betroffener <> '') " +
                                "AND import.Betroffener = einmelder.Einmelder) " +
                                "OR ((import.Betroffener IS NULL OR import.Betroffener = '') " +
                                "AND import.Einmelder = einmelder.Einmelder)"
herauskommt und ob da aus irgendeinem Grund die SDCallID nicht einmalig ist.
Oder in deiner Tabelle Incidents2 kommt einer oder mehrere dieser Primärschlüssel schon vor.

MfG
hansmueller
 

Rin

Mitglied
hm... leider hab ich vergessen wie ich den result bzw den execute in string ausgeben kann =/ Peinlich peinlich, und ich drop aus test zwecken im moment jedes mal die Tabelle wieder das heißt die wird vor jedem Statement test neu erstellt und jo also rein teoretisch kann kein datensatz drinnen stehen ich hol die daten aus einer csv datei es ist nur extrem anstrengend da jetzt jeden einzelnen datensatz zu kontrollieren ob da duplikate vorkommen da das knapp 1500 datensätze sind .........

hm........ falsch definiert hab ich es auch nicht die tabellen spalten hm.....
 
S

SlaterB

Gast
du kannst auch den Primary Key testweise entfernen, in die Tabelle dann hoffentlich erfolgreich einfügen und danach nach Doppelten suchen
(GROUP BY id HAVING Count(*) > 1)

in Excel:
nach Id sortieren, in Spalte daneben Formel =IdSpalte2-IdSpalte1, kopieren über alle 1500 Zeilen, schauen ob irgendwo 0 rauskommt
(Filter, oder Werte kopieren + neu sortieren)
 

hansmueller

Bekanntes Mitglied
Hallo,

importiere die csv in ein Tabellenbearbeitungsprogramm deiner Wahl, sortiere nach der Spalte, die den Primärschlüssel enthält. Dann erstellst du in einer leeren Spalte eine Formal nach dem Schema: Wenn Primärschlüssel der Zeile x ist gleich dem Primärschlüssel der darunterliegenden Zeile dann gib "Treffer" aus. Kopiere diese Formel die ganze Spalte herunter und suche dann nach dem Eintrag "Treffer".

Alternativ kannst du ja eine TESTIncidents2-Tabelle machen, in der es keinen Primärschlüssel gibt. Dann kannst du dort nach doppelten Einträgen per SQL suchen. Wenn diese Tabelle dann bereinigt ist, kannst du die Einträge in deine Incidents2-Tabelle kopieren.

MfG
hansmueller
 

Rin

Mitglied
könnte es sein das er wenn ich den PK definiere und er einschreiben will nur die ersten paar zahlen vergleicht weil die eben bei der SDCallId meistens gleich ist


lg
 
S

SlaterB

Gast
ein PK ist verletzt wenn irgendein Doppelter Schlüssel vorliegt, wenn die Fehlermeldung kommt wurde etwas Doppeltes gefunden,
wie kommst du grundsätzlich auf die Idee, dass es daran liegt, dass 'nur' etwas weniger gesucht wird?
so abwegig das überhaupt für eine DB ist, würde es höchstens das Übersehen von etwas erklären, aber doch nicht das Finden von etwas?!

> weil [..] eben bei der SDCallId meistens gleich ist
tada, dies ist das wo dir ein PK die lange Nase zeigt, überrascht?
 

Rin

Mitglied
hm. da hast recht na ka es kam mir nur komisch vor ich hab es durch einen filter bzw hab ich überprüft mehrmals ob es doppelte treffer gibt aber es kamm kein treffe zu stande ....

egal hab ein anderes problem noch =/ ich hab noch eine tabelle um so stammdaten zu speichern wie er soll einen gewissen prozentsatz nur ausslesen aus der tabelle einmelder diese prozent zahl will ich in eine eigene tabelle speichern nur aus welchem grund auch immer entweder er kann sie nicht auslesen oder er will sie nicht speichern er findet nichts egal wie oft ich Update statment verwende........
 
S

SlaterB

Gast
> hab ich überprüft mehrmals ob es doppelte treffer gibt aber es kamm kein treffe zu stande
wie passt das denn zur vorherigen Aussage
> weil die eben bei der SDCallId meistens gleich ist
bzw. was meintest du mit dieser?

--------

der neue 3-Zeilen-Satz ist wirklich übel, worum gehts denn da?
findet nicht direkt über SQL irgendein Import statt? und dabei soll irgendwo eine Prozentzahl aktualisiert werden?
nicht gerade ein Standard-Verhalten von SQL, zumal 1500 Zeilen doch nicht lange dauern können

willst du in Java parallel irgendwas machen?
 

Rin

Mitglied
nur die ersten 4 zahlen sind gleich das is eine 8 stellige zahl das meinte ich das die meistens gleich sind die ersten 4 zahlen

also ich starte mein programm dann wählt man die csv datei die daten in der Datei importier ich in die JavaDB und verteile sie auf die jeweilgen tabellen, soo ich kann die daten via einer JTable verwalten so
jetzt habe ich noch eine tabelle names config stammdaten wie z.B.: wie viel prozent der einmelder befragt werden sollen und wie lang sie an einer umfrage nicht mehr teilnehmen können

diese Prozent und die Tage dafür speicher in in der tabelle config jetzt hab ich setter und getter für diese daten nur obwohl die tabelle config vorhanden ist will er mir die Daten nicht speichern und er findet die zahlen nicht ...... warum auch immer -.-

Java:
public class tp_getter_setter {
	private static String prozent,tage,text;

	public static void setProzent(String prozent){
		try {

			Connection con = DriverManager.getConnection("jdbc:derby:kuzudb;");
			int proz = Integer.parseInt(prozent);
			String strSQLProzentstmt = "UPDATE config SET Prozent = " + proz;
			Statement prozentprep = con.createStatement();
			prozentprep.execute(strSQLProzentstmt);
			System.out.println(proz);
			System.out.println(strSQLProzentstmt);
			con.close();

		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}

	}
	public static String getProzent()throws SQLException{

		try {

			Connection con = DriverManager.getConnection("jdbc:derby:kuzudb;");
			String strSQLProzentstmt = "SELECT Prozent FROM config";
			Statement prozentprep = con.createStatement();
			ResultSet rs = prozentprep.executeQuery(strSQLProzentstmt);

		if(rs.next())
		{
			prozent = rs.getString(1);
			System.out.println(prozent);
			con.close();
		}
		else
		{
		System.err.println("es wurden keine Tage gefunden!");
		}

		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}

		return tp_getter_setter.prozent;


	}

	public static void setTage(String tage){
		try {

			Connection con = DriverManager.getConnection("jdbc:derby:kuzudb;");
			int tag = Integer.parseInt(tage);
			String strSQLtagestmt = "UPDATE config SET Tage = " + tag;
			Statement tageprep = con.createStatement();
			tageprep.execute(strSQLtagestmt);
			System.out.println(tag);
			System.out.println(strSQLtagestmt);
			con.close();

		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}
	public static String getTage(){

		try {

			Connection con = DriverManager.getConnection("jdbc:derby:kuzudb;");
			String strSQLtagestmt = "SELECT Tage FROM config";
			Statement tageprep = con.createStatement();
			ResultSet rs = tageprep.executeQuery(strSQLtagestmt);

		if(rs.next()) {
			tage = rs.getString(1);
			System.out.println(tage);
			con.close();
		}
		else
		{
		System.err.println("es wurden keine Prozent gefunden!");
		}
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}

		return tp_getter_setter.tage;
	}

	public static void setText(String textvar, String Link){
		tp_getter_setter.text = textvar.replace("(LINK)", Link);
	}
	public static String getText(){

		return tp_getter_setter.text;
	}

}

das is der code von den settern und gettern und er findet keine zeilen ..... obwohl ich beim start des programms die daten einschreiben lasse in die tabelle config

danke lg
 
S

SlaterB

Gast
> nur die ersten 4 zahlen sind gleich das is eine 8 stellige zahl das meinte ich das die meistens gleich sind die ersten 4 zahlen
das verstehe ich nun, dann macht die nur-Suche Sinn, ja, so sollte es aber hoffentlich nicht sein

----

UPDATE config SET Prozent = 4
aktualisiert alle Einträge in der Tabelle, setzt überall die Spalte Prozent auf 4,
wenn es aber keinen Eintrag gibt, dann wird beim SELECT auch nix rauskommen,

du musst am Anfang eine Zeile einfügen,
schau dir auch den Rückgabewert von [c]tageprep.execute(strSQLtagestmt);[/c] an, wieviele Einträge geändert wurden
 

Rin

Mitglied
UPDATE config SET Prozent = 4
aktualisiert alle Einträge in der Tabelle, setzt überall die Spalte Prozent auf 4,
wenn es aber keinen Eintrag gibt, dann wird beim SELECT auch nix rauskommen,

du musst am Anfang eine Zeile einfügen,
schau dir auch den Rückgabewert von [c]tageprep.execute(strSQLtagestmt);[/c] an, wieviele Einträge geändert wurden

:) danke das hilft ungemein werd ich gleich mal überprüfen und ein insert machen um das zu checken ;)

lg

ps.: ich lass den post mal als offen wenn ich noch fragen habe
 

Rin

Mitglied
Hi leute ich habe ein neues Porblem .... =/ das alte is fertig nur habe ich jetzt ein problem mit einem SQL Statement

SQL:
UPDATE Einmelder2 SET Gesperrt = 0 WHERE LetzteUmfrage < DateAdd('d', -30, Date())

so derby schmeist mir immer die Exeption das die vorletzte ")" einen syntax fehler hervorruft =/ jetzt habe ich mich schon erkundigt was genau jetzt JavaDB/Derby unterstützt an SQL befehlen aber ich werd nicht schlau aus google im mom ka warum

hoffe ihr könnt mir helfen danke euch

LG Rin
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L MySQL Prepared Statement batch langsamer als bulk insert? Datenbankprogrammierung 10
G Frage zum Insert-Statement Datenbankprogrammierung 2
D Problem: Prepared Statement (Insert) funktioniert nicht. Datenbankprogrammierung 3
G INSERT-STATEMENT Datenbankprogrammierung 6
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
O HOW TO INSERT PRIMARY INTO ANOTHER TABLE AND USE IT AS FOREIGN KEY TO DISPLAY DATA IN A RELATIONSHIP Datenbankprogrammierung 3
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
A MySQL Select und Insert in Java Datenbankprogrammierung 15
S PostgreSQL Bytea INSERT Datenbankprogrammierung 8
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
D Insert Methode per Servlet Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 0
D SQLite INSERT OR REPLACE INTO macht neuen Eintrag?! Datenbankprogrammierung 2
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
B JPA->fehler beim Insert in die Datenbank Datenbankprogrammierung 3
A Oracle insert Array in DB Datenbankprogrammierung 7
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Y MySQL Eclipselink Insert JSF Beispiel gesucht Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
M Derby/JavaDB Derby SQL Insert mit AUTO_INCREMENT, welche ID wurde vergeben? Datenbankprogrammierung 6
D HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative? Datenbankprogrammierung 7
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
B MS SQL: Insert LOB Datenbankprogrammierung 4
M MySQL INSERT will einfach nicht funktionieren Datenbankprogrammierung 9
H HSQLDB insert .... values("test1",select test2 from foo) Datenbankprogrammierung 2
D JDBC insert mit select abfrage Datenbankprogrammierung 5
R vor/nach INSERT mysql-SETS absetzen Datenbankprogrammierung 2
C insert into mit between-Anweisung Datenbankprogrammierung 10
C Derby/JavaDB INSERT auf FOREIGN KEY schlägt fehl Datenbankprogrammierung 2
F Insert into Access Datenbankprogrammierung 3
S Nochmals: ID ermitteln nach Insert Datenbankprogrammierung 2
S ID Wert von Insert über jdbcTemplate.update Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
B SELECT ja - INSERT nein (MySQL) Datenbankprogrammierung 3
E Derby/JavaDB Keine Reaktion von "insert into" im ActionListener Datenbankprogrammierung 22
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3
T MySQL Db select * und Insert schlagen fehl Datenbankprogrammierung 2
Kenan89 Insert ohne Auswirkung Datenbankprogrammierung 7
B MySQL myBatis INSERT Datenbankprogrammierung 13
E Access Datenbank mit Insert befüllen Datenbankprogrammierung 5
M Datenbankverbindung zu langsam beim Insert? Datenbankprogrammierung 6
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
L H2 Auto INC Primary Key & Insert Datenbankprogrammierung 8
F H2:Wie kann man insert eine Reihe "int" wert als blob in table? Datenbankprogrammierung 12
S MySQL INSERT schlägt nicht fehl, fügt aber auch nichts ein Datenbankprogrammierung 13
S Probleme mit INSERT Befehl Datenbankprogrammierung 11
M Insert in Table mit 250 Feldern Datenbankprogrammierung 2
E [ACCESS ODBC] INSERT INTO Fehler Datenbankprogrammierung 4
A Insert Methode Syntaxfehler Datenbankprogrammierung 2
G INSERT DATE in Oracle-DB Datenbankprogrammierung 11
G ODBC Insert und gleich danach Selects Datenbankprogrammierung 8
Iron Monkey Insert into Spalte ID AUTO_INCREMENT Datenbankprogrammierung 7
C ID-Rückgabe bei INSERT Datenbankprogrammierung 5
D mysql insert - performance/robustheit, "best practice" Datenbankprogrammierung 15
M Hibernate: Insert statt Update Datenbankprogrammierung 8
C Rückgabe ob INSERT erfolgreich Datenbankprogrammierung 11
H Batch Update/Insert Datenbankprogrammierung 4
E Insert oder Update- Prüfung Datenbankprogrammierung 3
K DB2 Insert mit Subselect Fehler Datenbankprogrammierung 2
M Derby insert, ID auslesen Datenbankprogrammierung 3
W Problem bei Insert mit JDBC auf MS-SQL-Server 2005 Datenbankprogrammierung 7
R Probleme mit Insert Datenbankprogrammierung 2
M Insert Update usw. Datenbankprogrammierung 2
P Insert into mit zwei Datenbanken Datenbankprogrammierung 3
S Insert mit Select Datenbankprogrammierung 6
M insert in 2 tabellen Datenbankprogrammierung 7
J Insert auf Access DB funktioniert nicht Datenbankprogrammierung 5
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
V Fehlermeldung beim Insert Datenbankprogrammierung 16
S Insert into , executeupdate oder executequery Datenbankprogrammierung 3
B PrepareStatement "Insert into" fehlermeldung Datenbankprogrammierung 13
D Insert Oracle BLOB Datenbankprogrammierung 1
T ibatis + "generated p-key" nach insert? Datenbankprogrammierung 24
G Herausfinden des Primary Keys nach INSERT-Kommando? Datenbankprogrammierung 4
G INSERT abfragen ob erfolgreich? Datenbankprogrammierung 5
D INSERT String enthält ' wie kann man das Escapen? Datenbankprogrammierung 4
T INSERT-Befehl in Java für Oracle Datenbankprogrammierung 4
Y Hibernate - Datum Insert Datenbankprogrammierung 7
D ODBC Zugriff auf MDB-Datenbank, Insert Into ohne Funktion Datenbankprogrammierung 2
U INSERT INTO von 2 Textfeldern Datenbankprogrammierung 6
D Syntaxfehler in der INSERT INTO Anweisung Datenbankprogrammierung 2
F JAVA & MySQL : INSERT INTO DB ! Datenbankprogrammierung 2
D Problem mit INSERT INTO Datenbankprogrammierung 19
S insert into table Datenbankprogrammierung 8
S Insert in Datenbank Datenbankprogrammierung 15
G Insert-anweisung mehrere Varianten eine geht Datenbankprogrammierung 2
P frage zu "" bei INSERT STATEMENTS Datenbankprogrammierung 2
K frage zum ausführen eines INSERT statements Datenbankprogrammierung 16
K INSERT INTO bei Windows 2005 SQL Server Standard Edition . Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben