android 查看数据库高手帮帮我,数据库问题?

Android数据库高手秘籍(一):SQLite命令 - 文章 - 伯乐在线
& Android数据库高手秘籍(一):SQLite命令
要想熟练地操作任何一个数据库,最最基本的要求就是要懂SQL语言,这也是每个程序员都应该掌握的技能。虽说SQL博大精深,要想精通确实很难,但最基本的一些建表命令,增删改查,大家还是必须要学会的。
SQL(Structured Query Language)是一种标准的数据库查询语言,即所有的关系型数据库都会支持它,只不过每种数据库对SQL语言的支持与标准存在着细微的不同。我们无须关心其它数据库对SQL语言的支持情况,这里我们只要把重点放在SQLite上就可以了。下面我将使用模拟器来对SQLite支持的各种命令进行演示,如果你想用手机的话也可以,但要确保你的手机已经Root,并且包含sqlite3这个命令文件。
首先确保模拟器已经连接上了电脑,然后在命令行输入adb shell进入控制台,如下图所示:
注意#符号表示我们当前已经是超级用户了,如果显示的是$符号,表示当前只是普通用户而已,这时还需要输入su命令切换一下用户身份才行。
有了超级用户权限之后,我们能做的事情就很多了,这里我们先查看一下系统自带的联系人表吧。进入到/data/data目录下,如下图所示:
所有应用程序的本地存储文件都是存放在这个目录下面的。为了要让不同应用程序之间的数据容易区别开来,Android是使用应用程序包名进行分开管理,也就是说每个应用程序的本地存储文件都会存放在自己应用程序包名的那个目录下,这里我们ls一下看看有多少子目录:
OK,确实有很多,毕竟手机上所有的应用程序都在这里。其中,com.android.providers.contacts中存放的就是联系人的相关数据,我们进入到这个目录再ls一下:
可以看到,目前有databases、files、lib和shared_prefs这几个子目录。其中databases肯定是用于存放数据库文件的,files是用于存放普通文本文件的,lib是用于存放so库的,shared_prefs则是用于存放shared文件的。这是Android数据持久化的几种可选方式,对这部分内容不太了解的朋友可以参考的第六章。
接着进入到databases目录中,再ls:
其中后缀名为journal的文件是日志文件,我们不用管,contacts2.db和profile.db才是真正的数据库文件,可以使用sqlite3命令来打开数据库,如下图所示:
好的,数据库已经打开了,那么我们怎么才能知道当前数据库中有哪些表呢?很简单,.table命令就可以做到了:
哇,竟然有这么多张表!是的,联系人的数据结构非常复杂,很多的数据都是分表存储的。这里我们随便挑一张表,比如说accounts表,如果我想知道这张表中有哪些列应该怎么办呢?在MySQL中可以使用desc accounts这个命令,但SQLite却不认识这个命令,毕竟它们是有差异化的。SQLite中可以使用pragma table_info(TABLE_NAME)这个命令来查看表的数据结构,如下图所示:
可以看到,一共显示了三条结果,表示accounts表中共有三列。但是,所有的字段都缩在了一行里面,并用“|”符号分隔,这样我们很难看出每个字段的含义。很简单,只需要换一种显示模式就行了,比如说line模式就挺不错的。输入.mode line命令切换显示模式,然后重新运行pragma命令,结果如下图所示:
怎么样,这样就清晰多了吧?这三列的列名分别是account_name、account_type和data_set,数据类型都是TEXT(字符串),允许为空,并且都不是主键。好,那我现在想查一查accounts表中的数据呢?这就太简单了,使用select语句就可以了,如下所示:
恩?怎么只有一条空数据啊。貌似模拟器上默认就是这样的,如果你用的是手机的话,这里应该就可以查到真正的数据了。不过没关系,我们可以在设置里面手动添加一个邮箱账户,如下图所示:
现在再来重新查询一遍accounts表,如下所示:
OK,添加的新账户已经成功查出来了。
除了查询命令之外,还有其它的增删改命令都和标准的SQL语法是相同的,即insert、delete和update,由于比较简单,我就不再赘述了。比较值得一提的是,每个SQLite数据库中都还有一个隐藏的sqlite_master表,这里记载了当前数据库中所有表的建表语句,可以使用select * from sqlite_master命令进行查看:
结果太多了是不是?一屏根本就显示不下嘛。不要着急,别忘了我们使用的是select命令,可以使用where语句来过滤出我们想要查询的那部分内容,如下图所示:
OK,CREATE TABLE accounts (account_name TEXT, account_type TEXT, data_set TEXT) 这就是accounts表的建表语句了,通过这种方式我们可以查询到任意一张表的建表语句,从而对我们学习和分析数据库表结构有所帮助。
有些朋友可能会觉得,每次都要输入select命令来查询表中的数据太麻烦了。没错,而且还要保证手机是连接在电脑上的时候才能查询,确实太不方便。幸运的是,有些手机软件已经提供了数据库表查询的功能,使得我们随时随地都可以方便地查看数据库中的数据,比如Root Explorer这款软件就不错。
仍然是确保你的手机已经Root,然后安装Root Explorer,打开软件之后按照我们前面介绍的路径,进入/data/data/com.android.providers.contacts/databases,点击contacts2.db数据库,选择内置数据库查看器,然后随便点击一张表就可以查看到里面的数据了,如下图所示:
使用这种方法,我们可以随时查看数据库表中的最新数据,直观又方便,在程序开发的时候可以起到非常大的帮助。
好了,今天的讲解就到这里,下篇文章当中我将带领大家探究Android数据库中更多的奥秘。感兴趣的朋友请继续阅读
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线求救啊高手帮帮我_android吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,131,189贴子:
求救啊高手帮帮我收藏
用re 管理器打开系统文件夹后全都是英语,不知道删除哪个呀,该怎么办,我的手机是威盛8650
好的话剧,坚决不能错过,价格也很重要!
谁让你删里面东西的
删掉点没用的不就反应快了嘛
别在意那么点运程
可是他反应的速度和g 1快差不多了
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或进来看看帮帮我大神们,SQlite问题_android开发吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:111,203贴子:
进来看看帮帮我大神们,SQlite问题收藏
为什么写不进去数据呢?
找android开发靠谱的平台来快包,为你提供多种移动开发解决方案,免费发布需求,即刻匹配优质服务商,满意后在付款,安全有保障!
不是都显示执行了吗 ?创建SQ就的弄了半天 现在又写不进去
谢谢你,我已经解决了。
万一火了呢?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Android数据库高手秘籍(二)
我的图书馆
Android数据库高手秘籍(二)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/
上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的。但是我们都知道,数据库是要和程序结合在一起使用的,单独对一个数据库去进行増删改查操作并没有什么意义,因此今天我们就来学习一下如何在Android程序当中去操作SQLite数据库,还没看过前一篇文章的朋友可以先去参考 Android数据库高手秘籍(一)——SQLite命令&。
操作数据库的第一步当然是创建表了,传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之外,还会讲解LitePal这个框架的基本用法,并使用它来完成同样的建表操作,让大家体会到使用框架来操作数据库的魅力。
那么先来简单介绍一下吧,LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发时最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表、増删改查的操作。并且LitePal很“轻”,jar包只有100k不到,而且近乎零配置,这一点和Hibernate这类的框架有很大区别。目前LitePal的源码已经托管到了GitHub上,地址是 /LitePalFramework/LitePal&。
OK,简单介绍完了LitePal,我们还是先来看一下,在传统的Android开发中,需要怎么去创建表。
传统的建表方式
其实为了方便我们对数据库表进行管理,Android本身就提供了一个帮助类:SQLiteOpenHelper。这个类集创建和升级数据库于一身,并且自动管理了数据库版本,算是一个非常好用的工具。
那我们现在就来试试SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。本篇文章只需要把注意力放在创建数据库这里就行了,升级数据库我们会在下一篇文章中去讨论。
新建一个MySQLiteHelper类并让它继承SQLiteOpenHelper,这样一个最基本的数据库帮助类的代码如下所示:
[java] view plaincopy
public&class&MySQLiteHelper&extends&SQLiteOpenHelper&{&&
&&&&public&MySQLiteHelper(Context&context,&String&name,&CursorFactory&factory,&&
&&&&&&&&&&&&int&version)&{&&
&&&&&&&&super(context,&name,&factory,&version);&&
&&&&@Override&&
&&&&public&void&onCreate(SQLiteDatabase&db)&{&&
&&&&@Override&&
&&&&public&void&onUpgrade(SQLiteDatabase&db,&int&oldVersion,&int&newVersion)&{&&
其中,当数据库创建的时候会调用onCreate()方法,在这里去执行建表操作就可以了。比如说我们想新建一张news表,其中有title,content,publishdate,commentcount这几列,分别代表着新闻标题、新闻内容、发布时间和评论数,那么代码就可以这样写:
[java] view plaincopy
public&class&MySQLiteHelper&extends&SQLiteOpenHelper&{&&
&&&&public&static&final&String&CREATE_NEWS&=&"create&table&news&("&&
&&&&&&&&&&&&+&"id&integer&primary&key&autoincrement,&"&&
&&&&&&&&&&&&+&"title&text,&"&&
&&&&&&&&&&&&+&"content&text,&"&&
&&&&&&&&&&&&+&"publishdate&integer,"&&
&&&&&&&&&&&&+&"commentcount&integer)";&&
&&&&public&MySQLiteHelper(Context&context,&String&name,&CursorFactory&factory,&&
&&&&&&&&&&&&int&version)&{&&
&&&&&&&&super(context,&name,&factory,&version);&&
&&&&@Override&&
&&&&public&void&onCreate(SQLiteDatabase&db)&{&&
&&&&&&&&db.execSQL(CREATE_NEWS);&&
可以看到,我们把建表语句定义成了一个常量,然后在onCreate()方法中去执行了这条建表语句,news表也就创建成功了。这条建表语句虽然简单,但是里面还是包含了一些小的细节,我来解释一下。首先,根据数据库的范式要求,任何一张表都应该是有主键的,所以这里我们添加了一个自增长的id列,并把它设为主键。然后title列和content列都是字符串类型的,commentcount列是整型的,这都很好理解,但是publishdate列该怎么设计呢?由于SQLite中并不支持存储日期这种数据类型,因此我们需要将日期先转换成UTC时间(自号零点)的毫秒数,然后再存储到数据库中,因此publishdate列也应该是整型的。
现在,我们只需要获取到SQLiteDatabase的实例,数据库表就会自动创建了,如下所示:
[java] view plaincopy
SQLiteOpenHelper&dbHelper&=&new&MySQLiteHelper(this,&"demo.db",&null,&1);&&
SQLiteDatabase&db&=&dbHelper.getWritableDatabase();&&
感觉很简单很方便是吗?那你就太容易满足了,下面我们就来学习一下LitePal的基本用法,看一看使用这个框架是如何实现同样的功能的。
LitePal的基本用法
虽说LitePal宣称是近乎零配置,但也只是“近乎”而已,它还是需要进行一些简单配置才可以使用的,那么我们第一步就先快速学习一下LitePal的配置方法。
1. 引入Jar包或源码
首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可。下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了,如下图所示:
如果你不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到Eclipse当中,再让我们的项目去引用这个library库就可以了。
2. 配置litepal.xml
接着在项目的assets目录下面新建一个litepal.xml文件,并将以下代码拷贝进去:
[html] view plaincopy
&?xml&version="1.0"&encoding="utf-8"?&&&
&litepal&&&
&&&&&dbname&value="demo"&&&/dbname&&&
&&&&&version&value="1"&&&/version&&&
&&&&&list&&&
&&&&&/list&&&
&/litepal&&&
配置文件相当简单,&dbname&用于设定数据库的名字,&version&用于设定数据库的版本号,&list&用于设定所有的映射模型,我们稍后就会用到。
3. 配置LitePalApplication
由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了,如下所示:
[html] view plaincopy
&manifest&&&
&&&&&application&&
&&&&&&&&android:name="org.litepal.LitePalApplication"&&
&&&&&&&&...&&
&&&&&/application&&&
&/manifest&&&
当然,有些程序可能会有自己的Application,并在这里配置过了。比如说有一个MyApplication,如下所示:
[html] view plaincopy
&manifest&&&
&&&&&application&&
&&&&&&&&android:name="com.example.MyApplication"&&
&&&&&&&&...&&
&&&&&/application&&&
&/manifest&&&
没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:
[java] view plaincopy
public&class&MyApplication&extends&LitePalApplication&{&&
但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。
仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。
前面在介绍的时候已经说了,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。
但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。
那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,如下所示:
[java] view plaincopy
package&com.example.databasetest.&&
public&class&News&{&&
然后,表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段,代码如下所示:
[java] view plaincopy
public&class&News&{&&
&&&&private&int&&&
&&&&private&String&&&
&&&&private&String&&&
&&&&private&Date&publishD&&
&&&&private&int&commentC&&
&&&&//&自动生成get、set方法&&
其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。
这里我要特别说明一下,LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的。根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。
那么有的朋友可能会问了,既然是自动映射的话,如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射的话,只需要将它改成public、protected或default修饰符就可以了。
现在模型类已经建好了,我们还差最后一步,就是将它配置到映射列表当中。编辑assets目录下的litepal.xml文件,在&list&标签中加入News模型类的声明:
[html] view plaincopy
&?xml&version="1.0"&encoding="utf-8"?&&&
&litepal&&&
&&&&&dbname&value="demo"&&&/dbname&&&
&&&&&version&value="1"&&&/version&&&
&&&&&list&&&
&&&&&&&&&mapping&class="com.example.databasetest.model.News"&&/mapping&&&
&&&&&/list&&&
&/litepal&&&
注意这里一定要填入News类的完整类名。
OK,这样所有的工作就都已经完成了,现在只要你对数据库有任何的操作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:
[java] view plaincopy
SQLiteDatabase&db&=&Connector.getDatabase();&&
调用一下上述代码,news表就应该已经创建成功了。我们使用在上一篇文章中学到的SQLite命令来查看一下,打开demo.db数据库,输入.table命令,结果如下图所示:
可以看到,news表已经存在了。另外两张android_metadata和table_schema表是自动生成的,我们不用理。接下来我们还可以再查询一下news表的建表语句,如下图所示:
这就是LitePal根据News类中的字段自动帮我们生成的建表语句,由此也说明,建表操作已经成功完成了。
好了,到目前为止你已经算是对LitePal的用法有点入门了,那么本篇文章的内容就到这里,下篇文章当中我们将学习使用LitePal进行升级表的操作。感兴趣的朋友请继续阅读 Android数据库高手秘籍(三)——使用LitePal升级表&。
发表评论:
TA的最新馆藏android的数据库帮助类,空指针异常
android的数据库帮助类,空指针错误。
问题:去sqlite数据库里查了下,表格建好了,数据也打印了出来。为什么会报空指针错误呢?
错误代码:return db.insert(TB_SONG, null, cv); 第81行。
08-09 09:42:55.574: I/System.out(2370): cv------&SongType=guonei SongUrl=asd _id=11 SongName=zhangsan
08-09 09:42:55.585: D/AndroidRuntime(2370): Shutting down VM
08-09 09:42:55.595: W/dalvikvm(2370): threadid=3: thread exiting with uncaught exception (group=0x)
08-09 09:42:55.595: E/AndroidRuntime(2370): Uncaught handler: thread main exiting due to uncaught exception
08-09 09:42:55.614: E/AndroidRuntime(2370): java.lang.NullPointerException
08-09 09:42:55.614: E/AndroidRuntime(2370):
at com.xiuman.XMPlayer_DB.DatabaseHelper.insertSong(DatabaseHelper.java:81)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at com.xiuman.XMPlayer_DB.MainActivity$InsertListener.onClick(MainActivity.java:54)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.View.performClick(View.java:2364)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.View.onTouchEvent(View.java:4179)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.widget.TextView.onTouchEvent(TextView.java:6541)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.View.dispatchTouchEvent(View.java:3709)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.os.Handler.dispatchMessage(Handler.java:99)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.os.Looper.loop(Looper.java:123)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at android.app.ActivityThread.main(ActivityThread.java:4363)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at java.lang.reflect.Method.invokeNative(Native Method)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at java.lang.reflect.Method.invoke(Method.java:521)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-09 09:42:55.614: E/AndroidRuntime(2370):
at dalvik.system.NativeStart.main(Native Method)
08-09 09:42:55.635: I/dalvikvm(2370): threadid=7: reacting to signal 3
08-09 09:42:55.635: E/dalvikvm(2370): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
java代码:
package com.xiuman.XMPlayer_DB;
import java.util.ArrayL
import java.util.L
import android.content.ContentV
import android.content.C
import android.database.C
import android.database.SQLE
import android.database.sqlite.SQLiteD
import android.database.sqlite.SQLiteDatabase.CursorF
import android.database.sqlite.SQLiteOpenH
public class DatabaseHelper extends SQLiteOpenHelper{
private static final String DB_NAME = &XWPlayer_DB&; //数据库名
private static final int VERSION = 1;//数据库版本
private static final String TB_SONG = &Song_TB&;
private static final String TB_PLAYERLIST = &PlayerList_TB&;
public static final String Song_id = &_id&;
public static final String Song_Name = &SongName&;
public static final String Song_Url = &SongUrl&;
public static final String Song_Type = &SongType&;
public static final String PlayerList_id = &_id&;
public static final String PlayerList_Name = &SongName&;
public static final String PlayerList_SingerName = &SingerName&;
private static SQLiteD
private static DatabaseHelper DBH
private final String Create_TB_SQL =&create Table &+TB_SONG+& (_id integer primary key autoincrement, SongName text not null, SongUrl text, SongType text)&;
private final String Create_TB_SQL2 =&create table &+TB_PLAYERLIST+& (_id integer primary key autoincrement, SongName text not null, SingerName text not null)&;
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
public DatabaseHelper(Context context, String name) {
this(context, DB_NAME, VERSION);
public DatabaseHelper(Context context, String name, int version) {
this(context, DB_NAME, null, VERSION);
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println(&execute create table sql&);
db.execSQL(Create_TB_SQL);
db.execSQL(Create_TB_SQL2);
public DatabaseHelper open() throws SQLException
db = DBHelper.getWritableDatabase();
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL(Create_TB_SQL);
db.execSQL(Create_TB_SQL2);
onCreate(db);
* 增加记录
public long insertSong(int _id, String SongName, String SongUrl, String SongType) {
ContentValues cv = new ContentValues();
cv.put(Song_id, _id);
cv.put(Song_Name, SongName);
cv.put(Song_Url, SongUrl);
cv.put(Song_Type, SongType);
System.out.println(&cv------&& + cv);
return db.insert(TB_SONG, null, cv);
public long insertPlayerList(String SongName, String SingerName) {
ContentValues cv = new ContentValues();
cv.put(PlayerList_Name, SongName);
cv.put(PlayerList_SingerName, SingerName);
return db.insert(TB_PLAYERLIST, null, cv);
* 删除记录
public int deleteSong(int _id) {
String[] whereValue={Integer.toString(_id)};
return db.delete(TB_SONG, &_id=?&, whereValue);
public int deletePlayerList(int _id) {
String[] whereValue={Integer.toString(_id)};
return db.delete(TB_PLAYERLIST, &_id=?&, whereValue);
* 更新记录
public int updateSong(int _id, String songName, String songUrl, String songType) {
ContentValues cv = new ContentValues();
String[] whereValue={Integer.toString(_id)};
cv.put(Song_Name, songName);
cv.put(Song_Url, songUrl);
cv.put(Song_Type, songType);
return db.update(TB_SONG, cv, &_id=?&, whereValue);
public int updatePlayerList(int _id, String songname, String singername) {
ContentValues initialValues = new ContentValues();
String[] whereValue={Integer.toString(_id)};
initialValues.put(PlayerList_Name, songname);
initialValues.put(PlayerList_SingerName, singername);
return db.update(TB_PLAYERLIST, initialValues, &_id=?&, whereValue);
* 查询记录
public Cursor selectSong() {
SQLiteDatabase db = getReadableDatabase();
return db.query(TB_SONG, new String[]{&_id&,&SongName&,&SongUrl&, &SongType&}, &id=?&, new String[]{&1&}, null, null, & _id desc&);
public Cursor selectPlayerList() {
SQLiteDatabase db = getReadableDatabase();
return db.query(TB_PLAYERLIST, new String[]{&_id&,&SongName&,&SingerName&}, &id=?&, new String[]{&1&}, null, null, & _id desc&);
public List&Song& getAllSongObj()
List&Song& SongSet = new ArrayList&Song&();
Cursor c = db.query(TB_SONG, new String[] {Song_id, Song_Name, Song_Url, Song_Type},null,null,null,null,null);
for(c.moveToFirst(); ! c.isAfterLast(); c.moveToNext()){
Song song = new Song();
song.setSongId(c.getInt(0));
song.setSongName(c.getString(1));
song.setSongUrl(c.getString(2));
song.setSongType(c.getString(3));
SongSet.add(song);
c.close();
return SongS
public List&PlayerList& getAllPlayerListObj()
List&PlayerList& PlayerListSet = new ArrayList&PlayerList&();
Cursor c = db.query(TB_PLAYERLIST, new String[] {PlayerList_id, PlayerList_Name, PlayerList_SingerName},null,null,null,null,null);
for(c.moveToFirst(); ! c.isAfterLast(); c.moveToNext()){
PlayerList pl = new PlayerList();
pl.setId(c.getInt(0));
pl.setSongName(c.getString(1));
pl.setSingerName(c.getString(2));
PlayerListSet.add(pl);
c.close();
return PlayerListS
getWritableDatabase()出现空指针错误 代码如下
public class broad extends BroadcastReceiver{
// 数据库变量
DatabaseHelper mDBH;
public static final String DATABASE_NAME = &power.db&;
Android数据库的问题 数据已经导入数据库,接下来怎么写程序实现把数据库放入data/data/包/database下呢? 求大神指点~~
------解决方案--------------------
String dbPath=android.os.Environment.getExternalStorageDirectory().getPath();
android如何兼容本地数据库 前一段时间做了公司的android项目,因为有些数据量较大,采用的本地的SQLite附加模式用的本地数据库,然后,最近android4.1更新,结果发现4.1不兼容。。用到本地数据库就报错,求大神解决。。
------最佳解决方案-------------------- 报什么错....
------其他解决方案-------------------- 数据库
pc通过usb操作android的sqlite数据库 如题,本人开发一个android程序,由于涉及到保密,是禁止无线网络的,但需要连接上pc服务器数据库进行数据的上传和更新,只能通过USB来操作。原来解决的方法是先通过adb pull将sqlite的db文件拷到pc上,通过PC上的应用程序更新好数据库后在通过adb push将db数据文件拷回android的平板电脑中,但这样拷贝数据所耗的时间过
android联系人应用如何调到数据库操作的? 比如说ContactSaveService怎么联系到ContactsProvider2的,通过哪些函数?
------最佳解决方案-------------------- 主要是通过获得ContentResolver类对数据库进行操作的
finalContentResolverresolver&n
android 如何实现附加现有数据库?而不是每次安装的时候都创建 android如何实现附加现有数据库?而不是每次安装的时候都创建新的数据库。
最近做一个应用,在数据库中要内置很多数据,但有不想在每次安装的时候都重新创建数据库并插入数据,原因是插入数据时间较长,用户体验不好,所以特地想问问大家,有没有什么办法,让我一次吧数据库的内容都
android远程连接mySQL数据库失败,求救?? 最近在做一个android查询mysql数据库服务器,用的是JDBC,但不知为何在建好的android项目里总是连接不上数据库。自己做的另一个java文件可以本地访问,也可以远程访问,就是建好的项目不行,检查了两天没解决,求高手指点。(功能清单上已经把internet的权限和单元测试配置好了)
public class GetData { p
catch时exception信息指针为空 什么情况下会出现ioe的空指针异常?如下代码
重写googlemap的ItemizedOverlay时候空指针异常。。。 当重写的调用Populate()方法时一直出现空指针异常。为什么呢。。。求大神
public class MyItems extends ItemizedOverlay&OverlayItem&{ public MyItems(Drawable defaultMarker) { sup
请教用android调用C#的WebService,实现把图片传递到远程数据库 请问一下,想让android调用C#的WebService,实现把图片传递到远程数据库(SQL SERVER 2000)保存,和调用,能不能实现啊?
能不能给点提示,代码就更好了!
在网上查了半天,只看到有把图片传到远程目录下的,不能保存到到数据库。
------解决方案-------------
简单的BindService的Demo,总是空指针异常 这是Service
public class MyService extends Service { MyBinder my = new MyBinder(); public class MyBinder extends Binder{ public int getCount(){ return 5994; } }
Android类库介绍
android.util 涉及系统底层的辅助类库  android.os 提供了系统服务、消息传输、IPC管道  android.graphics GPhone图形库,包含了文本显示、输入输出、文字样式  android.database 包含底层的API操作数据库(SQLite)  android.content 提供了各种数据传输、服务、资源管理  android.v
android手机直连sqlserver数据库 有人做过这方面的实例吗?可以连接sqlserver数据库?
------解决方案-------------------- 不可以,大型数据库是不能在手机上运行的,只能用服务端在数据库读取,然后传递到手机上
------解决方案-------------------- 貌似手机端没有这么做的,虽然比较省事,一般的做法就是使用webservice
android AIDL 调用空指针,求高手解答 今天写了一个AIDL的需求,但是调用AIDL文件方法异常,请哪位高手,帮忙看一下,谢谢!!!
①taobaoLoginClientA
com.taobao.platformservice ---ITBPlatformService.aidl com.taobao.taobaologinclient ---LoginContext.java --
请问大家多线程操作sqlite数据库时如何处理的呢? 请问大家多线程操作sqlite数据库时如何处理的呢?
------解决方案--------------------
http://blog.csdn.net/ch_/article/details/6621647
------解决方案--------------------
同一个数据库可以被多个线程同时读,但是不能
数据同步到本地SQLite数据库上 现在要实现数据同步,同步到本地的时候,脱机也能使用的。现在我遇到的问题是 怎么样将服务器端的数据库内的数据保存到我本地的数据库中。请高手指点下!急用,急用急用!
------解决方案--------------------
1.服务器端提供数据接口,从接口中获得数据保存到本地数据库 2.连接远程服务器端数据库获得数据,保存到本地数据库。
保持同步 检测数
Android类库常用类型解析
在Android类库中,各种包写成android.*的方式,重要包的描述如下所示: android.app :提供高层的程序模型、提供基本的运行环境 android.content 包含各种的对设备上的数据进行访问和发布的类 android.database :通过内容提供者浏览和操作数据库 android.graphics :底层的图形库,包含画
android程序运行空指针问题。 调试程序报错空指针。 我是在网上找别人的代码。
Mylocation.java
package com.swift.
import java.io.IOE
import java.util.L
import java.util
接收短信存储到数据库的问题? Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get(&pdus&);
SmsMessage[] messages = new SmsMessage[pdus.le
查询SIM里的联系人报空指针异常 public class ContactsActivity extends Activity {
private TelephonyManager cTelephonyM
private String strS
private ListView contacts_
private TextView contacts_item_id
Android 第二次启动报空指针
这些天在搞andorid方面的东西,发现了一个问题困扰了我好1个多小时!!
老是说onCreate()方法是空指针!
不知道各位大大遇见这个问题没有?
但是我在建第二个程序的时候就不会出现这样的问题。。
我没有去深究这个问题,如果各位有这个问题的解决方案麻烦跟跟帖!!
Android 异步查询框架AsyncQueryHandler的使用
AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据)
在一般的应用中可以使用ContentProvider去操作数据库。
这在数据量很小的时候是没有问题的,但是如果数据量大了,可能导致UI线程发生ANR异常(超过5秒)。
当然你也可以
使用自定义的SimpleAdapter,内容由数据库读取生成的listiew如何更新 如题,请问如何更新。
SimpleCursorAdapter有changeCursor可以刷新,SimpleAdapter该如何做呢?单单的adapter.notifyDataSetChanged()没有效果。谢谢!
------解决方案--------------------
要不再试试重置adapte
android:通过findViewById试图获取界面元素对象为Null,运行会提示空指针异常
造成这种结果一般有3中情况 第一是:未加载布局文件,也就是没有设置布局之前,就findViewById(),这样肯定获取不到了,这第二是:View应该是树形的组织,从当前所在的contentview中找不到,要设置contentview为包含有所要find的contentview;
Android类库打包方法探究
开发Android应用的时候,对于可用于多个应用的公用的部分,或是打算发布给第三方进行应用集成的部分,要把这部分打包成类库怎么做呢?众所周知,Android应用使用ADT打包成apk,apk中包含了运行程序所需要的一切,包括:class、asset、res、AndroidManifest.xml等。而对于类库项目(library project),ADT生成的ja
从assets中读取的文件转化成了Bitmap,Canvas绘制时报空指针。代码..... private Bitmap getImageFromAssetsFile(String fileName)
Bitmap image =
AssetManager am = getResources().getAssets(); &nbsp
Baseadapter出现空指针,求解!!! 当运行程序是报主Activity中的maina_gallery.setAdapter(adapter);是空指针?我也不知道该怎么改,希望各位大侠帮帮忙。
以下是BaseAdapter代码:
publicclassMyBaseAdapterextendsBaseAdapter&
android的数据存储和访问 附源码
android提供了几种文件的存储方式; 1.文件: 2.SharedPreferences存储类似软件的配置参数设置的内容;这是一个类; 3.sqlite数据库 android内嵌的数据库,和微软的excel数据库原理一样,当你创建一个数据库时是以文件的形式存放的;sql语句很类似的; 4.网络 5.content provider //////////
我要疯了。。这句SQL数据库查询语句错在哪儿??
float m = 0,n=0; String str=&南京&; Cursor cur6=m_SQLiteDatabase.query(TABLE_NAME, new String[] {KEY_NUMBER,KEY_LATITUDE,KEY_LONGITUDE}, KEY_CITY + &
Android Api 常用类库包介绍
这个是我从山岭巨人的博文中转载过来的: /playing/archive//2208274.html
我觉得这个很适合刚开始学习Android的同学。可以给你起到一个指导思想的作用。当你不知道该如何学习的时候,当你觉得无聊的时候,想看看Api的时候,不妨可以从中选一个来看看。个人
SQLite一个数据库可以同时打开两张表吗? 比如:
mDBH = new DatabaseHelper(this); db = mDBH.getWritableDatabase();
cur_db = db.query(TABLE_NAME, col, null, null, null, null, null); cur_db_2 = db.query(TABLE_NAME_2,
WebView的异常
异常如图。代码没有问题。空指针也不是代码的异常。有人知道什么情况吗?
------解决方案-------------------- 代码没问题就不会报空指针了。贴出来看看
------解决方案-------------------- handler没有注册完就使用了。
Android教程(2.0) - 四个主干类的介绍
作者微博 : /haric
[闲言碎语 ]
啰嗦几句先-.-, 按我的经验,对一个新的平台学习步骤大概是 1 对项目结构的了解 2 对平台中构成一个应用程序骨架主要类的学习 3 UI类(这个直观又容易入手,培养开发的感觉) 4 该平台上数据库,多线程, 文件操作,绘图,网络通讯API等的使用,到这一步
五种android 数据存储 最全面的android数据存储介绍。
在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网
想进A activity时判断数据库没这条数据,就弹一个按钮吧!然后进B activity,返回时弹出窗还在,怎么返回时去除 AlertDialog dialog = new AlertDialog.Builder(activity).setTitle(&选择新任务&)
.setPositiveButton(&选择新任务&, new DialogInter
Android SQLiteDatabase运行异常logcat处理问题 我在复写onPase()和onDestroy()方法的时候,关闭了数据库和游标,会什么还是会出现这样的异常?不明白,求高人指点 01-03 07:54:23.978: E/SQLiteDatabase(1921): close() was never explicitly called on database '/data/
请教一个Android API 帮助文档的问题 在阅读android官方文档中,看到很多类名或者接口名中间带有一个点“.”,比如
publicstaticinterface
View.OnClickListener
publicstaticclass
ScaleGestureDetector.SimpleOnScal
Android实现更改头像
前段时间就做的这个项目,一直没能运行成功,说是空指针异常。。今天突然看到,又小小研究了一番,终于运行成功~写篇博客和大家分享一下,希望大家不要犯和我一样的错误哦~ 阶段一:进行主界面的布局
android salite3 使用实例
实例在附件。请下载。
声明 本文转自:/247725.htm
我们大家都知道Android平台提供给我们一个数据库辅助类来创建或打开数据库,这个辅助类继承自SQLiteOpenHelper类,在该类的 构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象。继承和扩
【求助】Android SDK 4.2的帮助文档API在哪里? 下载好最新版本4.2后,没有找到API官方文档在那个文件夹
或者如何从官方下载到本地呢。记得之前的版本是有专门
的一个文件夹Docs来放置帮助文档。
------最佳解决方案-------------------- 你可以去androiddeveloper学习那里是最标准的api文档

我要回帖

更多关于 android 查看数据库 的文章

 

随机推荐