android 使用SQLite的基本操作
Android操作数据库SQLite使用sql语句基本操作
1:自定义自己的SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper { //重写SQLiteOpenHelper的有参构造方法
public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, "my.db", null, 1);
//第一个参数为Context对象,第二个参数为数据库名称,第三个设置为null,第四个为sql版本号
} @Override
public void onCreate(SQLiteDatabase db) {
//创建一张数据表并执行
String sql="create table person(id int,name varchar(10))";
db.execSQL(sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion{ }
}
2:自定义一个javabean Person
public class Person {
private String id;
private String name; public Person(String id, String name) {
this.id = id;
this.name = name;
} public Person() {
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
3:修改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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"> <Button
android:id="@+id/inserttButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入数据"
android:textSize="16sp" /> <Button
android:id="@+id/deletetButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除数据"
android:textSize="16sp" /> <Button
android:id="@+id/updateButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改数据"
android:textSize="16sp" /> <Button
android:id="@+id/querytButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询数据"
android:textSize="16sp" />
</LinearLayout>
4:在MainActivity写
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button insertButton;
private Button deletetButton;
private Button updateButton;
private Button queryButton;
private SQLiteDatabase db;
private DBHelper dbHelper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new DBHelper(MainActivity.this, "", null, 1);
init();
} public void init() {
insertButton = findViewById(R.id.inserttButton);
deletetButton = findViewById(R.id.deletetButton);
updateButton = findViewById(R.id.updateButton);
queryButton = findViewById(R.id.querytButton); insertButton.setOnClickListener(this);
deletetButton.setOnClickListener(this);
updateButton.setOnClickListener(this);
queryButton.setOnClickListener(this);
} @Override
public void onClick(View v) {
db=dbHelper.getWritableDatabase();
switch (v.getId()) { //添加
case R.id.inserttButton:
db = dbHelper.getWritableDatabase();
db.beginTransaction();
try{ db.execSQL("insert into person(id,name) values (?,?)", new String[]{"11", "黑夜"});
db.setTransactionSuccessful();
} finally {
db.endTransaction();
} Toast.makeText(MainActivity.this, "数据插入成功!", Toast.LENGTH_LONG).show();
db.close();
break; //删除 case R.id.deletetButton:
db = dbHelper.getWritableDatabase();
db.beginTransaction(); try{
db.execSQL("delete from person where name=?", new String[]{"黑夜"});
db.setTransactionSuccessful();
} finally {
db.endTransaction();
} Toast.makeText(MainActivity.this, "删除成功!", Toast.LENGTH_LONG).show();
db.close();
break; //更新
case R.id.updateButton:
db = dbHelper.getWritableDatabase();
db.beginTransaction();
try{
db.execSQL("update person set name=? where id=?", new String[]{"晓霞", "11"});
db.setTransactionSuccessful();
} finally {
db.endTransaction();
} Toast.makeText(MainActivity.this, "修改成功!", Toast.LENGTH_LONG).show();
db.close();
break; //查询
case R.id.querytButton:
db=dbHelper.getReadableDatabase();
Cursor cursor=db.rawQuery("select * from person where name=?",new String[]{"黑夜"});
ArrayList<Person> list=new ArrayList<>(); if (cursor!=null){
cursor.moveToFirst();
while(cursor.moveToNext()){
String id=cursor.getString(cursor.getColumnIndex("id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
list.add(new Person(id,name));
}
} cursor.close();
db.close();
System.out.println(list.toString());
Toast.makeText(MainActivity.this,list.toString(),Toast.LENGTH_LONG).show();
break;
}
}
}
注意
在涉及到数据库的添加,修改,删除都要考虑到事务问题,可以参考下我的考虑流程:
//获取到数据库对象
try{
db.beginTransaction();//开启事务
try{db.endTransaction();
db.execSQL("sql语句");
db.setTransactionSuccessful();//标记事务成功
} finally{
db.endTransaction();//提交事务
db.close();//关闭数据库连接
}
}
android 使用SQLite的基本操作的更多相关文章
- Android 的 Sqlite基本操作
在 SQL 数据库中保存数据 使用数据库 将数据保存到数据库对于重复或结构化数据(比如契约信息)而言是理想之选. 本课程假定您基本熟悉 SQL 数据库并且可帮助您开始在 Android 中使用 SQL ...
- Android的SQLite基本操作
涉及SQLite的增删改查,结果用log显示 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
android 一个SQLite数据库多个数据表(带demo) 前言 demo演示 一.搭建 二.建立实体类 三.建立数据库操作类 ...
- Android之SQLite数据存储
一.SQLite保存数据介绍 将数据库保存在数据库对于重复或者结构化数据(比如契约信息)而言是理想之选.SQL数据库的主要原则之一是架构:数据库如何组织正式声明.架构体现于用于创建数据库的SQL语句. ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...
- Android中SQLite数据库小计
2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...
- android 对sqlite数据库的增删改查等各种操作
转载:http://blog.csdn.net/vrix/article/details/6717090 package com.sqlite.main; import java.io.File; i ...
- Android学习---SQLite数据库的增删改查和事务(transaction)调用
上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代 ...
- android数据库SQLite的设计模式
Dao设计模式可能是使用最多的数据库的设计模式其基本思路是将数据库操作的代码 与设计代码分离以便于维护和升级.具体的实现方法是使用包,然后在设计代码中调 用数据库的操作代码,dao设计模式需要创建5个 ...
随机推荐
- 关于Eclipse中使用Maven进行Install安装时候报错Perhaps you are running on a JRE rather than a JDK?解决办法
所遇到的问题: 详情报错: 英文描述: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3. ...
- [SWMM]汇水区特征宽度的计算方法
SWMM模型产流计算中,有一个比较重要的参数就是子汇水区的特征宽度(width),这个参数对地表汇流时间和峰值有一定的影响.子汇水区特征宽度的计算方法有很多,这里介绍比较常用的两种: (1)采用面积除 ...
- JAVA 各种时间类型转换
final Date date = new Date(); final Timestamp timestamp = new Timestamp(date.getTime()); final Calen ...
- 新东方集团K12公益免费课战役记
作者:张建鑫, 曾任IBM高级软件架构师, 滴滴高级技术专家, 现任新东方集团高级技术总监 1月31日,集团领导决定由产品技术中心的新东方APP团队牵头做周一到周五的集团公益课, 提供给全国中小学生使 ...
- SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化。
一.基础原理 Base64是一种用64个Ascii字符来表示任意二进制数据的方法.主要用于将不可打印的字符转换成可打印字符,或者简单的说是将二进制数据编码成Ascii字符.Base64也是网络 ...
- Python - 面向对象编程 - MRO 方法搜索顺序
为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性.方法,子类对象调用该属性. ...
- 你的 JVM 基础“大厦”稳健吗?
[从 1 开始学 JVM 系列] JVM 对于每位 Java 语言编程者来说无疑是"重中之重",尽管我们每天都在与它打交道,却很少来审视它.了解它,慢慢地,它成为了我们" ...
- Linux下ansible使用
一.ansible的功能和意义 1.功能 ansible批量功能 ----------------------> 并行 01. 可以实现批量系统操作配置 02. 可以实现批量软件服务部署 03. ...
- noip模拟40
\(\color{white}{\mathbb{名之以:海棠}}\) 考场 \(t1\) 看见题意非常简单,觉得可能是个简单题 暴力算出几个小样例右端点右移的时候左端点都是单调右移的,以为具有单调性, ...
- 快速模式第三包收尾之quick_inI2()
快速模式第三包收尾之quick_inI2() 文章目录 快速模式第三包收尾之quick_inI2() 1. 序言 2. quick_inI2()处理流程图 3. 报文格式 4. quick_inI2( ...