Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JAVA ORACLE INSERT

6 views
Skip to first unread message

jim...@interia.pl

unread,
Sep 13, 2005, 8:21:22 AM9/13/05
to
cze mam jedna tabele z kolumnami typu date, char, number, varchar.
uzyskuje polaczenie i wykonuje insert:

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

kula

unread,
Sep 13, 2005, 8:32:05 AM9/13/05
to
Zrób sobie System.out.println("Insert into raw.drt values (" + sqlDate +
"," + ch + "," +
licz + "," + kom + ")");

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.

jim...@interia.pl

unread,
Sep 13, 2005, 8:39:01 AM9/13/05
to


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.

jim...@interia.pl

unread,
Sep 13, 2005, 8:49:07 AM9/13/05
to

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

jim...@interia.pl

unread,
Sep 13, 2005, 8:53:57 AM9/13/05
to


ehh wstawilem '' w zwlykly statement i jest ten sam exception co w preparedSt..
czyli:

java.sql.SQLException: ORA-02290: naruszono wiezy kontrolne


pozdro jimmie

kula

unread,
Sep 13, 2005, 9:00:57 AM9/13/05
to
>
> 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
>
>

>
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

jim...@interia.pl

unread,
Sep 14, 2005, 4:00:16 AM9/14/05
to
ok znalazlem problem. ehhhh troche banalny a tyle problemu.
w tablicy byla stworzona kolumna typu number ktora przyjmuje wartosci od 0 do
100, a ja probowalem wstawic 122 i stad ten blad.

sry za klopot i dzieki za odpowiedzi.

0 new messages