Android——数据库相关(课堂整理)
layout文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hanqi.testapp3.TestActivity"
android:orientation="vertical"> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="初始化数据库"
android:onClick="bt1_onClick"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="升级数据库"
android:onClick="bt2_onClick"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/et_id"
android:hint="id"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/et_name"
android:hint="name"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/et_sex"
android:hint="sex"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/et_age"
android:hint="age"/>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="新增数据"
android:onClick="bt3_onClick"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询数据"
android:onClick="bt4_onClick"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="带条件查询数据"
android:onClick="bt5_onClick"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改数据"
android:onClick="bt6_onClick"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除数据"
android:onClick="bt7_onClick"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="数据库事务"
android:onClick="bt8_onClick"/>
</LinearLayout>
java类:
package com.hanqi.testapp3; import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; public class TestActivity extends AppCompatActivity { EditText et_id,et_name,et_sex,et_age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
et_id = (EditText)findViewById(R.id.et_id);
et_name = (EditText)findViewById(R.id.et_name);
et_sex = (EditText)findViewById(R.id.et_sex);
et_age = (EditText)findViewById(R.id.et_age);
}
//初始化数据库
public void bt1_onClick(View v)
{
//使用工具类得到数据库对象
MyDBHelper myDBHelper = new MyDBHelper("test.db",1);
Toast.makeText(TestActivity.this, "连接数据库成功", Toast.LENGTH_SHORT).show();
//得到连接
SQLiteDatabase sqLiteDatabase = myDBHelper.getWritableDatabase();
//关闭连接
sqLiteDatabase.close();
}
//升级数据库
public void bt2_onClick(View v)
{
//使用工具类得到数据库对象
MyDBHelper myDBHelper = new MyDBHelper("test.db",2);
Toast.makeText(TestActivity.this, "连接数据库成功", Toast.LENGTH_SHORT).show();
//得到连接
SQLiteDatabase sqLiteDatabase = myDBHelper.getWritableDatabase();
//关闭连接
sqLiteDatabase.close();
}
//插入新数据
public void bt3_onClick(View v)
{
//1.连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
//2.准备数据
ContentValues cv = new ContentValues();
cv.put("name",et_name.getText().toString());
cv.put("sex",et_sex.getText().toString());
cv.put("age", et_age.getText().toString());
//3.调用insert(),插入数据
long l = sd.insert("t_user", null, cv);
Toast.makeText(TestActivity.this, "插入数据的主键 = "+l, Toast.LENGTH_SHORT).show();
//4.关闭连接
sd.close();
}
//数据查询
public void bt4_onClick(View v)
{
//1.连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
//2.全表全字段查询
Cursor c = sd.query("t_user", null, null, null, null, null, null);
//3.遍历结果集
while (c.moveToNext())
{
//读取数据
String str ="_id ="+c.getLong(c.getColumnIndex("_id"))+"name = "
+c.getString(1)+" sex = "+c.getString(2)+
" age = "+c.getInt(3);
Log.e("TAG",str);
}
Toast.makeText(TestActivity.this, "结果集的记录条数 = "+c.getCount(), Toast.LENGTH_SHORT).show();
c.close();
//4.关闭连接
sd.close();
}
//带条件数据查询
public void bt5_onClick(View v)
{
//1.连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
String strwhere = "1 = 1";
//select * from t_user where _id = 1 and name like '%张%' and sex = ''
//得到条件
if (et_id.getText().length()>0)
{
strwhere += " and _id = "+et_id.getText().toString();
} if (et_name.getText().length()>0)
{
strwhere += " and name like '%"+et_name.getText().toString()+"%'";
}
if (et_sex.getText().length()>0)
{
strwhere += " and sex = "+et_sex.getText().toString()+"'";
}
if (et_age.getText().length()>0)
{
strwhere += " and age = '"+et_age.getText().toString()+"'";
}
//2.查询
Cursor c = sd.query("t_user", null, strwhere, null, null, null, null);
//3.遍历结果集
while (c.moveToNext())
{
//读取数据
String str ="_id ="+c.getLong(c.getColumnIndex("_id"))+"name = "
+c.getString(1)+" sex = "+c.getString(2)+
" age = "+c.getInt(3);
Log.e("TAG",str);
}
Toast.makeText(TestActivity.this, "结果集的记录条数 = "+c.getCount(), Toast.LENGTH_SHORT).show();
c.close();
//4.关闭连接
sd.close();
}
//修改数据
public void bt6_onClick(View v)
{
//1.连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
//2.修改
ContentValues cv = new ContentValues();
cv.put("name",et_name.getText().toString());
cv.put("sex",et_sex.getText().toString());
cv.put("age", et_age.getText().toString());
int i = sd.update("t_user",cv,"_id = ?",new String[]{et_id.getText().toString()});
Toast.makeText(TestActivity.this, "修改的记录条数 = "+i, Toast.LENGTH_SHORT).show();
//4.关闭连接
sd.close();
}
//删除数据
public void bt7_onClick(View v)
{
//1.连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
//2.删除
int i = sd.delete("t_user", "_id = ?", new String[]{et_id.getText().toString()});
Toast.makeText(TestActivity.this, "修改的记录条数 = "+i, Toast.LENGTH_SHORT).show();
//4.关闭连接
sd.close();
}
//数据库事务
public void bt8_onClick(View v)
{ //1.连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd = new MyDBHelper("test.db", 2).getWritableDatabase();
try {
//启动事务
sd.beginTransaction();
//2.修改
ContentValues cv1 = new ContentValues();
cv1.put("age", "43");
ContentValues cv2 = new ContentValues();
cv2.put("age", "53");
//修改1
int i = sd.update("t_user", cv1, "_id = 1", null);
//抛出异常
if (i > 0) {
throw new RuntimeException("模拟事务异常");
}
//修改2
int k = sd.update("t_user", cv2, "_id = 2", null);
//设置事务是成功完成的
sd.setTransactionSuccessful(); Toast.makeText(TestActivity.this, "修改的记录条数 = " + (i + k), Toast.LENGTH_SHORT).show(); }
catch (Exception e)
{
e.printStackTrace();
}
finally {
//一定会被执行的代码
//结束事务
//1.没有异常,提交事务
//2.发生异常,回滚事务
sd.endTransaction();
//4.关闭连接
sd.close();
}
}
//实现SQLiteOpenHelper的内部类
class MyDBHelper extends SQLiteOpenHelper
{
//构造方法
public MyDBHelper(String dbname,int ver)
{
//显示调用父类的构造方法
//必须在第一行
super(TestActivity.this,dbname,null,ver);
}
//创建和初始化数据库
@Override
public void onCreate(SQLiteDatabase db) {
//1.执行创建数据库的语句
String sql = "CREATE TABLE t_user " +
"(_id INTEGER NOT NULL," +
"name VARCHAR(20) NOT NULL," +
"sex CHAR(1),age INTEGER,\n" +
"PRIMARY KEY (\"_id\"))";
db.execSQL(sql);
Log.e("TAG","表创建成功");
//2.执行初始化数据的语句,insert语句
ContentValues cv = new ContentValues();
cv.put("name","张三");
cv.put("sex","男");
cv.put("age",20);
//执行插入,返回主键
long l = db.insert("t_user",null,cv);
Log.e("TAG","初始化数据 = "+l); }
//升级数据库
//触发条件:当版本号增大
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//修改数据
if (newVersion ==2)
{
ContentValues cv = new ContentValues();
cv.put("name","李四");
String sql = "update t_user set name='李四'where _id=1";
String[] str = {"1","18"};
//调用db的更新方法
int i = db.update("t_user",cv,"_id=? and age>?",str);
Log.e("TAG","升级数据 数据条数 = "+i);
}
}
}
}
Android——数据库相关(课堂整理)的更多相关文章
- Android数据库相关整理
今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...
- 自己动手写Android数据库框架
前言 相信不少开发人员跟我一样,每次都非常烦恼自己写数据库,并且那些数据库语句也经常记不住.当然网上也有非常多非常好的数据库框架,你能够直接拿来用,可是 非常多时候我们的项目.特别是一个小型的Andr ...
- Android数据库高手秘籍(二):创建表和LitePal的基本用法
原文:http://blog.jobbole.com/77157/ 上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的.但是我们都知 ...
- android中与SQLite数据库相关的类
为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...
- 单元测试系列之七:Sonar 数据库表关系整理一(rule相关)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/7510072.html 简介:Sonar ...
- 一篇好文之Android数据库 GreenDao的完全解析
数据库GreenDao.jpg 之前在开发过程中,数据库基本上会使用Litepal或者SQlite自己写,最近换新环境,公司原先使用的数据库就是GreenDao,在各种情况的作用下,准备了解下Gree ...
- Android 数据库框架OrmLite的使用(一)
在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...
- Android数据库升级
随着Android应用版本的迭代,经常遇到数据库表结构发生改变,或者一些指定的表数据需要更新.这也就引出一个问题Android数据库的更新问题. Android数据库升级分类 Android数据库更新 ...
- 快速上手Android数据库操作
Android采用关系型数据库SQLite3,它是一个支持SQL轻量级的嵌入式数据库,在嵌入式操作系统上有很广泛的应用,WM采用的也是SQLite3 关于过于.原理方面的东西在这篇文章里不会提到,但是 ...
随机推荐
- 转{QQ浏览器X5内核问题汇总}
转自https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/ 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- 程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
第六周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 1 单词长度(4分) 题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这 ...
- c#简易反射调用泛型方法
// 所谓程序集的简单理解,存在不同项目中(不是解决方案),即using前需要引用**.dll 1.调用当前类文件下的方法public List<T> GetByCondition< ...
- hasOwnProperty,in
hasOwnProperty,in区别: hasOwnProperty:指出一个对象是否具有指定名称的属性 in:对象是否能够访问此属性(包括直接在对象上访问和通过原型访问) 看下示例代码: (fun ...
- Django1.9开发博客(6)- 模板继承
模板继承就是网站的多个页面可以共享同一个页面布局或者是页面的某几个部分的内容.通过这种方式你就需要在每个页面复制粘贴同样的代码了. 如果你想改变页面某个公共部分,你不需要每个页面的去修改,只需要修改一 ...
- [cocos2d-x]OPENGL ES支持的像素格式
OPENGL ES最多支持32位颜色值. 支持的像素格式有以下几种: 客户端格式 GL格式 GL数据类型 字节数 RGBA8888 GL_RGBA GL_UNSIGNED_BYTE 4 RGB888 ...
- MYSQL -NOSQL -handlersocket
一个MYSQL的插件,让MYSQL支持NOSQL 好处,跟MYSQL公用数据.比普通CACHE方便.普通CACHE有同步数据问题 坏处,不兼容MEMCAHE,跟MEMCAHE一样没安全控制 编译与安装 ...
- html5的spellcheck属性(拼写、文法检查)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Python 代码优化常见技巧
代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方 ...