String tiedosto="C:\\cb\\table.DBF";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:dBASE-tiedostot");
stm=conn.createStatement();
stm.executeUpdate("delete from " tiedosto);
stm.executeUpdate("INSERT INTO " tiedosto "(NAME) VALUES ('MATTI')");
Ohessa olevan koodin toiminta hämmästyttää.
Vaikka koodi poistaa koko taulukon sisällön, koko levyllä
ei pienene. Jokaisen kutsun jälkeen taulukon koko kasvaa..
vaikka taulukossa pitäisi olla vain yksi rivi tietoa.
Kutsuttaessa monta kertaa kyseistä metodia taulukon koko on useita MB?
miksi? jos katson tiedostoa hexsana, vanhat tiedot eivät katoa minnekään, vaikka kyselyssä tulee vain yksi rivi tietoa.
Onko tämä joku ODBC ongelma?
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:dBASE-tiedostot");
stm=conn.createStatement();
stm.executeUpdate("delete from " tiedosto);
stm.executeUpdate("INSERT INTO " tiedosto "(NAME) VALUES ('MATTI')");
Ohessa olevan koodin toiminta hämmästyttää.
Vaikka koodi poistaa koko taulukon sisällön, koko levyllä
ei pienene. Jokaisen kutsun jälkeen taulukon koko kasvaa..
vaikka taulukossa pitäisi olla vain yksi rivi tietoa.
Kutsuttaessa monta kertaa kyseistä metodia taulukon koko on useita MB?
miksi? jos katson tiedostoa hexsana, vanhat tiedot eivät katoa minnekään, vaikka kyselyssä tulee vain yksi rivi tietoa.
Onko tämä joku ODBC ongelma?
Vastaukset 2
Vanhimmat
Rivit vain merkataan poistetuiksi. Tietokanta ei toimisi kovin tehokkaasti jos se pyrkisi pitämään itsensä kokoajan kompaktissa muodossa.
En tunne tuota dbasea mutta luulisi löytyvän jotain keinoja kutistaa kantaa ja laittaa tämä tapahtumaan automaattisesti vaikka kerran viikossa hiljaiseen aikaan jos se häiritsee.
Esim, sqlite tukee komentoa nimeltä vacuum... joka poistaa turhat taulut jne... luultavasti käyttämäsi tietokanta tukee jotain vastaavaa.