热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidSQLite数据库的使用

android提供了一个抽象类SQLiteOpenHelper用来管理数据库,因此我们需要创建一个类来继承它,并且重写他的两个方法onCreate()(创建数据库)和onUpgrade()(更新数据库

android提供了一个抽象类SQLiteOpenHelper用来管理数据库,因此我们需要创建一个类来继承它,并且重写他的两个方法onCreate()(创建数据库)和onUpgrade()(更新数据库)。他还有两个重要的实例方法,这两个方法都可一创建或打开一个数据库,并且返回一个可读写的数据库对象,区别是如果数据库不可写入时:

getReadableDatabase()  返回一个只可读的

getWriteableDatabase()   出现异常


自定义MyDatabaseHelper

public class MyDatabaseHelper extends SQLiteOpenHelper{

private Context mContext;

public static final String CREATE_BOOK="create table Book("
+ "id integer primary key autoincrement,"
+ "author text,"
+ "price real,"
+ "pages integer,"
+ "name text)";


public MyDatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
mCOntext=context;
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
Toast.makeText(mContext, "Create Succeeded", Toast.LENGTH_SHORT).show();
}

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

}

}

对数据库进行增删查改(CRUD(Create,Retrieve,Update,Delete))操作,为了给不熟悉sql语句的人方便操作,android提供了insert(),update(),delete(),query()方法进行操作数据库。用法很简单

public class MainActivity extends BaseActivity implements OnClickListener{

private Button mCreateDbButton;

private MyDatabaseHelper mHelper;

private Button mAddDataButton;

private Button mUpdateButton;

private Button mDeleteButton;

private Button mQueryButton;


private static final String TAG="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//mHelper=new MyDatabaseHelper(this, "BookStore.db", null,1);
mHelper=new MyDatabaseHelper(this, "BookStore.db",null,2);
}

@Override
public void findId() {
mCreateDbButton=(Button) findViewById(R.id.main_createDbButton);
mAddDataButton=(Button) findViewById(R.id.main_addData_Button);
mUpdateButton=(Button) findViewById(R.id.main_update_Button);
mDeleteButton=(Button) findViewById(R.id.main_Delete_Button);
mQueryButton=(Button) findViewById(R.id.main_Query_Button);
}

@Override
public void setListener() {
mCreateDbButton.setOnClickListener(this);
mAddDataButton.setOnClickListener(this);
mUpdateButton.setOnClickListener(this);
mDeleteButton.setOnClickListener(this);
mQueryButton.setOnClickListener(this);
}

@Override
public void onClick(View v) {
SQLiteDatabase db=mHelper.getWritableDatabase();
ContentValues values=new ContentValues();
switch (v.getId()) {
case R.id.main_createDbButton:
mHelper.getWritableDatabase();
break;
case R.id.main_addData_Button:
//db=mHelper.getWritableDatabase();
//values=new ContentValues();
values.put("name", "c语言从入门到放弃");
values.put("author", "c语言");
values.put("pages", 520);
values.put("price", 50.2);
db.insert("Book", null, values);
values.clear();

values.put("name", "java从入门到放弃");
values.put("author", "java");
values.put("pages", 385);
values.put("price", 47.8);
db.insert("Book", null, values);
values.clear();
break;
case R.id.main_update_Button:
values.put("price", 88.8);
db.update("Book", values, "name=?",new String[]{"c语言从入门到放弃"});
values.clear();
break;
case R.id.main_Delete_Button:
db.delete("Book", "pages>?",new String[]{"500"});
break;
case R.id.main_Query_Button:
Cursor cursor=db.query("Book", null, null, null, null, null, null);
if(cursor.moveToFirst()){
do{
String name=cursor.getString(cursor.getColumnIndex("name"));
String author=cursor.getString(cursor.getColumnIndex("author"));
int pages=cursor.getInt(cursor.getColumnIndex("pages"));
double price=cursor.getDouble(cursor.getColumnIndex("price"));
Log.i(TAG,name+author+pages+price);

}while(cursor.moveToNext());
}
break;
default:
break;
}
}
}


也可以使用sql语句进行操作,有时候用SQL语句操作更简单。

增删查改

db.execSQL("insert into Book(name,author,pages,price)values(?,?,?,?)",
new String[]{"c#语言","c#","452","12.9"});

db.execSQL("delete from Book where price
Cursor cursor=db.rawQuery("select * from Book where name=?",new String[]{"c#语言"});

db.execSQL("update Book set price=? where name=?",new String[]{"100","c#语言"});



升级数据库的最佳写法,我在第二个版本里面加了一个表Category,第三个版本里面在Book表中加了一个字段category_id

如果是新用户直接安装就执行oncreate()方法,两个表直接创建,如果是第一个版本的用户升级到第三个版本,就执行onUpgrade()方法,先创建第二个表,再在Book表中添加字段的操作。

注意switch case语句不写break


public class MyDatabaseHelper extends SQLiteOpenHelper{

private Context mContext;

public static final String CREATE_BOOK="create table Book("
+ "id integer primary key autoincrement,"
+ "author text,"
+ "price real,"
+ "pages integer,"
+ "name text,"
+ "category_id integer)";

public static final String CREATE_CATEGORY="create table Category("
+ "id integer primary key autoincrement,"
+ "category_name text,"
+ "category_code integer)";

public MyDatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
mCOntext=context;
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext, "Create Succeeded", Toast.LENGTH_SHORT).show();
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 1:
db.execSQL(CREATE_CATEGORY);
case 2:
db.execSQL("alter table Book add column category_id integer");
default:

}
}

}




推荐阅读
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 为了优化用户体验,本文探讨了如何调整下拉菜单的宽度。通过合理设置宽度,可以提升界面的美观性和易用性。文章提供了具体的代码示例,帮助开发者实现这一目标。例如,可以通过 CSS 或 JavaScript 来动态调整下拉菜单的宽度,确保其在不同设备和屏幕尺寸上都能保持良好的显示效果。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 在C#编程中,设计流畅的用户界面是一项重要的任务。本文分享了实现Fluent界面设计的技巧与方法,特别是通过编写领域特定语言(DSL)来简化字符串操作。我们探讨了如何在不使用`+`符号的情况下,通过方法链式调用来组合字符串,从而提高代码的可读性和维护性。文章还介绍了如何利用静态方法和扩展方法来实现这一目标,并提供了一些实用的示例代码。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 本文深入探讨了C#中的反射与特性功能。首先,介绍了反射的基本概念,即通过元数据(包括类的方法、属性和字段等)在运行时动态获取和操作程序信息的能力。此外,还详细解析了特性的使用方法及其在代码注解和元数据扩展中的重要作用,为开发者提供了丰富的编程技巧和实践指导。 ... [详细]
author-avatar
殉情放开那只小兔子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有