这个利用sqlite写的数据库为什么退出应用后再进去数据库就无法找到了啊

package com.sample.Sample_8_4;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Sample_8_4 extends Activity {
private Button baseButton;
private Button tableButton;
private Button btn_sqlmod, btn_cvmod, btn_qur;
private final String dbName = "mydb";
private final String tableName = "users";
private SQLiteDatabase db = null;
private int i = 1;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.main);
    baseButton = (Button) findViewById(R.id.base); // 实例化Button对象
    baseButton.setOnClickListener(new OnClickListener() { // 为Button对象添加监听
                public void onClick(View v) {
                    db = openOrCreateDatabase(dbName, MODE_PRIVATE, null); // 创建名为“mydb”的数据库
                    db.endTransaction();
                    Toast.makeText(getApplicationContext(), "创建数据库成功", 1000)
                            .show();
                }
            });

    tableButton = (Button) findViewById(R.id.table); // 实例化Button对象
    tableButton.setOnClickListener(new OnClickListener() { // 为Button对象添加监听
                public void onClick(View v) {
                    if (db != null) {
                        creatTable(); // 开始创建数据库表
                    } else {
                        Toast.makeText(getApplicationContext(), "没有数据库",
                                1000).show();
                    }
                }
            });

    btn_sqlmod = (Button) findViewById(R.id.sql_mod);
    btn_sqlmod.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (db != null) {
                sql_executeData();
            } else {
                Toast.makeText(getApplicationContext(), "没有数据库", 1000)
                        .show();
            }
        }
    });

    btn_cvmod = (Button) findViewById(R.id.cv_mod);
    btn_cvmod.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (db != null) {
                cv_executeData();
            } else {
                Toast.makeText(getApplicationContext(), "没有数据库", 1000)
                        .show();
            }
        }
    });

    btn_qur = (Button) findViewById(R.id.que);
    btn_qur.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (db != null) {
                queryData();
            } else {
                Toast.makeText(getApplicationContext(), "没有数据库", 1000)
                        .show();
            }

        }
    });
}

public void creatTable() {
    // 创建表的SQL语句,创建一个名为users的表,该表有id,uname和pwd三个字段
    String sql = "CREATE TABLE IF NOT EXISTS "
            + tableName
            + " (id INTEGER PRIMARY KEY AUTOINCREMENT, uname VARCHAR(50), pwd VARCHAR(50));";
    db.execSQL(sql); // 执行sql语句
    db.endTransaction();
    // 查询sqlite_master表中类型为table的记录的name字段
    Cursor cursor = db.query("sqlite_master", new String[] { "name" },
            "type = ?", new String[] { "table" }, null, null, null, null);
    String tables = "";
    if (cursor.getCount() != 0) { // 判断查询结果的条数是否为0
        cursor.moveToFirst(); // 游标指向第一条记录
        for (int i = 0; i < cursor.getCount(); i += 1) {
            tables = tables + cursor.getString(0) + " "; // 累加字符串
            cursor.moveToNext(); // 游标下移
        }
    }
    // 把累加的结果显示在一个信息框中
    new AlertDialog.Builder(Sample_8_4.this).setTitle("Message")
            .setMessage(tables)
            .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            }).show();
}

public void sql_executeData() {
    String sql;
    for (; i < 4; i++) {
        sql = "insert into " + tableName + " values ('" + i
                + "','a','123456')"; // 添加一条记录
        db.execSQL(sql);
        db.endTransaction();
    }

    sql = "update " + tableName + " set pwd='654321' where id='1'"; // 修改一条记录
    db.execSQL(sql);
    db.endTransaction();
    sql = "delete from " + tableName + " where id='2'"; // 删除一条记录
    db.execSQL(sql);
    db.endTransaction();
    Toast.makeText(getApplicationContext(), "使用SQL语句修改数据成功", 1000).show();
}

public void cv_executeData() {
    ContentValues cv = new ContentValues(); // 实例化ContentValues对象
    cv.put("uname", "b"); // 插入字段值
    cv.put("pwd", "987654"); // 插入字段值
    db.insert(tableName, null, cv); // 执行insert方法
    db.insert(tableName, null, cv); // 执行insert方法
    db.insert(tableName, null, cv); // 执行insert方法

    cv = new ContentValues(); // 实例化ContentValues对象
    cv.put("pwd", "456789"); // 插入字段值
    db.update(tableName, cv, "id=?", new String[] { "4" }); // 执行update方法

    db.delete(tableName, "id=?", new String[] { "5" }); // 执行delete操作

    Toast.makeText(getApplicationContext(), "使用Android语句修改数据成功", 1000)
            .show();
}

public void queryData() {
    Cursor cursor = db.query(tableName, null, null, null, null, null, null,
            null); // 执行query操作获得Cursor对象
    String str = "";
    if (cursor.getCount() != 0) { // 判断返回的记录条数
        cursor.moveToFirst(); // 游标指向第一条记录
        for (int i = 0; i < cursor.getCount(); i += 1) {
            str = str + cursor.getString(0) + " " + cursor.getString(1)
                    + " " + cursor.getString(2) + "\n"; // 获取一条记录的每个字段的值
            cursor.moveToNext(); // 游标指向下一条记录
        }
    }
    // 在信息框上显示所有记录信息
    new AlertDialog.Builder(Sample_8_4.this).setTitle("Message")
            .setMessage(str)
            .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            }).show();
}

}

0

3个回答

1

看一下有没有commit

0

楼主修改完数据之后 未提交 被回滚了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
安卓开发中使用sqlite数据库时打不开data/data目录的问题解决
做安卓开发时,借助SQLiteOpenHelper编写数据库操作代码,当我想下载数据库到本机看看的时候发现在ddms中的file explorer中根本无法打开data/data目录,找了半天最后知道了原因,是因为我的设备没有取得root权限的原因,想办法把设备root即可解决。
解决:Android使用自带sqlite开发时,apk中创建的数据库外部的进程是没有权限去读/写的,而且无法如何读取指定目录下的db文件
SQLiteOpenHelper是Android框架为我们提供的一个非常好的数据库打开、升级与关闭的工具类。但是这个工具类会自动把db文件创建到“ /data/data/com.*.*(package name)/” 目录下,这么做可能是与Android文件系统的设计思路有关。 但是在实战过程中,我们可能有各种原因需要自定义db文件路径(例如db文件较大放到sd卡更安全等等),相信很多人都遇
使用Django内置Web服务器和sqlite3遇到的问题及解决方法
1. 执行django-admin.py  startproject  mysite命令无法创建项目mysite 解决方法:  1)首先确认django-admin.py文件的安装路径已添加到系统变量PATH中,如C:\Python32\Scripts;  2)替换上述命令:python C:\Python32\Scripts\django-admin.py  startproject  m
按Home按键退出应用后重新启动该应用无法返回到最后打开页面的解决方案
按Home按键退出应用后重新启动该应用无法返回到最后打开页面的解决方案 2014年12月20日 [目录]   比如我打开应用到MatchActivity,正常的启动流程是:SplashActivity -> MainActivity -> MatchActivity,在MatchActivity界面按HOME键返回到桌面,如果长按HOME,在最近打开应用列表中重新打开
数据库操作语句写错,导致sqlite建表出现错误,查不到添加的数据,粗心导致
实践《第一行代码》的例子出现的粗心错误public static final String CREATE_BOOK = "create table Book (" +"id integer primary key autoincrement, " +"author text, " +"price real, " +"pages inte
android数据库添加字段失败
更新版本应用时数据库更新添加字段,可是取数据是还是报错,找不到字段,清楚数据后才不报错代码如下 public static void UpgradedVersion6To7(SQLiteDatabase db) {      try {        DebugUtils.LOG_D("jimbray", "*****" + "添加字段" + "*********");      db.e
用DDMS找到android数据库并且将sqlite数据库可视化
原创噢
SQLite创建数据库失败
1.现象:.创建不出来数据库, 解决:测试用的项目包明以db结尾了,重新创建项目改成dbtest就没事了。 2.现象;创建出来数据库,但是数据库中没有表项 解决:db.execSQL("create table " + TABLE_NEWS_NAME + " ( " + TABLE_NEWS_ID + " integer primary key autoincrement, " + TABL
如何解决 Unity3D 引用 SQLite 数据库类不能发布可执行文件
文章来自:http://www.easyunity3d.com/sqlite-database.html 如何解决 Unity3D 引用 SQLite 数据库类不能发布可执行文件 今天工作时遇到的问题: Unity3D Version: 3.5.6 f4 工程使用的是 SQLite 数据库,引用 using Mono.Data.Sqlite 项目工程不能发布可执行文件,进度条到
为什么要使用 SQLite 数据库?
SQLite 是一个被大家低估的数据库,但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它...
【Android问题记录】为什么在终端直接查询数据库可以查到数据但是用代码总是查不到
作者:Yogi前言:在SecureCRT中,通过sqlite命令查询数据库,明明是有数据的,为什么代码中获取到的cursor总是为null呢?总结: Uri1:content://com.szjiuzhou.tvprovider/CONFIGURATIONUri2:content://com.szjiuzhou.tvprovider/configuration这2个uri代表的是2个不同的表哦。代
sqllite数据库错误---试图写一个只读的数据库
在windows7操作系统下,访问sqllite数据库,提示:"attempt to write a read-only database 试图写一个只读的数据库"错误 System.Web.Services.Protocols.SoapException 服务器无法处理请求 ---------->System.Data.Sqlite.SQLiteException:  attempt
SQLite中插入数据报没有找到表问题
no such table: tb_expert 插入数据的时候,说没有找到表,修改数据库版本准备重新建表,发现表全部被drop了,但是表没有重新建立起来 1.如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件。在创建前数据库一般是空的,因此不需要先删除数据库中相关的组件。     2.如果数据
Android 数据库SQLite更新升级问题
Android中数据持久化存储可以使用SQLite,常用的是SQLiteOpenHelper。这样就会引申出一些数据库升级的问题。比如,数据库V1版本中原始表中只有2个字段,在升级数据库V2版本中想要在表中多加1个字段。或者是 用户直接安装的是数据库V2版本,如何保证所有表中的字段是最新的?假设有数据库V1,数据库V2,数据库V3。存在2种安装情况,都要考虑到。 1,首先安装V1,依次升级
qt sqlite找不到数据库问题
QSqlDatabase db; if(QSqlDatabase::contains("qt_sql_default_connection")) db = QSqlDatabase::database("qt_sql_default_connection"); else db = QSqlDatabase::addDatabase("QSQLITE"
sqlite中插入数据无效
在使用insert(table, nullColumnHack, values)向数据库插入数据时,出现插入数据无效。 数据库代码:(ID为主键) public static void insert(Photo photo) { ContentValues cv = new ContentValues(); cv.put(ID, photo.getId()); cv.pu
AndroidStudio中打不开数据库的问题
1、首先进入到自己项目的APP下的 Gradle Scripts 下的 build.gradle 中  2、然后里面的文件是这样的  3、你只需要在他的里面添加这样一句,然后在Sync now 一下就好了 4、接着来到这里(Androidstudio自带的命令输入的地方) ,在里面输入命令    5、记住tcp:8080 要输入俩遍不然就会报出(意思就是前面要有俩个参数)...
sqlite数据库中有数据,但是程序里面却看不到数据,程序没有问题,解决办法!!!
在使用PDA的过程中,发现数据库有数据,但是程序里面却看不到数据,程序没有问题,刚开始一直怀疑是程序的问题,但是其他的pda采用这套程序,使用过程中都没有出现这个问题    往上找了很多资料,和调试bug,问题一直没有解决.    经过多次寻找,产生的此问题的可能原因如下:    1.pda当前的年月日和数据库的对应表的时间对不上, 如pda没有同步时间的时,默认的时间是1970.1.1,如
Android 数据库插入数据总是失败的原因
今天遇到很郁闷的问题、我在android项目中往数据库中插入一条数据总是插入失败,Log日志提示我没有找到该字段,我是检验了数据库很久、明明有该字段,之前好像也遇到过这样的问题,当时是解决了、郁闷的是现在忘了当时是怎么解决的,要是当时记录了该多好啊,导致现在浪费这么多时间解决重复的问题,后面我无意中发现我数据库字段后面多了一个空格,我猜是不是这个原因,后面我把空格去掉后,就可以了,,原来就是因为这
qt 数据库表不存在则创建
方法一:获取此表的数量,如果数量不为0则存在 QSqlQuery *m_pQuery = new QSqlQuery(m_msgdb); if( m_pQuery->exec(QString("select count(*) from sqlite_master where type='table' and name='WarnMsg'")))  //关键的判断 { m_pQuery->n
关于Android studio连接数据库的问题
正如安卓开发工程师所言的,本地数据库,直接用sqlite; 如果想要用云端数据库,一般不建议android设备直接连数据,并不是一个简单的导入jar就可以成功的,因为很多手机他的底层并没有数据库的链接驱动,就算这台手机可以,那台手机也可能是不可以的。 而且安全性是个很大的问题,android直连云端数据库,就算是毕业设计,验收也不会给你过吧。建议实现服务器端,搭建app——服务器——数据库这样...
sqlite文件大小问题,删除不干净,彻底清空数据库
问题描述: sqlite中删除了大量数据后,数据库文件的大小没有变。 update更新数据库,文件大小翻倍。   原因: 当你从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。   解决: sqlite操作全部完成后,执行 VACUUM 命令。
Android 中 导入已存在的 sqlite数据库时出现的问题
1》刚开始时我导入sqlite数据库放在了asserts下面,我按照网上的例子最后发现是我的“包名”出了问题,我现在用Android studio 以前用的时eclipse  ,所以习惯性的我就应用了mainfaset下面的包名了,所以不管我怎么读取sqlite文件总是打不开数据库。。。。。。。包名要到grid里面去拿,下面是创建数据库的代码。。 package com.yzkj.utils
如何将带数据的SQLite数据与apk程序一起发布
如何将带数据的SQLite数据与apk程序一起发布             任何文件(包括SQLite数据库文件)与apk程序一起发布都必须将该文件嵌入到apk文件中。对于SQLite数据库来说,安卓的程序不能打开和操作嵌入在apk程序中的数据库文件。因此,需要想办法在程序第一次启动时就将SQLite数据库复制到手机内存或者SD卡上,然后才能再来操作SQLite数据库。           这
打开sqlite数据库失败
今天准备打开sqlite数据库的时候出现了这个错误 之前一直都是好好的,就今天用模拟器一打开app就出现这个问题,这是怎么回事?
Debugexperience about SQLite & LitePal:创建数据库闪退?注意小括号
参考资料:《第一行代码》 源码(码云): 今天在做一个SQLite的Demo,在Create一个数据库的时候居然闪退:          UI: 还以为是权限问题结果看一下logcat,额。。。 发现了这一句, 其实就是SQL语句少了一个右括号(第18行): 嗯,编写程序的时候,要细心一点。 *****另外,在添加...
sqlite 更新数据后重启被还原的问题
sqlite 更新数据后重启被还原的问题 最近调查一个问题,用sqlite3 记录一条item,显示成功后机器直接断电重启发现数据没有变化。 明明操作已经显示success了,为什么数据没有写进去呢?
Android sqlite数据库update之后数据查询数据获取不实时。。。
最近写项目的时候用android自带的数据库SqliteDatabase,使用过程中发生了这样一件事情,我在Activity B中读取数据库表User中的数据,显示在UI上,然后跳转到Activity A,在 Activity A中对数据库表 User 中的某一条数据进行了数据的update更新操作,完成之后A关闭,返回 Activity B,本人采用了EventBus事件总线通知 Activit...
sqlite打开路径含中文的数据库文件失败的问题
打开数据库文件使用:sqlite3_open16即可
sqlite3更新数据库问题 SQL执行成功但数据库数据不改变
数据库打开 执行SQL一切正常 但是就是数据库的字段不更新 擦了!找了好久,求大神们看看!!!   if ([self openDB]) {                          //char *errormsg;             sqlite3_stmt *statement;//这相当一个容器,放转化OK的sql语句             NSString 
SQLiteDataBase(通过测试类测试写好的SQLite的相关数据库操作)
SQLiteDataBase(通过测试类测试写好的SQLite的相关数据库操作) 1.首先,创建数据库: 创建一个DbHelper.java的类 package com.example.sqldatabase; import android.content.Context; import android.database.DatabaseErrorHandler; import a
sql/sqlite/sqlite3 创建和打开数据库
#include #include #include #include "sqlite3\\sqlite3.h" #pragma comment (lib, "sqlite3\\sqlite3.lib") static const char* data = "Callback function called"; static int callback(void *data, int arg
Android.SQLite数据库:初始化数据库并插入默认数据记录注意点
初学Android程序。之前做VB.Net程序设计时,对SQLite有所了解和使用。 参考网络上的代码,写了一个小程序。项目需要在数据库初始化时候插入一些默认的数据记录。 遇到一些错误。记录此文,及供做提醒。
Linux下使用sqlite解决不能退出...>的方法。
本人在初次使用sqlite时,由于不熟悉命令行操作,导致只要稍微输错就会就如...&amp;gt;而不知道如何退出。 方法。在...&amp;gt;后输入“;” 在按下回车,即可退出此模式。 (进入了...&amp;gt;)   (输入“;”后,即可进入命令模式)...
利用SQLite数据库实现登陆和注册
http://www.cnblogs.com/greatverve/archive/2011/12/27/2301601.html
Android复习练习十二(自定义ContentProvider实现其他应用操作本应用SQLite数据库)
需求:自定义一个简单的ContentPro
关于sqlite3删除表内数据后,数据库大小仍然不 变的问题
最近由于项目的需要,用到了sqlite3数据库相关的操作。因为之前用的是QT中自带的,不是用C语言来操作,不过总的来说相差不大。之前是在 操作数据库过程中,会导致内存不断的增加。后来是发现操作的过程中很多内存没有释放。但是最近又有新的问题是,在我删除表中的数据后,发现数据库文件的大小仍然不变,而且下次打开数据库后,发现仍然占用着系统的内存。找了很多方法,终于让我找到了根本原因。原来是因为从Sqli
利用pandas实现从数据库读写数据
可以使用pandas的  1、read_sql_query来执行sql语句 2、read_sql实现获取整个表的数据 3、to_sql实现向数据库中添加数据 ---------------------------------------------------------------------------------------------------------------------
SQLite使用事务大幅提高批量数据写入数据库的速度
工具 读取Excel:NPOI 结果 先直接放出对比吧,数据量,3500多条。 不使用事务 使用事务 18655ms 55ms 问题 在目前的项目中,经常需要把外部的数据导入导出到数据库中。但是外部数据导入到数据库中,耗费的时间太长,让人用着特别不爽。测试的数据量为3500条,整个导入到数据库耗时18955ms,差不多就是19秒了,而且数据量并不算大。 后来,经过分析,发现...
解决Sqlite数据库,数据删除后占用空间不变的问题
sqlite数据库库文件在使用过后,随着数据的增多,文件大小也会随之变大。但是在把所有表中数据删除以后发现sqlite数据库文件大小没有变化,还是占用原来大小的空间。 造成这种情况的原因是:sqlite在之前使用的时候,随着数据的插入,会分配磁盘空间来供使用,在删除数据以后,未使用的磁盘空间会被添加到一个内在的“空闲列表”中用于存储下次插入的数据,磁盘空间不会随着数据的删除而释放给操作系统。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 数据库课程学到了啥 数据库课程学到了啥