android-不能打开 SQLite 数据库

问题描述

不能打开 SQLite 数据库

我使用下面的代码打开 SQLite 数据库:

dbHelper = new DataBaseHelper(context);
public static void open() throws SQLException {
    try {
        database = dbHelper.getWritableDatabase();
    } catch (Exception e) {
        e.printStackTrace();
        Log.d(Tag.getTag("open()"), "Can't open db");
    }
}

但是获得 NullPointerException 异常。下面是 DataBaseHelper 类

//declarations and stuff
public DataBaseHelper(Context context) {
    super(context, VFS_DATABASE_NAME, null, DATABASE_VERSION);
    this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    Toast.makeText(context, "Creating DataBase for first time...", 2000).show();
    db.execSQL(DATABASE_CREATE);

}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(DataBaseHelper.class.getName(),
            "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS" + VFS_DATABASE_TABLE);
    onCreate(db);
}

我找不出哪里出错。这个错误是如何发生的呢?
堆栈跟踪:

02-20 23:16:07.698: W/System.err(4685): java.lang.NullPointerException
02-20 23:16:07.698: W/System.err(4685):     at com.manager.boot.r1223.VSDataSource.open(VSDataSource.java:34)
02-20 23:16:07.698: W/System.err(4685):     at com.manager.boot.r1223.VSDataSource.ScanVirtualSystems(VSDataSource.java:52)
02-20 23:16:07.706: W/System.err(4685):     at com.manager.boot.r1223.OSListActivity.onCreate(OSListActivity.java:49)
02-20 23:16:07.706: W/System.err(4685):     at android.app.Activity.performCreate(Activity.java:4465)
02-20 23:16:07.706: W/System.err(4685):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
02-20 23:16:07.706: W/System.err(4685):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
02-20 23:16:07.706: W/System.err(4685):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
02-20 23:16:07.706: W/System.err(4685):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
02-20 23:16:07.706: W/System.err(4685):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
02-20 23:16:07.706: W/System.err(4685):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 23:16:07.706: W/System.err(4685):     at android.os.Looper.loop(Looper.java:137)
02-20 23:16:07.706: W/System.err(4685):     at android.app.ActivityThread.main(ActivityThread.java:4424)
02-20 23:16:07.706: W/System.err(4685):     at java.lang.reflect.Method.invokeNative(Native Method)
02-20 23:16:07.706: W/System.err(4685):     at java.lang.reflect.Method.invoke(Method.java:511)
02-20 23:16:07.706: W/System.err(4685):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-20 23:16:07.706: W/System.err(4685):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-20 23:16:07.706: W/System.err(4685):     at dalvik.system.NativeStart.main(Native Method)

解决方案

我认为是 static 中的问题,去掉它。
例如:

public class MyActivity extends ListActivity {

   private DatabaseHandler db;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);

    db = new DatabaseHandler(this);
    ...
}

解决方案二:

http://blog.csdn.net/zlqqhs/article/details/8607849

时间: 2016-08-31
Tags: android

android-不能打开 SQLite 数据库的相关文章

您是怎么看待服务器端数据库和android应用本地sqlite数据库

问题描述 您是怎么看待服务器端数据库和android应用本地sqlite数据库 一个线上的应用(比如说网易新闻)肯定是要跟服务器打交道的,但是当用户处于网络离线情况下,还能继续观看新闻(就是所谓的离线新闻),那么这些新闻数据肯定要保存在本地数据库(也有人说用json保存到文件里),那现在就有这样一个事情了.是不是有网就去服务器取数据,然后将取到的数据保存到本地的数据库(含数据更新),有些设置得更人性化的应用,还分是否2G/3G/wifi状态下读取服务器的数据. 服务器端数据库和本地数据库频繁的切

Android编程之SQLite数据库操作方法详解

本文实例讲述了Android SQLite数据库操作方法.分享给大家供大家参考,具体如下: SQLite and Android SQLite简介 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型包括: 1.

Android中的SQLite数据库简介

SQLite简介: SQLite是Android系统采用的一种开源的轻量级的关系型的数据库,Android中允许每个应用程序都拥有自己独立的数据库,每个应用程序的数据库的位置一般在/data/data/<package_name>/databases中.为了方便开发人员的使用,Android的API对增删查改实现了封装,通过SQLiteOpenHelper类可以方便的实现对数据库的创建和管理操作.不过正式的使用数据库之前,我们还要知道两个基本知识点. Content Values 和Curso

Android中使用SQLite数据库

项目源码下载 https://github.com/Wang-Jun-Chao/AndroidProjects SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper 必须定义一个构造方法: //arg1:数据库文件的名字 //arg2:游标工厂 //arg3:数据库版本 public MyOpenHelper(Context context, String name, CursorFactory factory, int version){} 数据

Android中操作SQLite数据库快速入门教程_Android

SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够.下面我们一起来看看针对Android平台的SQlite 3的使用. 以下概念都是在Android平台的SQlite限制下的理解: 数据库基础概念 1.SQlite 通过文件来保存数据库,一个文件就是一个数据库. 2.数据库里又包含数个表格: 3.每个表格里面包含了多个记录

Android App使用SQLite数据库的一些要点总结_Android

/DATA/data/包名/databases是该程序存放数据的目录,DATA是Environment.getDataDirectory() 方法返回的路径.找到数据库之后可以选中user.db 执行导出. 用真机调试,data目录如果打不开,说明你的手机没有root,改用模拟器就OK了. 1.获取SQLiteDatabase对象: SQLiteDatabase db = openOrCreateDatabase(File file, SQLiteDatabase.Cursor, Factory

Android中操作SQLite数据库快速入门教程

SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够.下面我们一起来看看针对Android平台的SQlite 3的使用. 以下概念都是在Android平台的SQlite限制下的理解: 数据库基础概念 1.SQlite 通过文件来保存数据库,一个文件就是一个数据库. 2.数据库里又包含数个表格: 3.每个表格里面包含了多个记录

android开发之sqlite数据库升级

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39151617 在上一篇文章中,我们学习了LitePal的基本用法,体验了使用框架来进行创建表操作的便利.然而大家都知道,创建表只是数据库操作中最基本的一步而已,我们在一开始创建的表结构,随着需求的变更,到了后期是极有可能需要修改的.因此,升级表的操作对于任何一个项目也是至关重要的,那么今天我们就一起来学习一下,在Android传统开发当中升级表的方式,以及使用LitePal来进行

Android开发当中SQLite数据库的应用

这个应该算是小型数据库了. 我在DJANGO开发中已不怎么用它啦. APP中,试一下用法吧. package com.tw.flag.ch15_sqlite; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.suppor