Statement stmt = null;
stmt = con.createStatement();
stmt.executeQuery("SELECT * FROM raw.drt");
stmt.executeUpdate("Insert into raw.drt values (" + sqlDate + "," + ch + "," +
licz + "," + kom + ")");
gdzie:
Date date = new Date();
java.sql.Date sqlDate;
sqlDate = new java.sql.Date(date.getTime());
char ch = 'g';
int licz = 122;
String kom = "ąĄćĆęĘłŁńŃóÓśŚźŹżŻ";
i otrzymuje taki exception:
java.sql.SQLException: ORA-00984: w tym miejscu, kolumna jest niedozwolona
at oracle.jdbc.driver.DatabaseError.throwSqlException
(DatabaseError.java:137)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:112)
at oracle.jdbc.driver.T4CStatement.execute_for_rows
(T4CStatement.java:481)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout
(OracleStatement.java:1101)
at oracle.jdbc.driver.OracleStatement.executeUpdate
(OracleStatement.java:1552)
co robie zle??
dzieki z gory za udzielona pomoc i wskazowki.
pozdro jimmie.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
i zobaczysz pewnie co jest źle. Na oko możliwe są co najmniej dwa
powody: sqlDate i ch. Pewnie nie są odpowiednio cytowane, co do daty to
penie i format jest do sprawdzenia (nie chcę się rozwodzić, ale nie wiem
jakiego typu jest Twoje sqlDate itd.)
Generalnie tworzenie SQL'a przez konkatancję łańcuchów jest złym
pomysłem, szczególnie jeżeli parametry są przekazywane przez użytkownika.
skolei kiedy to robie za pomoca PreparedStatment:
con.setAutoCommit(false);
PreparedStatement stmt = con.prepareStatement("INSERT INTO raw.drt VALUES
(?,?,?,?)");
stmt.setDate(1, sqlDate);
stmt.setString(2, ch);
stmt.setInt(3, licz);
stmt.setString(4, kom);
stmt.execute();
tu znak ch zamieniam na string.(wlasnie jak mozna char wlazyc do bazy za pomoca
PreparedStatement??)
to otrzymuje takie cóś:
java.sql.SQLException: ORA-02290: naruszono więzy kontrolne
at oracle.jdbc.driver.DatabaseError.throwSqlException
(DatabaseError.java:137)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8
(T4CPreparedStatement.java:181)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows
(T4CPreparedStatement.java:791)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout
(OracleStatement.java:1101)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal
(OraclePreparedStatement.java:2901)
at oracle.jdbc.driver.OraclePreparedStatement.execute
(OraclePreparedStatement.java:2992)
ponownie dziekuje z gory za pomoc jak i ponownie pozdrawiam.
Jak narazie jest to testowa tablica chce sie tylko zapoznac jak reaguje oracle
z roznymi typami danych.
zrobilem jak poleciles. oto wynik:
Insert into raw.drt values (2005-09-13,g,122,ąĄćĆęĘłŁńŃóÓśŚźŹżŻ)
hmmmm czy te dane nie powinny byc w ''? tak przynajmniej robilem gdy kozystalem
z MySQL'a.
jimmie
ehh wstawilem '' w zwlykly statement i jest ten sam exception co w preparedSt..
czyli:
java.sql.SQLException: ORA-02290: naruszono wiezy kontrolne
pozdro jimmie
>
To raczej wygląda na problem ze strukturą bazy. Masz checka na polu,
który nie pozwala wstawić takiej wartości
ORA-02290:
The value or values attempted to be entered in a field or fields violate
a defined check constraint.
Kula
sry za klopot i dzieki za odpowiedzi.