扣丁学堂笔记第16天SQLite数据库
2016-03-30 20:49
477 查看
1.简介与命令操作
首先找到sqlite3所在路径,如adt bundle的sqlite3路径为:E:\BaiduYunDownload\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
然后执行sqlite3.exe test.db
可以执行.help命令查看帮助信息
执行.databases查看数据库所在位置
执行.tables查看创建的表;.schema pet查看表中创建的语句
执行select * from pet查询表中的数据
执行insert into pet (name,age) values ('doge',5);为数据表插入数据
这时候再执行select * from pet;语句就有数据了
除了使用命令行方式对数据库进行操作,还可以使用第三方可视化工具,如sqlite studio,官网为:http://sqlitestudio.pl/
2.元数据定义与SqliteOpenHelper
下面使用代码实现sqlite数据库元数据的定义
实现步骤:
首先创建一个类PetMetaData,因为此类不可被继承,所以声明类时添加final关键字,此类不想被实例化,所以在构造方法时添加private关键字;
然后创建一张数据表,并且实现基类:public static abstract class DogTable implement BaseColumns{}
添加表名:public static final String TABLE_NAME = “dog”;
添加字段,如:name,age:public static final String NAME = "name"; public static final String AGE = "age";
使用SqliteOpenHelper创建数据库
实现步骤:
首先新建一个类DatabaseHelper继承自SqliteOpenHelper,然后实现它的onCreate和onUpgrade方法;
还需要实现构造方法DatabaseHelper,传入四个参数:第一个是上下文context,第二个是数据库名称,第三个是游标,一般写null表明使用系统默认的,第四个是版本号;
在此之前可以先声明数据库的名称和版本号:private static final String DB_NAME = "pet.db"; private static final int VERSION = 1;此时可以只保留上下文一个参数,删掉其他三个,在super方法里传入四个变量
然后定义一个创建数据表一个删除数据表的常量;
现在就可以在onCreate和onUpgrade方法里调用db.execSQL()方法了
PetMetaData.java
DatabaseHelper.java
3.增删改查操作
首先新建一个DatabaseAdapter类,
然后再新建一个实体类Dog,添加id,name,age等属性,生成三个构造方法;然后生成get,set方法;再生成toString方法;
……
(注:以下代码有误,然而悲催笔者无力排除BUG T^T)
DatabaseAdapter.java
Dog.java
DatabaseHelper.java与PetMetaData.java见上文
activity_main.xml
MainActivity.java
4.原生sql操作和事务
5.Sqlite游戏玩家管理案例
首先找到sqlite3所在路径,如adt bundle的sqlite3路径为:E:\BaiduYunDownload\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
然后执行sqlite3.exe test.db
可以执行.help命令查看帮助信息
执行.databases查看数据库所在位置
执行.tables查看创建的表;.schema pet查看表中创建的语句
执行select * from pet查询表中的数据
执行insert into pet (name,age) values ('doge',5);为数据表插入数据
这时候再执行select * from pet;语句就有数据了
除了使用命令行方式对数据库进行操作,还可以使用第三方可视化工具,如sqlite studio,官网为:http://sqlitestudio.pl/
2.元数据定义与SqliteOpenHelper
下面使用代码实现sqlite数据库元数据的定义
实现步骤:
首先创建一个类PetMetaData,因为此类不可被继承,所以声明类时添加final关键字,此类不想被实例化,所以在构造方法时添加private关键字;
然后创建一张数据表,并且实现基类:public static abstract class DogTable implement BaseColumns{}
添加表名:public static final String TABLE_NAME = “dog”;
添加字段,如:name,age:public static final String NAME = "name"; public static final String AGE = "age";
使用SqliteOpenHelper创建数据库
实现步骤:
首先新建一个类DatabaseHelper继承自SqliteOpenHelper,然后实现它的onCreate和onUpgrade方法;
还需要实现构造方法DatabaseHelper,传入四个参数:第一个是上下文context,第二个是数据库名称,第三个是游标,一般写null表明使用系统默认的,第四个是版本号;
在此之前可以先声明数据库的名称和版本号:private static final String DB_NAME = "pet.db"; private static final int VERSION = 1;此时可以只保留上下文一个参数,删掉其他三个,在super方法里传入四个变量
然后定义一个创建数据表一个删除数据表的常量;
现在就可以在onCreate和onUpgrade方法里调用db.execSQL()方法了
PetMetaData.java
package com.example.sqlitetest; import android.provider.BaseColumns; public final class PetMetaData { private PetMetaData(){} public static abstract class DogTable implements BaseColumns{ public static final String TABLE_NAME = "dog"; public static final String NAME = "name"; public static final String AGE = "age"; } }
DatabaseHelper.java
package com.example.sqlitetest; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "pet.db"; private static final int VERSION = 1; private static final String CREATE_TABLE_DOG = "CREATE TABLE dog(_id INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT,age INTEGER"; private static final String DROP_TABLE_DOG = "DROP TABLE IF EXISTS dog"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } // 如果数据库表不存在,会执行该方法 @Override public void onCreate(SQLiteDatabase db) { // SQLiteDatabase 用于操作数据库的工具表 db.execSQL(CREATE_TABLE_DOG); } // 升级 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(DROP_TABLE_DOG); db.execSQL(CREATE_TABLE_DOG); } }
3.增删改查操作
首先新建一个DatabaseAdapter类,
然后再新建一个实体类Dog,添加id,name,age等属性,生成三个构造方法;然后生成get,set方法;再生成toString方法;
……
(注:以下代码有误,然而悲催笔者无力排除BUG T^T)
DatabaseAdapter.java
package com.example.sqlitetest; import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class DatabaseAdapter { private DatabaseHelper databaseHelper; public DatabaseAdapter(Context context) { databaseHelper = new DatabaseHelper(context); } //添加操作 public void add(Dog dog) { // 获取操作数据库的工具类 SQLiteDatabase db = databaseHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(PetMetaData.DogTable.NAME, dog.getName()); values.put(PetMetaData.DogTable.AGE, dog.getAge()); // 参数(表名,可以为null的列名,ContentValues) db.insert(PetMetaData.DogTable.TABLE_NAME, null, values); db.close(); } // 删除操作 public void delete(int id) { SQLiteDatabase db = databaseHelper.getWritableDatabase(); String whereClause = PetMetaData.DogTable._ID + "=?"; String[] whereArgs = { String.valueOf(id) }; // 参数(表名,删除条件,删除条件的值) db.delete(PetMetaData.DogTable.TABLE_NAME, whereClause, whereArgs); db.close(); } // 更新操作 public void update(Dog dog) { SQLiteDatabase db = databaseHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(PetMetaData.DogTable.NAME, dog.getName()); values.put(PetMetaData.DogTable.AGE, dog.getAge()); String whereClause = PetMetaData.DogTable._ID + "=?"; String[] whereArgs = { String.valueOf(dog.getId()) }; // 参数(表名,ContentValues,条件,条件的值) db.update(PetMetaData.DogTable.TABLE_NAME, values, whereClause, whereArgs); db.close(); } //根据ID查询单个记录 public Dog findById(int id) { SQLiteDatabase db = databaseHelper.getReadableDatabase(); String[] columns = { PetMetaData.DogTable._ID, PetMetaData.DogTable.NAME, PetMetaData.DogTable.AGE }; // 参数(是否去除重复记录,表名,要查询的列,查询条件,查询条件的值,分组条件,分组条件的值,排序,分页条件) Cursor c = db.query(true, PetMetaData.DogTable.TABLE_NAME, columns, PetMetaData.DogTable._ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null); Dog dog = null; if (c.moveToNext()) { dog = new Dog(); dog.setId(c.getInt(c .getColumnIndexOrThrow(PetMetaData.DogTable._ID))); dog.setName(c.getString(c .getColumnIndexOrThrow(PetMetaData.DogTable.NAME))); dog.setAge(c.getInt(c .getColumnIndexOrThrow(PetMetaData.DogTable.AGE))); c.close(); db.close(); } return dog; } // 查询所有 public ArrayList<Dog> findAll() { SQLiteDatabase db = databaseHelper.getReadableDatabase(); String[] columns = { PetMetaData.DogTable._ID, PetMetaData.DogTable.NAME, PetMetaData.DogTable.AGE }; // 参数(是否去除重复记录,表名,要查询的列,查询条件,查询条件的值,分组条件,分组条件的值,排序,分页条件) Cursor c = db.query(true, PetMetaData.DogTable.TABLE_NAME, columns, null, null, null, null, null, null); ArrayList<Dog> dogs = new ArrayList<Dog>(); Dog dog = null; while (c.moveToNext()) { dog = new Dog(); dog.setId(c.getInt(c .getColumnIndexOrThrow(PetMetaData.DogTable._ID))); dog.setName(c.getString(c .getColumnIndexOrThrow(PetMetaData.DogTable.NAME))); dog.setAge(c.getInt(c .getColumnIndexOrThrow(PetMetaData.DogTable.AGE))); dogs.add(dog); c.close(); db.close(); } return dogs; } }
Dog.java
package com.example.sqlitetest; public class Dog { private int id; private String name; private int age; public Dog() { super(); } public Dog(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public Dog(String name, int age) { super(); this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Dog [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
DatabaseHelper.java与PetMetaData.java见上文
activity_main.xml
<RelativeLayout 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.example.sqlitetest.MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="添加数据" android:onClick="addClick"/> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignRight="@+id/button2" android:layout_below="@+id/button2" android:text="删除数据" android:onClick="deleteClick"/> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button3" android:layout_alignParentRight="true" android:layout_below="@+id/button3" android:text="修改数据" android:onClick="updateClick" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignRight="@+id/button1" android:layout_below="@+id/button1" android:text="查询单个数据" android:onClick="findByIdClick"/> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button4" android:layout_alignRight="@+id/button4" android:layout_below="@+id/button4" android:text="查询所有数据" android:onClick="findAllClick"/> </RelativeLayout>
MainActivity.java
package com.example.sqlitetest; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { private DatabaseAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); adapter = new DatabaseAdapter(this); } public void addClick(View view) { Dog dog = new Dog("doge",5); adapter.add(dog); } public void deleteClick(View view) { adapter.delete(1); } public void updateClick(View view) { Dog dog = new Dog(1,"wangwang",4); adapter.update(dog); } public void findByIdClick(View view) { Dog dog = adapter.findById(1); System.out.println(dog); } public void findAllClick(View view) { ArrayList<Dog> dogs = adapter.findAll(); int size = dogs.size(); for(int i=0;i<size;i++){ System.out.println(dogs.get(i)); } } }
4.原生sql操作和事务
5.Sqlite游戏玩家管理案例
相关文章推荐
- Redis 数据类型总结—String
- 还是mysql的问题
- Mac下配置mysql环境变量的另一种方式
- mysql 安装
- lucene全文检索与数据库检索的区别
- Redis 配置文件总结
- Oracle学习(九)----表的增删改查,回收站
- 缓存技术PK:选择Memcached还是Redis(转)
- VS配置、编译sqlite失败的解决方法
- 关于 msql 使用过程中的总结
- mysql 时间戳格式化函数from_unixtime使用说明
- 【Redis】简介与安装
- (4.6.2)数据库性能优化
- ubuntu 15.04 通过3306端口远程连接mysql
- 数据分页的实现
- 转载文章----十步完全理解SQL
- 26、Java调用Oracle存储过程?
- 数据库关系代数练习题
- SQLPlus在连接时通常有四种方式
- SQL Server使用文件组备份降低备份文件占用的存储空间