[Java und Oracle] Insert wird nicht akzeptiert - invalid character

Basti54

Erfahrenes Mitglied
Hallo.
Ich arbeite grad daran, Daten per Java (JDBC) in eine Oracle Datenbank zu transferieren. Es tauch dabei folgendes Problem auf: cCh will diesen INSERT Befehl absetzen:

Code:
INSERT INTO eineTab(RistkRef, VonPos, BisPos, Typ, Einheit, Wert, Herkunft, Zeitangabe, DatUebernahme, Gueltig) VALUES(-53101820,0,60,'V-KFZ','kmh',7.0,'FCD',to_date('2006-4-19 16:8:6', 'yyyy-mm-dd hh24-mi-ss'),to_date('2006-11-7 18:11:35', 'yyyy-mm-dd hh24-mi-ss'),'1');

Dabei wird folgende Fehlermeldung erzeugt:

Code:
java.sql.SQLException: ORA-00911: invalid character

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)

Mache ich das Ganze mit einer Oracle SQL Plus Konsole klappt es wunderbar:
Code:
SQL> INSERT INTO IVI.MesswFCD(RistkRef, VonPos, BisPos, Typ, Einheit, Wert, Herkunft, Zeitangabe, Da
tUebernahme, Gueltig) VALUES(-53101820,0,60,'V-KFZ','kmh',7.0,'FCD',to_date('2006-4-19 16:8:6', 'yyy
y-mm-dd hh24-mi-ss'),to_date('2006-11-7 18:11:35', 'yyyy-mm-dd hh24-mi-ss'),'1');

1 Zeile wurde erstellt.

Der Aufbau der Tabelle ist folgender:
Code:
 RISTKREF NOT NULL NUMBER(10)
 VONPOS NUMBER(3)
 BISPOS NUMBER(3)
 TYP NOT NULL CHAR(5)
 EINHEIT NOT NULL CHAR(10)
 WERT NOT NULL NUMBER(10,2)
 HERKUNFT NOT NULL CHAR(10)
 ZEITANGABE NOT NULL TIMESTAMP(6)
 DATUEBERNAHME NOT NULL DATE
 GUELTIG NOT NULL CHAR(1)

Warum ist das so? Was mache ich falsch?

Danke für die Hilfe.

Basti
 
Kein Problem. Und wo wir schon mal dabei sind: ein INSERT zusammenbauen, so wie man es von der Shell gewöhnt ist, und dann in RIchtung Oracle schicken geht natürlich. Wesentlich effizienter ist es allerdings, ÜBERALL wo es geht PreparedStatements - mit anderen Worten gebundenes SQL - einzusetzen. Die Performanceunterschiede sind gerade im Bereich Datenimport sehr deutlich spürbar.
 
habe das gleiche problem bei mir tritt auch ein Fehler auf könnt ihr mal nachschaue:
CODE:
Code:
import java.sql.*;

import oracle.jdbc.driver.*;
import oracle.sql.*;

public class GetInsert 
{

	public static void main(String[] args)
	{
		
		try        
		{   
			DriverManager.registerDriver(new OracleDriver());            
			Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "fenerium");                        
			   
			
			//Hinzufügen eines neuen Arbeitnehmer
			/*(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, " +
			"EMAIL, PHONE_NUMBER, DEPARTMENT_ID, JOB_ID, 
			SALARY, MANAGER_ID, HIRE_DATE, GEB_ID) */
			String insertQuery = "INSERT INTO employees VALUES(" +
					"211 " +
					"'Kiefer'" +
					"'Heinl'" +
					"'has" +
					"'06131/21212'" +
					"'01.10.2007'" +
					"'AC_SPEZ'" +
					"7500" +
					"101" +
					"80" +
					"'23.06.1988"+
					")";
			PreparedStatement pstmt = conn.prepareStatement(insertQuery);
			pstmt.executeUpdate();
			//stmt.executeUpdate(insertQuery);
			System.out.println("INSERT durchgeführt");
			insertQuery = "SELECT * FROM EMPLOYEES ORDER BY MANAGER_ID";
			ResultSet rSet = pstmt.executeQuery(insertQuery);
			while (rSet.next())
				System.out.println("MANAGER_ID: " + rSet.getInt("MANAGER_ID") + " - " + rSet.getString("SALARY") + " - " +rSet.getString("LAST_NAME"));                                   
			rSet.close();            
			pstmt.close();            
			conn.close();        
		}        
		catch(SQLException e)        
		{            
			System.err.println("error messgae: " + e.getMessage());
			e.printStackTrace();
			Runtime.getRuntime().exit(1);       
		} 
	}
}


dieser Fehler tritt auf:
Code:
error messgae: ORA-00917: Komma fehlt

java.sql.SQLException: ORA-00917: Komma fehlt

	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
	at insert.GetInsert.main(GetInsert.java:38)

Datenbankstruktur:
Code:
"EMPLOYEE_ID" NUMBER(6,0), 
"FIRST_NAME" VARCHAR2(20), 
"LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE, 
"EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE, 
"PHONE_NUMBER" VARCHAR2(20), 
"HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE, 
"JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE, 
"SALARY" NUMBER(8,2), 
"COMMISSION_PCT" NUMBER(2,2), 
"MANAGER_ID" NUMBER(6,0), 
"DEPARTMENT_ID" NUMBER(4,0), 
"GEB_ID" DATE
 
Moin!
"211 " +
"'Kiefer'" +
"'Heinl'" +
"'has" + //<- da fehlt ein hochkomma
"'06131/21212'" +
"'01.10.2007'" +
"'AC_SPEZ'" +
"7500" +
"101" +
"80" +
"'23.06.1988"+ // <- da auch
")";

Wieso nutzt du denn eigentlich ein PreparedStatement, wenn du dann doch nicht dessen Vorteile nutzt?
Siehe mal hier:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html
Das hätte auch bei deinem Hochkomma Problem geholfen

*grüssle*
MeinerEiner
 
habe die Spalte hinzugefügt die noch nicht vorhanden war jetzt kommt folgender Fehler:

Code:
error messgae: ORA-02291: Integritäts-Constraint (HR.EMP_JOB_FK) verletzt - übergeordneter Schlüssel nicht gefunden

java.sql.SQLException: ORA-02291: Integritäts-Constraint (HR.EMP_JOB_FK) verletzt - übergeordneter Schlüssel nicht gefunden

	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
	at insert.GetInsert.main(GetInsert.java:39)
 

Neue Beiträge

Zurück