`
decentway
  • 浏览: 160073 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

android database leak found

阅读更多

package com.archermind;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "App.db";
private static final String DATABASE_TABLE = "t_app";
private static final int DATABASE_VERSION = 1;

private final String CREATE_TABLE = "create table if not exists "
    + DATABASE_TABLE + "(id integer not null ,"
    + "Name text not null," + "downUrl text not null,"
    + "state integer not null," + "image blob)";
public DBHelper(Context context) {
   super(context, DATABASE_NAME, null, DATABASE_VERSION);
   // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
   // TODO Auto-generated method stub
   db.execSQL(CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   // TODO Auto-generated method stub
   String sql = "drop table if exists" + DATABASE_TABLE;
   db.execSQL(sql);
   onCreate(db);
}


/**
* 查询取得结果集

* @return 结果集
*/
public Cursor query() {
   SQLiteDatabase db = this.getReadableDatabase();
   return db.query(DATABASE_TABLE, null, null, null, null, null, null);
}
/**
* 通过Id查询该应用
* @param Id
* @return
* 已存在返回true,否则false
*/
public boolean query(int Id) {
   SQLiteDatabase db = this.getReadableDatabase();
   Cursor cursor = db.query(DATABASE_TABLE, null, "Id = '" + Id
     + "'", null, null, null, null);
   if(cursor.moveToFirst()){
    cursor.close();
    return true;
   }
   cursor.close();
   return false;
}

/**
* 根据Id删除数据

* @param Id
*            应用的id
*/
public void delete(int Id) {
   SQLiteDatabase db = this.getWritableDatabase();
   db.delete(DATABASE_TABLE, "Id = '" + Id + "'", null);
}

/**
* 删除所有的数据
*/
public void delete() {
   SQLiteDatabase db = this.getWritableDatabase();
   db.delete(DATABASE_TABLE, null, null);
}

/**
* 插入数据,

* @param Id
* @param Name
* @param downUrl
* @param state
* @param image
*/
public void insert(int Id, String Name, String downUrl,
    int state, byte[] image) {
   SQLiteDatabase db = this.getWritableDatabase();
   ContentValues values = new ContentValues();
   values.put("Id", Id);
   values.put("Name", Name);
   values.put("downUrl", downUrl);
   values.put("state", state);
   values.put("image", image);
   db.insert(DATABASE_TABLE, null, values);
}
/**
* 通过Id来更新状态
* @param Id
* @param state 
*/
public void update(int appId,int state){
   SQLiteDatabase db = this.getWritableDatabase();
   ContentValues values = new ContentValues();
   values.put("state", state);
   db.update(DATABASE_TABLE, values, "Id = '" + Id + "'", null);
}
}

在操作数据库的时候 DDMS会报出07-05 10:37:19.093: ERROR/Database(4799): Leak found的错误.
就是数据库连接打开后没有关闭的~

//执行sql语句
public void execSQL(String sql){
       SQLiteDatabase db = ...
       db.execSQL(sql);
       db.close();
}

//查询
SQLiteDatabase db = .....
Cursor cur = db.rawQuery(sql, null);
   if(cur!=null){
       if(cur.moveToFirst()){
       do{
       //........                               
            } while(cur.moveToNext());
}
cur.close();        //关闭游标
}
db.close();

分享到:
评论

相关推荐

    Android中Memory Leak原因分析及解决办法

    "Android中Memory Leak原因分析及解决办法" Android中Memory Leak原因分析及解决办法是Android开发过程中的重要问题之一。Memory Leak是指在Android应用程序中,一些对象不能被正确释放,导致这些对象继续占用内存...

    使用Android Studio检测内存泄露(LeakCanary)

    内存泄露在Android开发中是一个非常重要的问题,因为它可能导致应用程序运行缓慢、消耗过多资源甚至崩溃。Android Studio提供了多种工具帮助开发者检测和解决内存泄露,其中包括Memory Profiler和LeakCanary。 ...

    Android_memory-leak-debugging.pdf.zip_Android memory le_android_

    本资源"Android_memory-leak-debugging.pdf.zip"聚焦于Android平台上的内存泄漏调试,这对于从事Android游戏开发的专业人士来说尤其重要。 内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存...

    Android Handler leak分析及解决办法详解

    Android Handler leak 分析及解决办法  In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their target Handler. ...

    training-leak-canary:这是Android实施Leak Canary的程序

    `training-leak-canary-main`是一个示例项目,它展示了如何在Android应用中集成和使用LeakCanary。该项目可能包含以下内容: 1. **初始化**: 在Application类中初始化LeakCanary,设置日志级别和是否在生产环境中...

    memory leak tools for android

    在Android开发中,内存泄漏是一个严重的问题,它会导致应用程序性能下降,甚至引发应用无响应(ANR)等问题。为了确保应用的稳定性和高效性,开发者需要掌握如何检测和解决内存泄漏。本文将深入探讨Android内存泄漏...

    Visual Leak Detector 2.23

    《Visual Leak Detector 2.23:高效精准的内存泄漏检测利器》 在软件开发过程中,内存泄漏是一个常见的问题,它可能导致程序性能下降,甚至崩溃。为了确保软件的稳定性和可靠性,开发者需要对内存泄漏进行有效的...

    leak测试代码

    本篇将详细探讨"leak测试代码",特别是针对Android环境下的内存泄漏检测和复现。 首先,我们要理解什么是内存泄漏。在计算机科学中,内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间。在Android系统中...

    visual leak detector 2.2

    visual leak detector 2.2 VS2010 VS2008检测内存泄露

    Visual Leak

    【Visual Leak】是一款专为C++开发者设计的内存检测工具,它的主要功能是帮助程序员定位并修复程序中的内存泄漏问题。内存泄漏是编程中常见的错误,尤其是在动态内存管理较为复杂的C++环境中,它可能导致程序运行...

    80-NJ221-1-REV-B-Android-Memory-Leak-Debug-User-Guide

    本文档“80-NJ221-1-REV-B-Android-Memory-Leak-Debug-User-Guide”是高通公司原创的一份专业指南,旨在帮助开发者理解和解决Android平台上的内存泄漏问题。 ### 1. Android内存泄漏概述 1.1 Android内存泄漏是指...

    Visual leak dector V2.0

    **Visual Leak Detector V2.0** 是一款专为开发者设计的高效内存泄漏检测工具,尤其适用于使用Microsoft Visual Studio开发C++应用程序的环境。这个工具的主要目的是帮助程序员在软件开发过程中定位并消除内存泄漏...

    leaktracker-适用于Android和Java的内存泄漏跟踪库

    内存泄漏是程序开发中常见的问题,尤其是在Android和Java这样的垃圾回收(GC)环境中。`leaktracker`是一个专为Android和Java平台设计的内存泄漏跟踪库,它可以帮助开发者检测和定位应用程序中的内存泄漏,从而提高...

    leak_detector_c

    【标题】"leak_detector_c" 是一个针对C语言编程的内存泄漏检测工具,它包含两个C++源文件和一个头文件。这个工具的核心目的是帮助程序员跟踪和管理内存分配,以便更好地防止内存泄漏问题。 【描述】中提到,"leak_...

    BREW Memory Leak Checker 20120219

    This program is a tool that help you positioning memory leak locations of an QUALCOMM BREW application on simulator. It can give the call stack of memory leaks (including the locations that MALLOC/...

    Leak_monitor

    Leak_monitor for Firefox 4.0-18

    Visual Leak Detector 内存泄漏检测 源码 + 安装

    Visual Leak Detector是一款强大的内存泄漏检测工具,专为C++开发者设计,用于帮助找出程序中的内存泄漏问题。内存泄漏是编程中常见的错误,当程序分配了内存但未能正确释放时,就会发生内存泄漏,长时间运行可能...

Global site tag (gtag.js) - Google Analytics