[EMAIL PROTECTED] napsal(a):
Diky mirku za reakci, alespon nekdo :o) s uzaviranim resultset jsem
experimentoval, bez vysledku. Nakonec se mi po notne dobe podarilo
vygooglit
reseni.
Musi se spravne vytvorit statement
misto
Statement statement = con.createStatement();
jsem pridal parametry
Statement statement =
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
Tak to mne opravdu taky prekvapilo (pises, ze s uzaviranim ResultSetu
jsi uz experimentoval a k vysledku to nevedlo). Pokud si prectu javadoc
k ResultSetu, tak TYPE_SCROLL_INSENSITIVE ma byt "The constant
indicating the type for a ResultSet object that is scrollable but
generally not sensitive to changes made by others", tj. je dovolen
update jinym zpusobem zatimco roluji timto ResultSetem, ktery mam k
dispozici, pokud to ctu spravne. Coz je rychlejsi a elegantnejsi
analogie "nejprve nacist, pak mazat", kterou jsem navrhoval, a ktera
nefunguje. Huh ... inu, clovek se porad uci :-))
Mirek
a k nemalemu prekvapeni to funguje.
Jinak nevim jestli je to DB2 nebo driverem ci co, ale prisel jsem na
pomerne
zajimavou anomalii. V uvadenem kodu dole, kde vkladam jednotlive
jazykove verze
statement.execute(sql1)
prestoze se prikaz vykona a zaznam se ulozi do databaze je vraceno false
nikoliv
true. Existuje pro to nejaky racionalni vysvetleni? :o)
Jiz vysvetleno, viz. javadoc.
Zdenek Kasparek
Quoting Mirek Stohr <[EMAIL PROTECTED]>:
Osobne se domnivam, ze chyba je v radku, kde volas znovu
statement.execute("delete ..."), aniz jsi ukoncil praci s ResultSetem,
ktery jsi dostal predchazejicim executeQuery. Zkus to rozdelit na dva
statementy, pripadne nejdrive nacist, a az pak mazat.
Je ale mozne ze pisu naproste nesmysly, nezkousel jsem s tim
experimentovat a strilim od boku.
Mirek
[EMAIL PROTECTED] napsal(a):
Dobry den,
byl bych velice vdecen za radu jelikoz uz nevim co stim.
Mam cvs soubor, ze ktereho dostavam jazykove verze a ty ukladam do
databaze (
DB2 )
kazdy zaznam v souboru ma svoje id. Ja ty zaznamy vypisuji cyklem a v
tom cyklu
volam nize uvedeny kod, ktery overi jestli existuje nejaky zaznam s
konkretnim
id uz v databazi a pokud ano, tak jej smaze a nasledne vlozi jazykove
verze.
Problem mam prave v casti ktera zjistuje jestli nejaky uz existuje a
kdyztak jej
maze. Porad at to zkousim jak chci, pokud zaznam existuje dostavam
error:
java.sql.SQLException: Cursor state not valid.
A nevim co stim.
Omlouvam se za lama dotaz. Je mi jasny, ze chyba je mezi zidli a
klavesnici.
Predem diky za radu.
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
// register driver
java.sql.DriverManager.registerDriver (new
com.ibm.as400.access.AS400JDBCDriver());
// create connection
Connection con = DriverManager.getConnection("jdbc:as400/ip", "user",
"pass");
// create statement
Statement statement = con.createStatement();
// enable making safety query
statement.setEscapeProcessing(true);
// check if some item with current id exist in table
ResultSet r = statement.executeQuery("SELECT COUNT(text_id) AS c FROM
LIB.HTML_TEXT WHERE text_id='" + id + "'");
// if item is exist remove it
while ( r.next() )
{
if ( Integer.parseInt(r.getString("c")) > 0 )
{
statement.execute("DELETE FROM LIB.HTML_TEXT WHERE
text_id='" + id + "'
");
}
}
// crete query for german version
String sql1 = "INSERT INTO LIB.HTML_TEXT (text_id, text_language,
html_text,
app_s) " + "VALUES ('"+id+"', 'GER', '"+ger+"', 1)";
// create query for english version
String sql2 = "INSERT INTO LIB.HTML_TEXT (text_id, text_language,
html_text,
app_s) " + "VALUES ('"+id+"', 'EN', '"+en+"', 1)";
// create query for french version
String sql3 = "INSERT INTO LIB.HTML_TEXT (text_id, text_language,
html_text,
app_s) " + "VALUES ('"+id+"', 'FR', '"+fr+"', 1)";
//execute queries and dump messages
if ( statement.execute(sql1) == true )
{
System.out.println(id + " sql1 item has been inserted");
}
if ( statement.execute(sql2) == true )
{
System.out.println(id + " sql2 item has been inserted");
}
if ( statement.execute(sql3) == true )
{
System.out.println(id + " sql3 item has been inserted");
}
con.close();
Zdenek Kasparek
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.