SQLite数据库详解
来源:互联网 发布:阿里云电话人工服务 编辑:程序博客网 时间:2024/05/01 16:23
本文主要对数据库的创建和使用
前言:
SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:
1、轻量级
SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。
2、独立性
SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。
3、隔离性
SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。
4、跨平台
SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。
5、多语言接口
SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。
6、安全性
SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
SQLite官方网站(http://www.sqlite.org),了解更多内容请前往。
1.创建MySqliteHelper继承SQLiteOpenHelper帮助类/** * aqliteOpenHelper * 1.提供了onCreate() onUpgrade() 等创建数据库更新数据库的方法 * 2.提供了获取数据库对象的函数 * 3.数据库创建了一次就不会再走onCreate的方法 */public class MySqliteHelper extends SQLiteOpenHelper { /** * 构造函数 * @param context 上下文对象 * @param name 表示创建数据库的名称 * @param factory 游标工厂 * @param version 表示创建数据库的版本 >=1 */ public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } public MySqliteHelper(Context context) { super(context, Constant.DATABASE_NAME, null, Constant.DATABASE_VERSION); } /** * 当数据库创建时回调的函数 * @param sqLiteDatabase 数据库对象 */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log.i("tag" ,"--------onCreate-------"); String sql = "create table " + Constant.TABLE_NAME +"("+ Constant._ID +" Integer primary key ," + ""+ Constant.NAME + "varchar(10)," + Constant.AGE + " Integer)"; sqLiteDatabase.execSQL(sql); //执行sql语句 } /** * 当数据库版本更新时回调的函数 * @param sqLiteDatabase 数据库对象 * @param i 数据库旧版本 * @param i1 数据库新版本 */ @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log.i("tag" ,"--------onUpgrade-------"); } /** * 当数据库打开时回调的函数 * @param db 数据库对象 */ @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); Log.i("tag" ,"--------onOpen-------"); }}
2.创建一个Constant常量类 方便以后更改数据
** * 常量类 便于修改 * DATABASE_NAME后期更改只需要更改后面的变量 "info.db"更改 前面的常亮不需要更改 */public class Constant { public static final String DATABASE_NAME = "info.db"; //数据库名称 public static final int DATABASE_VERSION = 1; //数据库的版本号 public static final String TABLE_NAME = "person"; // 表名 public static final String _ID = "_id" ; public static final String NAME = "name" ; public static final String AGE = "age" ;}
3.创建DbManager 主要是对数据库操作的工具类
public class DbManger { private static MySqliteHelper helper ; /** * 单列模式 */ public static MySqliteHelper getIntance (Context context){ if (helper == null){ helper = new MySqliteHelper(context); } return helper; } /** * 根据sql语句在数据库中执行语句 * @param db 数据库对象 * @param sql sql语句 */ public static void execSQL(SQLiteDatabase db , String sql ){ if (db != null){ if (sql != null && "".equals(sql)){ db.execSQL(sql); } } }}
public class MainActivity extends AppCompatActivity { private MySqliteHelper mMySqliteHelper; private SQLiteDatabase mDb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获得数据库帮助类对象 mMySqliteHelper = DbManger.getIntance(this); } /** * 创建数据库 * @param view */ public void createDb(View view){ /** * getWritableDatabase() getReadableDatabase() 创建或打开数据库 * 如果数据库不存在则创建数据库 如果数据库存在直接打开数据库 * 默认情况下两个函数都表示打开或者创建可读可写的数据库对象 如果磁盘已满或者是数据库本身的权限等情况下 * getReadableDatabase() 打开的是只读数据库 */ SQLiteDatabase db = mMySqliteHelper.getWritableDatabase(); } // public void click(View view){ switch (view.getId()){ // 插入数据 case R.id.btn_insert: mDb = mMySqliteHelper.getWritableDatabase(); String insert_sql = "inster into "+ Constant.TABLE_NAME +" values(1,'ZhangSan',20)"; DbManger.execSQL(mDb,insert_sql); String insetrt_sql2 = "inster into " + Constant.TABLE_NAME + " values(2,'LiSi',30)"; DbManger.execSQL(mDb,insetrt_sql2); mDb.close(); break; //修改数据 case R.id.btn_update: mDb = mMySqliteHelper.getReadableDatabase(); // String upDate_sql = "update person set name = 'XiaoMing' where _id =1" ; String upDate_sql = "update "+ Constant.TABLE_NAME+" set " + ""+Constant.NAME+" = 'XiaoMing' where "+Constant._ID+" =1" ; DbManger.execSQL(mDb,upDate_sql); mDb.close(); break; //删除语句 case R.id.btn_delete: mDb = mMySqliteHelper.getWritableDatabase(); String delet_sql = "delete from "+ Constant.TABLE_NAME +" where "+Constant._ID +" = 2"; DbManger.execSQL(mDb,delet_sql); mDb.close(); } } // API文档调用增删改 public void onClick(View view){ switch (view.getId()){ case R.id.btn_insertapi: mDb = mMySqliteHelper.getWritableDatabase(); /** * inseter (String table ,String nullColumnHack , ContentValues values) * String table 表示插入数据表的名称 * String nullColumnHack null值 * ContentValues values 键为String 类型的Hashmap集合 * 返回值 log 表示插入数据列数 */ ContentValues values = new ContentValues(); values.put(Constant._ID,3); //put (表示插入字段的名称 ,表示插入的具体值) values.put(Constant.NAME,"王五"); values.put(Constant.AGE,29); long result = mDb.insert(Constant.TABLE_NAME,null,values ); if (result>0){ Toast.makeText(this,"插入数据成功",Toast.LENGTH_LONG).show(); }else { Toast.makeText(this,"插入数据失败",Toast.LENGTH_LONG).show(); } mDb.close(); break; case R.id.btn_updateapi: mDb = mMySqliteHelper.getWritableDatabase(); /** *update(String table, ContentValues values, String whereClause, String[] whereArgs) * String table 表示修改数据库的名称 * ContentValues values 表示键为String 类型的hashmap * String whereClause 表示修改条件 * String[] whereArgs 表示修改条件的占位符 *返回值表示修改的条数 */ ContentValues count_values = new ContentValues(); count_values.put(Constant.TABLE_NAME,"小牧"); //(修改需要的字段名称,修改后的字段值) //int count = mDb.update(Constant.TABLE_NAME,count_values,Constant._ID+"=3",null); //两种写法 int count = mDb.update(Constant.TABLE_NAME,count_values,Constant._ID+"=?",new String[]{"3"}); if (count>0){ Toast.makeText(this,"修改数据成功",Toast.LENGTH_LONG).show(); }else { Toast.makeText(this,"修改数据失败",Toast.LENGTH_LONG).show(); } mDb.close(); break; case R.id.btn_deleteapi: mDb = mMySqliteHelper.getWritableDatabase(); /** * String table 删除的表名 * String whereClause 删除的条件 * String[] whereArgs 删除条件的占位符 */ int delete = mDb.delete(Constant.TABLE_NAME,Constant._ID+"=?",new String[]{"1"}); if (delete>0){ Toast.makeText(this,"删除数据成功",Toast.LENGTH_LONG).show(); }else { Toast.makeText(this,"删除数据失败",Toast.LENGTH_LONG).show(); } mDb.close(); break; } }}
最后我把xml文件也贴给大家
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.unruly_zhao.unruly_sqlite.MainActivity" android:orientation="vertical"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="创建数据库" /> <Button android:id="@+id/btn_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="插入数据" android:layout_marginTop="20dp" android:onClick="click"/> <Button android:id="@+id/btn_update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改数据" android:layout_marginTop="20dp" android:onClick="click"/> <Button android:id="@+id/btn_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除数据" android:layout_marginTop="20dp" android:onClick="click"/> <!--通过api的形式插入--> <Button android:id="@+id/btn_insertapi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="插入数据_API方式" android:layout_marginTop="20dp" android:onClick="onClick"/> <Button android:id="@+id/btn_updateapi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改数据_API方式" android:layout_marginTop="20dp" android:onClick="onClick"/> <Button android:id="@+id/btn_deleteapi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除数据_API方式" android:layout_marginTop="20dp" android:onClick="onClick"/></LinearLayout>
阅读全文
0 0
- SQLite数据库编程详解
- SQLite数据库详解
- Sqlite数据库约束条件详解
- SQLite数据库详解
- sqlite数据库详解
- SQLite Android数据库详解
- SQLite数据库约束详解
- Android数据库SQlite详解
- SQLite数据库约束详解
- SQLite数据库使用详解
- SQLite数据库使用方法详解
- SQLite数据库详解
- C#使用SQLite数据库详解
- C#使用SQLite数据库详解
- C#使用SQLite数据库详解
- Java连接SQLite数据库详解
- Android 使用SQLite数据库详解
- android sqlite 数据库使用 详解
- linux 网速监测工具
- ionic练习(1)- 实现页面切换
- @PostConstruct 和@PreDestory
- julianDate与Date之间的转换关系
- 使用Channel、Buffer、Selector完成网络通信--非阻塞(二)
- SQLite数据库详解
- java最基础
- TensorFlow入门
- git diff与patch命令的配合使用
- Spring JdbcTemplate 与 事务管理 学习
- Faster RCNN
- MyBatis学习总结(七)——Mybatis缓存
- 分布式锁的几种实现方式
- Adobe InDesign CC 2018 v13.0.0中文版下载附安装教程