Android学习笔记-SQLite数据库实战
来源:互联网 发布:梦里花落知多少意思 编辑:程序博客网 时间:2024/04/26 19:49
SQLite是一个轻量级的数据库,我们最常用的是集成SQLiteOpenHelper这个类,我们需要去实现他的onCreate和onUpgrade方法。
测试了这么多,发现你创建一个数据库,看例子,我说的是例子,,不管你把DatabaseHelper new多少遍,只要你的数据库名字一样,他都不会new,引用的是同一个数据库。
好了,看例子吧
这个是继承SQLiteOpenHelper的类
package com.example.pc_bbj.study_sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/** * Created by PC_BBJ on 2016/3/21. * SQLiteOpenHelper是一个抽象类,必须实现他的onCreate和onUpgrade方法 * context 当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context * 数据库进行查询的时候会返回一个cursor,这个cursor就是在上面的factory中产生的。 如果有需求,可以自定义factory,这样返回的cursor就会符合自己的需求! */public class DatabaseHelper extends SQLiteOpenHelper{ public static final int VERSION=1; private static final String SWORD="SWORD"; //三个不同参数的构造函数 //带全部参数的构造函数,此构造函数必不可少 public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //带两个参数的构造函数,调用的其实是带三个参数的构造函数 public DatabaseHelper(Context context, String name) { this(context, name, VERSION); } //带三个参数的构造函数,调用的是带所有参数的构造函数 public DatabaseHelper(Context context, String name, int version) { this(context,name,null,version); } @Override public void onCreate(SQLiteDatabase db) { Log.i(SWORD,"create a Database"); //创建数据库sql语句 String sql="create table user(id int,name varchar(20))"; //执行创建数据库操作 db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //创建成功,日志输出提示 Log.i(SWORD,"update a Database"); }}
因为在SQLite里面,是用SQLiteDatabase来操作的,所以我们通过DatabaseHelpe的实例.getReadableDatabase()
获取只读数据库
DatabaseHelper的实例.getWritableDatabase()获取可读写数据库,记住,只要数据库名字不变,你不管怎么new,都是引用的同一个数据库
这里说一个Cursor,游标对象,如果你学过用java链接过数据库,那应该大家都知道,我们每次执行查询语句返回的是一个ResultSet,Cursor跟他是一样的,所以我们要用cursor.moveToNext()来遍历每一行,再通过cursor.getString(某一列)来获取表格里面的值,下面的所有操作我基本都用exeSQL()和insert、update都执行了一遍
package com.example.pc_bbj.study_sqlite;/** * 创建的数据库会被放置在data/data/packagename/databases */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.util.Log;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private final static String SWORD="SWORD"; //声明五个控件对象 Button createButton=null; Button updateButton=null; Button insert=null; Button update=null; Button query=null; Button delete=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViews(); } private void findViews() { //根据控件Id得到控件 createButton=(Button)findViewById(R.id.createDatabase); updateButton=(Button)findViewById(R.id.updateDatabase); insert=(Button)findViewById(R.id.insert); update=(Button)findViewById(R.id.update); query=(Button)findViewById(R.id.query); delete=(Button)findViewById(R.id.delete); //添加监听器 createButton.setOnClickListener(this); updateButton.setOnClickListener(this); insert.setOnClickListener(this); update.setOnClickListener(this); query.setOnClickListener(this); delete.setOnClickListener(this); } @Override public void onClick(View v) { //判断所触发的被监听控件 switch (v.getId()){ //创建数据库 case R.id.createDatabase: //创建一个DatabaseHelper对象 DatabaseHelper dbHelper=new DatabaseHelper(MainActivity.this,"test_db"); //取得一个只读的数据库对象 //SQLiteDatabase是一个数据库访问类 SQLiteDatabase db1=dbHelper.getReadableDatabase(); break; //更新数据库 case R.id.updateDatabase: DatabaseHelper dbHelper2=new DatabaseHelper(MainActivity.this,"test_db",2); SQLiteDatabase db2=dbHelper2.getReadableDatabase(); break; //插入数据 case R.id.insert: //创建存放数据的ContentValues对象 ContentValues values=new ContentValues(); //向values里面存放数据 values.put("id",1); values.put("name","zhangsan"); DatabaseHelper dbHelper3=new DatabaseHelper(MainActivity.this,"test_db"); SQLiteDatabase db3=dbHelper3.getWritableDatabase(); //执行数据库插入命令 表名 列名 参数集合 //insert(表名 列名 参数集合) db3.insert("user",null,values); db3.execSQL("insert into user(id,name) values(?,?)",new Object[]{"2","xxx"}); break; //更新数据信息 case R.id.update: DatabaseHelper dbHelper4=new DatabaseHelper(MainActivity.this,"test_db"); SQLiteDatabase db4=dbHelper4.getWritableDatabase(); ContentValues values2=new ContentValues(); values2.put("name","xiaosan"); db4.update("user", values2, "id=?", new String[]{"1"}); db4.execSQL("update user set name=? where id=?",new String[]{"xxx1","1"}); break; //查询信息 Cursor是一个游标借口,在数据库中作为返回值,相当于结果集ResultSet case R.id.query: DatabaseHelper dbHelper5=new DatabaseHelper(MainActivity.this,"test_db"); SQLiteDatabase db5=dbHelper5.getReadableDatabase(); //创建游标对象 s是一个字符串数组,不是字符串 String[] s=new String[]{"1"}; Cursor cursor=db5.query("user",new String[]{"id","name"},"id=?",s ,null,null,null,null); //利用游标遍历所有数组对象 Cursor cursor1=db5.rawQuery("select * from user where id=?",new String[]{"1"}); while(cursor.moveToNext()){ String name=cursor.getString(cursor.getColumnIndex("name")); //日志打印输出 Log.i(SWORD,"query->name"); } break; //删除记录 case R.id.delete: DatabaseHelper dbHelper6=new DatabaseHelper(MainActivity.this,"test_db"); SQLiteDatabase db6=dbHelper6.getWritableDatabase(); db6.delete("user","id=?",new String[]{"1"}); break; default: Log.i(SWORD, "error"); break; } }}
最后看一下界面的布局代码吧
**<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/createDatabase" android:text="createDatabase"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/updateDatabase" android:text="updateDatabase"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/insert" android:text="insert"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/update" android:text="update"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/query" android:text="query"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/delete" android:text="delete"/></LinearLayout>**
界面布局随便做的,不要在意这些细节。
--生命不息,代码不止 bbj
0 0
- Android学习笔记-SQLite数据库实战
- Android SQLite数据库学习笔记
- android学习笔记--sqlite数据库
- android学习笔记---SQLite数据库的使用
- 【Android学习笔记】SQLite数据库存储
- Android学习笔记 - 数据库篇 (SQLite)
- android学习笔记之SQLite数据库存储
- Android学习笔记 - 数据库篇 (SQLite)
- 学习笔记 android数据库之 Sqlite
- android学习笔记之SQLite数据库
- Android学习笔记---SQLite数据库 api
- android学习笔记(18)数据库sqlite初步
- android学习笔记(19)数据库sqlite进阶
- Android学习笔记----SQLite数据库基本用法
- Android学习笔记——数据库SQLite
- Android学习笔记(42):SQLite数据库
- Android中SQLite数据库学习笔记
- Android SQLite数据库学习笔记(1)
- 刷题心得
- 小笔记
- SharedPreferences工具类封装
- mac IntelliJ 15破解方法
- HDU-2546-饭卡
- Android学习笔记-SQLite数据库实战
- C++ 穷举法 三色球问题
- C++获取数组的长度(用模板可以实现)
- Java三大特性之多态
- prim 与 dijkstra 的区别
- uvalive 7480 Association for Control Over Minds
- Java设计原则和模式笔记
- JDBC
- iOS-3D touch相关开发