android - problems with my SQLiteOpenHelper -
package com.owen.quartergames.dao; import java.io.inputstream; import java.util.arraylist; import java.util.list; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import org.w3c.dom.document; import org.w3c.dom.nodelist; import android.content.contentvalues; import android.content.context; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.util.log; import android.widget.toast; import com.owen.quartergames.r; import com.owen.quartergames.domain.logentry; public class sqllitefishloggerdao extends sqliteopenhelper implements fishloggerdao { private static final string db_name = "fishinglog"; private static final string table_name = "logentries"; private static final string delete_log_entry_sql = "delete logentries _id = ?;"; private static final string find_log_entry_sql = "select _id, longitude, latitude logentries _id = ?"; private static final string find_all_entries_sql = "select * logentries"; private static final string[] no_args = {}; private context context; private final sqlitedatabase db = getwritabledatabase(); public sqllitefishloggerdao(context context) { super(context, db_name, null, 1); this.context = context; } @override public void deletelogentry(string id) { id = "0"; db.execsql(delete_log_entry_sql, new object[] { id }); // int deleted = db.delete(table_name, "_id = ?", // new string[] { id.trim() }); // log.i("fishlogger", string.format("delete %d rows", deleted)); db.close(); } @override public logentry findentry(string id) { cursor cursor = db.rawquery(find_log_entry_sql, new string[] { id }); if (!cursor.movetofirst()) { return null; } logentry entry = new logentry(); entry.setid(id); entry.setlatitude(cursor.getdouble(cursor.getcolumnindex("latitude"))); entry .setlongitude(cursor.getdouble(cursor .getcolumnindex("longitude"))); cursor.close(); db.close(); return entry; } @override public void insertlogentry(logentry entry) { contentvalues values = new contentvalues(); values.put("latitude", entry.getlatitude()); values.put("longitude", entry.getlongitude()); values.put("pictureurl", entry.getpictureurl()); values.put("sizeorweight", entry.getsizeorweight()); values.put("createdate", entry.getentrydate()); values.put("species", entry.getspecies()); db.insertorthrow("logentries", null, values); db.close(); } @override public void oncreate(sqlitedatabase db) { string s; try { toast.maketext(context, "1", 2000).show(); inputstream in = context.getresources().openrawresource(r.raw.sql); documentbuilder builder = documentbuilderfactory.newinstance() .newdocumentbuilder(); document doc = builder.parse(in, null); nodelist statements = doc.getelementsbytagname("statement"); (int = 0; < statements.getlength(); i++) { s = statements.item(i).getchildnodes().item(0).getnodevalue(); db.execsql(s); } } catch (throwable t) { toast.maketext(context, t.tostring(), 50000).show(); } log.e("db", "db created"); } @override public list<logentry> findallentries() { list<logentry> entries = new arraylist<logentry>(); cursor cursor = db.rawquery(find_all_entries_sql, no_args); int entrydatecol = cursor.getcolumnindex("createdate"); int speciescol = cursor.getcolumnindex("species"); int sizecol = cursor.getcolumnindex("sizeorweight"); int latcol = cursor.getcolumnindex("latitude"); if (cursor.movetofirst()) { { logentry entry = new logentry(); entry.setentrydate(cursor.getstring(entrydatecol)); entry.setspecies(cursor.getstring(speciescol)); entry.setsizeorweight(cursor.getstring(sizecol)); entry.setlatitude(cursor.getdouble(latcol)); if (entry.getspecies() == null) { entry.setspecies("not entered"); } if (entry.getsizeorweight() == null) { entry.setsizeorweight("not entered"); } entries.add(entry); } while (cursor.movetonext()); } cursor.close(); db.close(); return entries; } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop table if exists " + table_name); oncreate(getwritabledatabase()); } } basically delete doesnt work think problems stems findallentries() method. reason "leak found" errors in log cat saying db created never closed. have throughly searched internet , have asked friends code no luck in solving problem. cursors closed , can tell how sqlliteopenhelper should like.
thanks responses
your getreadabledatabase() opens db read. avoid leaks, need close after work done.
final db = getreadabledatabase(); //do things db.close(); the same getwritabledatabase().
Comments
Post a Comment