Android的SQLite的增删查改
原创作品,允许转载,转载时请务必声明作者信息和本声明。http://www.cnblogs.com/zhu520/p/8343675.html
本人小白,那个大神看到有问题可指出,谢谢。。。。
一:sqlite概念:是一个软件库,实现了自给自足(这意味着不需要任何外部的依赖),无服务器的,零配置的,事务性(完全兼容 ACID 的)的sql数据库引擎,SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。
对于Android,在应用程序中以编程方式创建的SQLite数据库始终存储在/data/data/项目名称/databases
文件夹中
SQL 能做什么?
SQL 面向数据库执行查询
SQL 可从数据库取回数据
SQL 可在数据库中插入新的记录
SQL 可更新数据库中的数据
SQL 可从数据库删除记录
SQL 可创建新数据库
SQL 可在数据库中创建新表
SQL 可在数据库中创建存储过程
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限
二:创建一个Android 工程后继承SQLiteOpenHelper它主要用于新建数据库,新建数据表和跟新数据库
package zhu.com.sqlite_curd; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; /**
* Created by Pearl on 2018/1/25.
*/ public class CasualCreatClass extends SQLiteOpenHelper { /**构造方法
* (Context context, String name, CursorFactory factory,int version)
* 数据库创建的构造方法 数据库名称 sql_table.db ,版本号为1
* @param context 上下文对象
* @param /name 数据库名称 secb.db
* @param /factory 游标工厂
* @param /version 数据库版本
*/
public CasualCreatClass(Context context) {
super(context, "sql_table.db", null, 1);
} /**数据库第一次被使用时创建数据库
* 初始化数据库的表结构
*/
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//执行有更新行为的sql语句
sqLiteDatabase.execSQL("CREATE Table man (manId integer primary key autoincrement, name varchar(20), age integer)");
} /**数据库版本升级时调用
* 数据库版本发生改变时才会被调用,数据库在升级时才会被调用;
* @param sqLiteDatabase 操作数据库
* @param i 旧版本
* @param i1 新版本
*/
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("drop table if exists man");
onCreate(sqLiteDatabase);
}
}
类中的构造方法用于创建数据库和初始版本号;
onCreate方法用于初始化数据库的表结构,这里新建了一个man表,里面有manId(主键),name,age;
onUpgrade方法用于数据库版本升级时调用,此时可以用测试类去测试一下看看新建语法有没有问题,看看有没有新建数据库:
在清单文件中application节点上方添加四行代码(第三行要写自己应用的包名)
三:源码
1):activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="zhu.com.sqlite_curd.MainActivity">
<!--市-->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/edit_text"
android:addStatesFromChildren="true"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?android:attr/textColorSecondary"
android:text="城市名:"
android:id="@+id/tvCity"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:background="@null"
android:id="@+id/etCity"
/>
</LinearLayout>
<!--编码-->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/edit_text"
android:addStatesFromChildren="true"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?android:attr/textColorSecondary"
android:text="市区号"
android:id="@+id/tvCode"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:background="@null"
android:id="@+id/etCode"
/>
</LinearLayout> <!--增加,修改,查询-->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:addStatesFromChildren="true"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加"
android:id="@+id/bt_add"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改"
android:id="@+id/bt_modify"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"
android:id="@+id/bt_query"
/>
</LinearLayout> <!--把数据显示到这里来-->
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dip"
android:id="@+id/listView"
/> </LinearLayout>
2):listview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dip"
android:id="@+id/linear"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:id="@+id/imCity"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:id="@+id/tvCity"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="right"
android:id="@+id/btRemove"
/>
</RelativeLayout>
3):CityBean\
package zhu.com.sqlite_curd;
/**
* 普通JavaBean
*
*/
public class CityBean {
public static final String ID = "_id";
public static final String CITY = "city";
public static final String CODE = "code"; private String id;
private String city;
private String code; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
} }
4):SQLiteHelper
package zhu.com.sqlite_curd; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
/**
* 实现对表的创建、更新、变更列名操作
* @author ytm0220@163.com
*
*/
public class SQLiteHelper extends SQLiteOpenHelper {
public static final String TB_NAME = "citys"; public SQLiteHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
} /**
* 创建新表
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " +
TB_NAME + "(" +
CityBean.ID + " integer primary key," +
CityBean.CITY + " varchar," +
CityBean.CODE + " integer"+
")");
} /**
* 当检测与前一次创建数据库版本不一样时,先删除表再创建新表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TB_NAME);
onCreate(db);
} /**
* 变更列名
* @param db
* @param oldColumn
* @param newColumn
* @param typeColumn
*/
public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){
try{
db.execSQL("ALTER TABLE " +
TB_NAME + " CHANGE " +
oldColumn + " "+ newColumn +
" " + typeColumn
);
}catch(Exception e){
e.printStackTrace();
}
} }
5):MainActivity
package zhu.com.sqlite_curd; import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView; import java.util.ArrayList;
import java.util.List; public class MainActivity extends Activity {
private static String DB_NAME = "mycity.db";
private static int DB_VERSION = 1;
private static int POSTION;
private ListView listview;
private Cursor cursor;
private SQLiteDatabase db;
private SQLiteHelper dbHelper;
private ListAdapter listAdapter; private EditText etCity;
private EditText etCode;
private Button bt_add;
private Button bt_modify;
private Button bt_query; private List<CityBean> cityList = new ArrayList<CityBean>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); etCity = (EditText) findViewById(R.id.etCity);
etCode = (EditText) findViewById(R.id.etCode);
bt_add = (Button) findViewById(R.id.bt_add);
bt_modify = (Button) findViewById(R.id.bt_modify);
bt_query = (Button) findViewById(R.id.bt_query); try{
/* 初始化并创建数据库 */
dbHelper = new SQLiteHelper(this, DB_NAME, null, DB_VERSION);
/* 创建表 */
db = dbHelper.getWritableDatabase(); //调用SQLiteHelper.OnCreate()
/* 查询表,得到cursor对象 */
cursor = db.query(SQLiteHelper.TB_NAME, null, null, null, null, null, CityBean.CODE + " DESC");
cursor.moveToFirst();
while(!cursor.isAfterLast() && (cursor.getString(1) != null)){
CityBean city = new CityBean();
city.setId(cursor.getString(0));
city.setCity(cursor.getString(1));
city.setCode(cursor.getString(2));
cityList.add(city);
cursor.moveToNext();
}
}catch(IllegalArgumentException e){
//当用SimpleCursorAdapter装载数据时,表ID列必须是_id,否则报错column '_id' does not exist
e.printStackTrace();
//当版本变更时会调用SQLiteHelper.onUpgrade()方法重建表 注:表以前数据将丢失
++ DB_VERSION;
dbHelper.onUpgrade(db, --DB_VERSION, DB_VERSION);
// dbHelper.updateColumn(db, SQLiteHelper.ID, "_"+SQLiteHelper.ID, "integer");
}
listview = (ListView)findViewById(R.id.listView);
listAdapter = new ListAdapter();
listview.setAdapter(listAdapter);
listview.setOnItemClickListener(new ListView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int postion,
long arg3) {
setSelectedValues(postion);
}
}); /* 插入表数据并ListView显示更新 */
bt_add.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
if(etCity.getText().length() > 1 && etCode.getText().length() >1){
ContentValues values = new ContentValues();
values.put(CityBean.CITY, etCity.getText().toString().trim());
values.put(CityBean.CODE, etCode.getText().toString().trim());
//插入数据 用ContentValues对象也即HashMap操作,并返回ID号
Long cityID = db.insert(SQLiteHelper.TB_NAME, CityBean.ID, values);
CityBean city = new CityBean();
city.setId(""+cityID);
city.setCity(etCity.getText().toString().trim());
city.setCode(etCode.getText().toString().trim());
cityList.add(city);
listview.setAdapter(new ListAdapter());
resetForm();
}
}
}); /* 查询表,模糊条件查询 */
bt_query.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View view) {
cityList.removeAll(cityList);
String sql = null;
String sqlCity = etCity.getText().length() > 0 ? CityBean.CITY + " like '%" + etCity.getText().toString().trim() + "%'" : "";
String sqlCode = etCode.getText().length() > 0 ? CityBean.CITY + " like '%" + etCity.getText().toString().trim() + "%'" : "";
if( (!"".equals(sqlCity)) && (!"".equals(sqlCode)) ){
sql = sqlCity + " and" + sqlCode;
}else if(!"".equals(sqlCity)){
sql = sqlCity;
}else if(!"".equals(sqlCode)){
sql = sqlCode;
}
cursor = db.query(true, SQLiteHelper.TB_NAME,
new String[]{CityBean.ID, CityBean.CITY, CityBean.CODE},
sql,
null, null, null, null, null);
cursor.moveToFirst();
while(!cursor.isAfterLast() && (cursor.getString(1) != null)){
CityBean city = new CityBean();
city.setId(cursor.getString(0));
city.setCity(cursor.getString(1));
city.setCode(cursor.getString(2));
cityList.add(city);
cursor.moveToNext();
}
listview.setAdapter(new ListAdapter());
resetForm();
}
}); /* 修改表数据 */
bt_modify.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
ContentValues values = new ContentValues();
values.put(CityBean.CITY, etCity.getText().toString().trim());
values.put(CityBean.CODE, etCode.getText().toString().trim());
db.update(SQLiteHelper.TB_NAME, values, CityBean.ID + "=" + cityList.get(POSTION).getId(), null);
cityList.get(POSTION).setCity(etCity.getText().toString().trim());
cityList.get(POSTION).setCode(etCode.getText().toString().trim());
listview.setAdapter(new ListAdapter());
resetForm();
}
});
} /* 设置选中ListView的值 */
public void setSelectedValues(int postion){
POSTION = postion;
etCity.setText(cityList.get(postion).getCity());
etCode.setText(cityList.get(postion).getCode());
} /* 重值form */
public void resetForm(){
etCity.setText("");
etCode.setText("");
} @Override
protected void onDestroy() {
db.delete(SQLiteHelper.TB_NAME, null, null);
super.onDestroy();
} private class ListAdapter extends BaseAdapter {
public ListAdapter(){
super();
}
@Override
public int getCount() {
return cityList.size();
} @Override
public Object getItem(int postion) {
return postion;
} @Override
public long getItemId(int postion) {
return postion;
} @Override
public View getView(final int postion, View view, ViewGroup parent) {
view = getLayoutInflater().inflate(R.layout.listview, null);
TextView tv = (TextView) view.findViewById(R.id.tvCity);
tv.setText("" + cityList.get(postion).getCity());
TextView bu = (TextView) view.findViewById(R.id.btRemove);
bu.setText("删除");//R.string.delete
bu.setId(Integer.parseInt(cityList.get(postion).getId())); /* 删除表数据 */
bu.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View view) {
try{
db.delete(SQLiteHelper.TB_NAME, CityBean.ID + "=" + view.getId(), null);
cityList.remove(postion);
listview.setAdapter(new ListAdapter());
}catch(Exception e){
e.printStackTrace();
}
}
});
return view;
}
}
}
6):运行效果
7:源码下载(放心这次是百度云)密码: ryv4
Android的SQLite的增删查改的更多相关文章
- SQLite在Android程序中的使用方法,SQLite的增删查改方法
Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序 ...
- Android——另外一种增删查改的方式(ContentProvider常用)
以下介绍另外一种增删查改的方式 package com.njupt.sqllist; import java.util.ArrayList; import java.util.List; import ...
- C# SQLite 创建数据库的方法增删查改语法和命令
SQLite介绍 SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准. SQLite数据库官方主页 ...
- Android SQLite最简单demo实现(增删查改)
本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍, ...
- 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)
1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...
- 后端Spring Boot+前端Android交互+MySQL增删查改
2021.1.27 更新 已更新新版本博客,更新内容很多,因此新开了一篇博客,戳这里. 1 概述 使用spring boot作为后端框架与Android端配合mysql进行基本的交互,包含了最基本的增 ...
- IOS CoreData的(增删查改)
(1).CoreDataa>什么是CoreDatab>CoreData增删改查 "什么时候使用COredata 什么时候使用FMDatabases"CoreData 在 ...
- [置顶] cocos2dx sqllite 增删查改等操作
首先导入文件shell.c sqllite3.c sqlite3.h sqlite3etx.h文件(注意在生成安卓项目是 不要将shell.c写进android.mk文件中,写进去在cywin中生成会 ...
- SSH框架的多表查询和增删查改 (方法一)上
原创作品,允许转载,转载时请务必标明作者信息和声明本文章==> http://www.cnblogs.com/zhu520/p/7772823.html 因为最近在做Android 练习的 ...
随机推荐
- java 经常使用測试框架
1. 经常使用单元化測试框架 junit4 , TestNG 能够通过注解 @Before @After @BeforeClass @AfterClass 分别作方法与类级的初始化与结束动作. tes ...
- GNU-libiconv编码转换库的使用举例
继GDAL库.PROJ库.HDF5库.TINYXML库之后,手上进行的项目又让我碰到了ICONV库.之前花了2天时间没有搞定,在甲方一直催促下,今天又捡起来搞搞,搞了一天最终搞定了.相关心得记录例如以 ...
- VS Code(Visual Studio Code)
这次推荐 VS Code,这是个跨平台.免费的代码编辑器,集成开发.调试.编译为一身.单成启动速度,资源占用,就已经赢了各大编辑器(什么 SB.N++之类).以前觉得 VS 2015 是宇宙最强编辑器 ...
- python 3.x 学习笔记5 (装饰器)
1.装饰器: 本质是函数,(装饰其他函数)就是为其他函数添加附加功能 原则: 1)不能修改被装饰的函数的源代码 2)不能修改被装饰的函数的调用方式 2.实现装饰器知识储备: 1)函数即“变量” 2)高 ...
- input元素和display:inline-block的元素不在一行的解决办法
每次用到了<input/> 元素 和inline-block的<span></span>(不一定是span,其他一些inline的元素也是一样)元素,他们总是会不在 ...
- 外部样式表声明的样式并不会进入style对象
在网页设计当中,我们注重网页的行为(js).结构(HTLM).样式(css)分离开 内联样式表或者内部样式表声明的样式信息都会进入style对象. 我们可以测试一下: 但是我们的外部样式表,也就是通过 ...
- German Collegiate Programming Contest 2015(第三场)
Divisions David is a young boy and he loves numbers. Recently he learned how to divide two numbers.D ...
- ArchLinux 设置时间同步和硬件时间同步错误 No usable clock interface found
笔记本不知道怎么了,总是时间对不上 硬件时间也设置不了,只能时间同步了 手动时间同步 ntpdate即可,ntp服务器在这里用这两个就好了 cn.ntp.org.cn 或 edu.ntp.org.cn ...
- Java 异常的捕获与处理详解 (一)
一,异常的产生(Exception) 异常是程序之中导致程序中断的一种指令流,异常一旦出现并且没有进行合理处理的话,那么程序就会中断执行. An exception is a flow of inst ...
- OpenGL之抗锯齿 以及 线宽的设置
转自原文 OpenGL之抗锯齿 以及 线宽的设置 抗锯齿 1.线的抗锯齿 glEnable(GL_LINE_SMOOTH); //启用 glHint(GL_LINE_SMOOTH,GL_NICEST) ...