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——数据库相关(课堂整理)的更多相关文章

  1. Android数据库相关整理

    今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...

  2. 自己动手写Android数据库框架

    前言 相信不少开发人员跟我一样,每次都非常烦恼自己写数据库,并且那些数据库语句也经常记不住.当然网上也有非常多非常好的数据库框架,你能够直接拿来用,可是 非常多时候我们的项目.特别是一个小型的Andr ...

  3. Android数据库高手秘籍(二):创建表和LitePal的基本用法

    原文:http://blog.jobbole.com/77157/ 上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的.但是我们都知 ...

  4. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  5. 单元测试系列之七:Sonar 数据库表关系整理一(rule相关)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/7510072.html 简介:Sonar ...

  6. 一篇好文之Android数据库 GreenDao的完全解析

    数据库GreenDao.jpg 之前在开发过程中,数据库基本上会使用Litepal或者SQlite自己写,最近换新环境,公司原先使用的数据库就是GreenDao,在各种情况的作用下,准备了解下Gree ...

  7. Android 数据库框架OrmLite的使用(一)

    在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...

  8. Android数据库升级

    随着Android应用版本的迭代,经常遇到数据库表结构发生改变,或者一些指定的表数据需要更新.这也就引出一个问题Android数据库的更新问题. Android数据库升级分类 Android数据库更新 ...

  9. 快速上手Android数据库操作

    Android采用关系型数据库SQLite3,它是一个支持SQL轻量级的嵌入式数据库,在嵌入式操作系统上有很广泛的应用,WM采用的也是SQLite3 关于过于.原理方面的东西在这篇文章里不会提到,但是 ...

随机推荐

  1. 如何让一个DIV浮动在另一个DIV上面

      直接上DEMO了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3 ...

  2. Windows上搭建hadoop开发环境

    前言 Windows下运行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者 ...

  3. Ubuntu 16.04服务器安装及软件配置

    1.配置静态地址 vim /etc/network/interfaces auto enp1s0 iface enp1s0 inet static address 192.168.1.131 netm ...

  4. Code Simplicity–The Science of Software Development 书摘

    Chapter1 Introduction That is the art and talent involved in programming—reducing complexity to simp ...

  5. MySQL drop、delete和truncate的区别

    注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 d ...

  6. 用JDBC访问MySQL

    /* 在数据库中创建一个Employee的类 create table Employee( id int primary key, name varchar(20), age int); */ imp ...

  7. Spring控制多张表的提交事务操作

    一.Spring配置文件如下: <bean id="test" class="org.apache.commons.dbcp.BasicDataSource&quo ...

  8. zipalign内存对齐优化

    zipalign:android中SDK下tools文件夹 用来对资源文件的内存进行对齐优化 手工命令: 优化:zipalign -v 4 source.apk destination.apk 4: ...

  9. (转)PhoneGap开发环境搭建

    (原)http://www.cnblogs.com/Random/archive/2011/12/28/2305398.html PhoneGap开发环境搭建   项目中要用PhoneGap开发,了解 ...

  10. 【Windows批处理III】实现删除含自定字符串的文件和文件夹(搜索子目录)

    1)目的:实验室小网空间因镜像版本太多,容量告警,希望清出一部分空间 具体需求:删除E盘下,所有含rar字符串的文件: 删除E盘下,所有含hi6620字符串文件夹: 步骤: (风险请知:如果不chec ...