安卓读取数据库的数据怎么 *** 作

安卓读取数据库的数据怎么 *** 作,第1张

public class DBHelper extends SQLiteOpenHelper {

public static final String TB_NAME = "mydemo_user";

public static final String ID = "_id";

public static final String NAME = "username";

public static final String PASSWORD = "passname";

public static final String ISCHECK = "ischecked";

//当前版本

public static int version = 1;

/

构造函数

@param context Context类型,上下文对象

@param name String类型,数据库的名称

@param factory CursorFactory类型

@param version int类型,数据库版本

/

public DBHelper(Context context, String name, CursorFactory factory,int version) {

super(context, name, factory, version);

thisgetWritableDatabase();

}

public void Close() {

thisgetWritableDatabase()close();

}

/

创建数据库

/

public void onCreate(SQLiteDatabase db) {

dbbeginTransaction();

try{

dbexecSQL("CREATE TABLE IF NOT EXISTS "

+ TB_NAME + " ("

+ ID + " INTEGER PRIMARY KEY,"

+ NAME + " VARCHAR,"

+ PASSWORD + " VARCHAR,"

+ ISCHECK + " VARCHAR)");

dbsetTransactionSuccessful();

}catch (Exception e) {

} finally {

dbendTransaction();//此时不能关闭数据库,不然创建数据库完成后,数据库不能使用

}

}

/

删除数据库

/

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

dbexecSQL("DROP TABLE IF EXISTS " + TB_NAME);

onCreate(db);

}

/

添加新用户

@param name

@param number

/

public void addUser(String username, String password,String isChecked) {

ContentValues values = new ContentValues();

valuesput(DBHelperNAME, username);

valuesput(DBHelperPASSWORD, password);

valuesput(DBHelperISCHECK, isChecked);

thisgetWritableDatabase()insert(DBHelperTB_NAME, DBHelperID, values);

}

/

删除单个用户

@param id

/

public void delUser(int id) {

thisgetWritableDatabase()delete(DBHelperTB_NAME, DBHelperID + " = " + id, null);

}

/

修改单个用户

@param id

/

public void updateUser(int id,String username, String password,String isChecked) {

ContentValues values = new ContentValues();

valuesput(DBHelperNAME, username);

valuesput(DBHelperPASSWORD, password);

valuesput(DBHelperISCHECK, isChecked);

String where = DBHelperID+"=";//设置条件

String[] whereValue = {IntegertoString(id)};//设置条件中的参数

thisgetWritableDatabase()update(DBHelperTB_NAME, values, where, whereValue);

}

/

删除多个用户

/

public void delAllUser() {

thisgetWritableDatabase()delete(DBHelperTB_NAME, null, null);

}

/

查询

@param username

@return

/

public List<Users> queryUser(String username){

List<Users> data = new ArrayList<Users>();

String[] columns = { DBHelperID, DBHelperNAME, DBHelperPASSWORD,DBHelperISCHECK };

String[] parms = { username };

String where = DBHelperNAME + "=";// 设置条件

Cursor result=null;

if(username!=null){

result = thisgetWritableDatabase()query(DBHelperTB_NAME,columns, where, parms, null, null, null);

}else{

result = thisgetWritableDatabase()query(DBHelperTB_NAME,columns, null, null, null, null, null);

}

resultmoveToFirst();//移动到第一行

while (!resultisAfterLast()) {//遍历数据

Users user = new Users(resultgetInt(0), resultgetString(1),resultgetString(2), resultgetString(3));

dataadd(user);

resultmoveToNext();

}

resultclose();

return data;

}

}

你可以重写下adapter,里面有个更新adapter的方法! 我觉得你是存储数据的list 没有更新,或者是想adapter传输的数据(比如你向adapter传输数据在list ,而你删除数据后你的list没有更改从而是它重写加载一次list)这样就不会出现删除的效果

一般用触发器来实现,也可以通过设置代理的方法实现:

如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,

可以用管理->SQL Server代理->作业来实现。

1、管理->SQL Server代理->作业(按鼠标右键)->新建作业->

2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->

分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]->

描述[填写本次工作详细描述内容];

[ 创建作业分类的步骤:

SQL Server代理->作业->右键选所有任务->添加、修改、删除 ]

3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->

数据库[要 *** 作的数据库]->命令

[ 如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的sql文件

如果要执行存储过程,填 exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN]

] ->确定

(如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除);

4、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现->

更改[调度时间表]->确定

(如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉);

5、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows应用程序系统日志] ->确定。

AndroidActivity生命周期

onStart()与onResume()有什么区别?

onStart()是activity界面被显示出来的时候执行的,但不能与它交互;

onResume()是当该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。

Activity启动流程

startActivity最终都会调用startActivityForResult,通过ActivityManagerProxy调用system_server进程中ActivityManagerService的startActvity方法,如果需要启动的Activity所在进程未启动,则调用Zygote孵化应用进程,进程创建后会调用应用的ActivityThread的main方法,main方法调用attach方法将应用进程绑定到ActivityManagerService(保存应用的ApplicationThread的代理对象)并开启loop循环接收消息。ActivityManagerService通过ApplicationThread的代理发送Message通知启动Activity,ActivityThread内部Handler处理handleLaunchActivity,依次调用performLaunchActivity,handleResumeActivity(即activity的onCreate,onStart,onResume)。

深入理解Activity启动流程

Android类加载器

Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个class文件,而Android是把所有Class文件进行合并,优化,然后生成一个最终的classdex,目的是把不同class文件重复的东西只需保留一份,如果我们的Android应用不进行分dex处理,最后一个应用的apk只会有一个dex文件。

Android中常用的有两种类加载器,DexClassLoader和PathClassLoader,它们都继承于BaseDexClassLoader。区别在于调用父类构造器时,DexClassLoader多传了一个optimizedDirectory参数,这个目录必须是内部存储路径,用来缓存系统创建的Dex文件。而PathClassLoader该参数为null,只能加载内部存储目录的Dex文件。所以我们可以用DexClassLoader去加载外部的apk。

Android消息机制

应用启动是从ActivityThread的main开始的,先是执行了Looperprepare(),该方法先是new了一个Looper对象,在私有的构造方法中又创建了MessageQueue作为此Looper对象的成员变量,Looper对象通过ThreadLocal绑定MainThread中;

当我们创建Handler子类对象时,在构造方法中通过ThreadLocal获取绑定的Looper对象,并获取此Looper对象的成员变量MessageQueue作为该Handler对象的成员变量;

在子线程中调用上一步创建的Handler子类对象的sendMesage(msg)方法时,在该方法中将msg的target属性设置为自己本身,同时调用成员变量MessageQueue对象的enqueueMessag()方法将msg放入MessageQueue中;

主线程创建好之后,会执行Looperloop()方法,该方法中获取与线程绑定的Looper对象,继而获取该Looper对象的成员变量MessageQueue对象,并开启一个会阻塞(不占用资源)的死循环,只要MessageQueue中有msg,就会获取该msg,并执行msgtargetdispatchMessage(msg)方法(msgtarget即上一步引用的handler对象),此方法中调用了我们第二步创建handler子类对象时覆写的handleMessage()方法,之后将该msg对象存入回收池;

Looperloop()为什么不会阻塞主线程

Android是基于事件驱动的,即所有Activity的生命周期都是通过Handler事件驱动的。loop方法中会调用MessageQueue的next方法获取下一个message,当没有消息时,基于Linux pipe/epoll机制会阻塞在loop的queuenext()中的nativePollOnce()方法里,并不会消耗CPU。

IdleHandler (闲时机制)

IdleHandler是一个回调接口,可以通过MessageQueue的addIdleHandler添加实现类。当MessageQueue中的任务暂时处理完了(没有新任务或者下一个任务延时在之后),这个时候会回调这个接口,返回false,那么就会移除它,返回true就会在下次message处理完了的时候继续回调。

同步屏障机制(sync barrier)

同步屏障可以通过MessageQueuepostSyncBarrier函数来设置。该方法发送了一个没有target的Message到Queue中,在next方法中获取消息时,如果发现没有target的Message,则在一定的时间内跳过同步消息,优先执行异步消息。再换句话说,同步屏障为Handler消息机制增加了一种简单的优先级机制,异步消息的优先级要高于同步消息。在创建Handler时有一个async参数,传true表示此handler发送的时异步消息。ViewRootImplscheduleTraversals方法就使用了同步屏障,保证UI绘制优先执行。

View的绘制原理

View的绘制从ActivityThread类中Handler的处理RESUME_ACTIVITY事件开始,在执行performResumeActivity之后,创建Window以及DecorView并调用WindowManager的addView方法添加到屏幕上,addView又调用ViewRootImpl的setView方法,最终执行

以上就是关于安卓读取数据库的数据怎么 *** 作全部的内容,包括:安卓读取数据库的数据怎么 *** 作、android开发中,ListView中的item添加一个删除按钮,删除当前item数据。可以在数据库中删除,但无法更新、如何自动删除数据库表里的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10204589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存