Android——数据库相关(课堂整理)

layout文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     tools:context="com.hanqi.testapp3.TestActivity"
11     android:orientation="vertical">
12
13     <Button
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:text="初始化数据库"
17         android:onClick="bt1_onClick"/>
18     <Button
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:text="升级数据库"
22         android:onClick="bt2_onClick"/>
23     <LinearLayout
24         android:layout_width="match_parent"
25         android:layout_height="wrap_content">
26         <EditText
27             android:layout_width="0dp"
28             android:layout_height="wrap_content"
29             android:layout_weight="1"
30             android:id="@+id/et_id"
31             android:hint="id"/>
32         <EditText
33             android:layout_width="0dp"
34             android:layout_height="wrap_content"
35             android:layout_weight="1"
36             android:id="@+id/et_name"
37             android:hint="name"/>
38     </LinearLayout>
39     <LinearLayout
40         android:layout_width="match_parent"
41         android:layout_height="wrap_content">
42         <EditText
43             android:layout_width="0dp"
44             android:layout_height="wrap_content"
45             android:layout_weight="1"
46             android:id="@+id/et_sex"
47             android:hint="sex"/>
48         <EditText
49             android:layout_width="0dp"
50             android:layout_height="wrap_content"
51             android:layout_weight="1"
52             android:id="@+id/et_age"
53             android:hint="age"/>
54     </LinearLayout>
55     <Button
56         android:layout_width="match_parent"
57         android:layout_height="wrap_content"
58         android:text="新增数据"
59         android:onClick="bt3_onClick"/>
60     <Button
61         android:layout_width="match_parent"
62         android:layout_height="wrap_content"
63         android:text="查询数据"
64         android:onClick="bt4_onClick"/>
65     <Button
66         android:layout_width="match_parent"
67         android:layout_height="wrap_content"
68         android:text="带条件查询数据"
69         android:onClick="bt5_onClick"/>
70     <Button
71         android:layout_width="match_parent"
72         android:layout_height="wrap_content"
73         android:text="修改数据"
74         android:onClick="bt6_onClick"/>
75     <Button
76         android:layout_width="match_parent"
77         android:layout_height="wrap_content"
78         android:text="删除数据"
79         android:onClick="bt7_onClick"/>
80     <Button
81         android:layout_width="match_parent"
82         android:layout_height="wrap_content"
83         android:text="数据库事务"
84         android:onClick="bt8_onClick"/>
85 </LinearLayout>

java类:

  1 package com.hanqi.testapp3;
  2
  3 import android.content.ContentValues;
  4 import android.database.Cursor;
  5 import android.database.sqlite.SQLiteDatabase;
  6 import android.database.sqlite.SQLiteOpenHelper;
  7 import android.support.v7.app.AppCompatActivity;
  8 import android.os.Bundle;
  9 import android.util.Log;
 10 import android.view.View;
 11 import android.widget.EditText;
 12 import android.widget.Toast;
 13
 14 public class TestActivity extends AppCompatActivity {
 15
 16     EditText et_id,et_name,et_sex,et_age;
 17     @Override
 18     protected void onCreate(Bundle savedInstanceState) {
 19         super.onCreate(savedInstanceState);
 20         setContentView(R.layout.activity_test);
 21         et_id = (EditText)findViewById(R.id.et_id);
 22         et_name = (EditText)findViewById(R.id.et_name);
 23         et_sex = (EditText)findViewById(R.id.et_sex);
 24         et_age = (EditText)findViewById(R.id.et_age);
 25     }
 26     //初始化数据库
 27     public void bt1_onClick(View v)
 28     {
 29         //使用工具类得到数据库对象
 30         MyDBHelper myDBHelper = new MyDBHelper("test.db",1);
 31         Toast.makeText(TestActivity.this, "连接数据库成功", Toast.LENGTH_SHORT).show();
 32         //得到连接
 33         SQLiteDatabase sqLiteDatabase = myDBHelper.getWritableDatabase();
 34         //关闭连接
 35         sqLiteDatabase.close();
 36     }
 37     //升级数据库
 38     public void bt2_onClick(View v)
 39     {
 40         //使用工具类得到数据库对象
 41         MyDBHelper myDBHelper = new MyDBHelper("test.db",2);
 42         Toast.makeText(TestActivity.this, "连接数据库成功", Toast.LENGTH_SHORT).show();
 43         //得到连接
 44         SQLiteDatabase sqLiteDatabase = myDBHelper.getWritableDatabase();
 45         //关闭连接
 46         sqLiteDatabase.close();
 47     }
 48     //插入新数据
 49     public void bt3_onClick(View v)
 50     {
 51         //1.连接数据库,得到数据库连接对象
 52         //得到连接
 53         SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
 54         //2.准备数据
 55         ContentValues cv = new ContentValues();
 56         cv.put("name",et_name.getText().toString());
 57         cv.put("sex",et_sex.getText().toString());
 58         cv.put("age", et_age.getText().toString());
 59         //3.调用insert(),插入数据
 60         long l = sd.insert("t_user", null, cv);
 61         Toast.makeText(TestActivity.this, "插入数据的主键 = "+l, Toast.LENGTH_SHORT).show();
 62         //4.关闭连接
 63         sd.close();
 64     }
 65     //数据查询
 66     public void bt4_onClick(View v)
 67     {
 68         //1.连接数据库,得到数据库连接对象
 69         //得到连接
 70         SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
 71         //2.全表全字段查询
 72         Cursor c = sd.query("t_user", null, null, null, null, null, null);
 73         //3.遍历结果集
 74         while (c.moveToNext())
 75         {
 76             //读取数据
 77             String str ="_id ="+c.getLong(c.getColumnIndex("_id"))+"name = "
 78                     +c.getString(1)+" sex = "+c.getString(2)+
 79                     " age = "+c.getInt(3);
 80             Log.e("TAG",str);
 81         }
 82         Toast.makeText(TestActivity.this, "结果集的记录条数 = "+c.getCount(), Toast.LENGTH_SHORT).show();
 83         c.close();
 84         //4.关闭连接
 85         sd.close();
 86     }
 87     //带条件数据查询
 88     public void bt5_onClick(View v)
 89     {
 90         //1.连接数据库,得到数据库连接对象
 91         //得到连接
 92         SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
 93         String strwhere = "1 = 1";
 94         //select * from t_user where _id = 1 and name like ‘%张%‘ and sex = ‘‘
 95         //得到条件
 96         if (et_id.getText().length()>0)
 97         {
 98             strwhere += " and _id = "+et_id.getText().toString();
 99         }
100
101         if (et_name.getText().length()>0)
102         {
103             strwhere += " and name like ‘%"+et_name.getText().toString()+"%‘";
104         }
105         if (et_sex.getText().length()>0)
106         {
107             strwhere += " and sex = "+et_sex.getText().toString()+"‘";
108         }
109         if (et_age.getText().length()>0)
110         {
111             strwhere += " and age = ‘"+et_age.getText().toString()+"‘";
112         }
113         //2.查询
114         Cursor c = sd.query("t_user", null, strwhere, null, null, null, null);
115         //3.遍历结果集
116         while (c.moveToNext())
117         {
118             //读取数据
119             String str ="_id ="+c.getLong(c.getColumnIndex("_id"))+"name = "
120                     +c.getString(1)+" sex = "+c.getString(2)+
121                     " age = "+c.getInt(3);
122             Log.e("TAG",str);
123         }
124         Toast.makeText(TestActivity.this, "结果集的记录条数 = "+c.getCount(), Toast.LENGTH_SHORT).show();
125         c.close();
126         //4.关闭连接
127         sd.close();
128     }
129     //修改数据
130     public void bt6_onClick(View v)
131     {
132         //1.连接数据库,得到数据库连接对象
133         //得到连接
134         SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
135         //2.修改
136         ContentValues cv = new ContentValues();
137         cv.put("name",et_name.getText().toString());
138         cv.put("sex",et_sex.getText().toString());
139         cv.put("age", et_age.getText().toString());
140         int i = sd.update("t_user",cv,"_id = ?",new String[]{et_id.getText().toString()});
141         Toast.makeText(TestActivity.this, "修改的记录条数 = "+i, Toast.LENGTH_SHORT).show();
142         //4.关闭连接
143         sd.close();
144     }
145     //删除数据
146     public void bt7_onClick(View v)
147     {
148         //1.连接数据库,得到数据库连接对象
149         //得到连接
150         SQLiteDatabase sd = new MyDBHelper("test.db",2).getWritableDatabase();
151         //2.删除
152         int i = sd.delete("t_user", "_id = ?", new String[]{et_id.getText().toString()});
153         Toast.makeText(TestActivity.this, "修改的记录条数 = "+i, Toast.LENGTH_SHORT).show();
154         //4.关闭连接
155         sd.close();
156     }
157     //数据库事务
158     public void bt8_onClick(View v)
159     {
160
161         //1.连接数据库,得到数据库连接对象
162         //得到连接
163         SQLiteDatabase sd = new MyDBHelper("test.db", 2).getWritableDatabase();
164         try {
165             //启动事务
166             sd.beginTransaction();
167             //2.修改
168             ContentValues cv1 = new ContentValues();
169             cv1.put("age", "43");
170             ContentValues cv2 = new ContentValues();
171             cv2.put("age", "53");
172             //修改1
173             int i = sd.update("t_user", cv1, "_id = 1", null);
174             //抛出异常
175             if (i > 0) {
176                 throw new RuntimeException("模拟事务异常");
177             }
178             //修改2
179             int k = sd.update("t_user", cv2, "_id = 2", null);
180             //设置事务是成功完成的
181             sd.setTransactionSuccessful();
182
183             Toast.makeText(TestActivity.this, "修改的记录条数 = " + (i + k), Toast.LENGTH_SHORT).show();
184
185         }
186         catch (Exception e)
187         {
188             e.printStackTrace();
189         }
190         finally {
191             //一定会被执行的代码
192             //结束事务
193             //1.没有异常,提交事务
194             //2.发生异常,回滚事务
195             sd.endTransaction();
196             //4.关闭连接
197             sd.close();
198         }
199     }
200     //实现SQLiteOpenHelper的内部类
201     class MyDBHelper extends SQLiteOpenHelper
202     {
203         //构造方法
204         public MyDBHelper(String dbname,int ver)
205         {
206             //显示调用父类的构造方法
207             //必须在第一行
208             super(TestActivity.this,dbname,null,ver);
209         }
210         //创建和初始化数据库
211         @Override
212         public void onCreate(SQLiteDatabase db) {
213             //1.执行创建数据库的语句
214             String sql = "CREATE TABLE t_user " +
215                     "(_id  INTEGER NOT NULL," +
216                     "name  VARCHAR(20) NOT NULL," +
217                     "sex  CHAR(1),age  INTEGER,\n" +
218                     "PRIMARY KEY (\"_id\"))";
219             db.execSQL(sql);
220             Log.e("TAG","表创建成功");
221             //2.执行初始化数据的语句,insert语句
222             ContentValues cv = new ContentValues();
223             cv.put("name","张三");
224             cv.put("sex","男");
225             cv.put("age",20);
226             //执行插入,返回主键
227             long l = db.insert("t_user",null,cv);
228             Log.e("TAG","初始化数据 = "+l);
229
230         }
231         //升级数据库
232         //触发条件:当版本号增大
233         @Override
234         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
235             //修改数据
236             if (newVersion ==2)
237             {
238                 ContentValues cv = new ContentValues();
239                 cv.put("name","李四");
240                 String sql = "update t_user set name=‘李四‘where _id=1";
241                 String[] str = {"1","18"};
242                 //调用db的更新方法
243                 int i = db.update("t_user",cv,"_id=? and age>?",str);
244                 Log.e("TAG","升级数据 数据条数 = "+i);
245             }
246         }
247     }
248 }
时间: 2024-10-13 00:25:46

Android——数据库相关(课堂整理)的相关文章

android wifi 相关方面整理

在android中. 管理wifi的管理器就是 WifiManager了.所以直接从 WifiManager说起. 1.WifiManager context.getSystemService(Context.WIFI_SERVICE)//得到 WifiManager setWifiEnabled(true) //打开wifi setWifiEnabled(false) //关闭wifi isWifiEnabled() //wifi是否可用 getWifiState() //得到wifi状态 g

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

文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的.但是我们都知道,数据库是 要和程序结合在一起使用的,单独对一个数据库去进行増删改查操作并没有什么意义,因此今天我们就来学习一下如何在Android程序当中去操作 SQLite数据库,还没看过前一篇文章的朋友可以先去参考 Android数据库高手秘籍(一)——SQLite命令 . 操作数据库的第一步当然是创建表了,传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之

自己动手写Android数据库框架

前言 相信不少开发人员跟我一样,每次都非常烦恼自己写数据库,并且那些数据库语句也经常记不住.当然网上也有非常多非常好的数据库框架,你能够直接拿来用,可是 非常多时候我们的项目.特别是一个小型的Andrond应用原本用到的数据库结构比較简单,不是必需去用那些有点臃肿的框架.当然,即使你用那些框架.当你遇到问题时,你是否也得去改动它?你要改动别人的框架必须的读懂他人的设计代码.所以无论从那个角度出发,你都得掌握简单的数据库操作.那么这篇博客就从简单的数据库操作来学习Android数据库相关知识点.然

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

上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的.但是我们都知道,数据库是要和程序结合在一起使用的,单独对一个数据库去进行増删改查操作并没有什么意义,因此今天我们就来学习一下如何在Android程序当中去操作SQLite数据库,还没看过前一篇文章的朋友可以先去参考Android数据库高手秘籍(一)--SQLite命令 . 操作数据库的第一步当然是创建表了,传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之

mysql数据库相关整理

数据库相关 1.InnoDB的日志 InnoDB有很多日志,日志中有2个概念需要分清楚,逻辑日志和物理日志. 1.1 逻辑日志有关操作的信息日志成为逻辑日志.比如,插入一条数据,undo逻辑日志的格式大致如下:<Ti,Qj,delete,U> Ti表示事务id,U表示Undo信息,Qj表示某次操作的唯一标示符 undo日志总是这样:1). insert操作,则记录一条delete逻辑日志. 2). delete操作,则记录一条insert逻辑日志.3). update操作,记录相反的updat

Android数据库源码分析(2)-SQLiteDatabase的实现以及多线程行为

Android数据库源码分析(2)-SQLiteDatabase的实现以及多线程行为 本系列主要关注安卓数据库的线程行为,分为四个部分: (1)SQLiteOpenHelper的getReadableDatabase和getWritableDatabase (2)SQLiteDatabase的实现以及多线程行为 (3)连接缓存池SQLiteConnectionPool (4)SQLiteDatabase多线程实践 本篇主要关注SQLiteDatabase的线程同步实现与架构实现. 1 SQLit

Android 数据库加密

一 一个简短的引论   SQLite是一个轻量的.跨平台的.开源的数据库引擎.它的读写效率.资源消耗总量.延迟时间和总体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方式(如Android.iOS). Android系统内置了SQLite数据库.而且提供了一整套的API用于对数据库进行增删改查操作.具体就不具体说明了. 然而.Android平台自带的SQLite有一个致命的缺陷:不支持加密.这就导致存储在SQLite中的数据能够被不论什么人用不论什么文本编辑器查看到.假设是普通的数据还好

Android数据库高手秘籍(三)——使用LitePal升级表

在上一篇文章中,我们学习了LitePal的基本用法,体验了使用框架来进行创建表操作的便利.然而大家都知道,创建表只是数据库操作中最基本的一 步而已,我们在一开始创建的表结构,随着需求的变更,到了后期是极有可能需要修改的.因此,升级表的操作对于任何一个项目也是至关重要的,那么今天我们就 一起来学习一下,在Android传统开发当中升级表的方式,以及使用LitePal来进行升级表操作的用法.如果你还没有看过前一篇文章,建议先去参考 一下 Android数据库高手秘籍(二)——创建表和LitePal的

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

在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar,放在你项目的libs目录下. 2.编写Bean类 package com.example.ormlite.bean; import java.util.Collection; import com.j256.ormlite.field.DatabaseField; import com.j256.