Android基础-初识SQLite第2章SQLite数据库的操作 2-1数据库的创建

xiaoxiao2021-02-28  103

1、Sqlite数据库创建

1.1 SQLiteOpenHelper —-> 帮助类 * onCreate() —-> 创建方法 * onUpgrade() —-> 数据库升级方法 * onOpen() —-> 打开数据库方法 1.2

data 文件夹打不来

给sdcard加权限 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 给数据库问价配置 读写权限 两个exit是应为 多了一次进入root权限 H:\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo>adb shell generic_x86:/ $ su generic_x86:/ # chmod 777 /data/data/com.imooc.sqlitedemo/databases/info.db generic_x86:/ # exit generic_x86:/ $ exit 到数据库文件下把数据库文件考到 sdcard上 H:\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo>adb shell generic_x86:/ $ su generic_x86:/ # cd data generic_x86:/data # cd data generic_x86:/data/data # cd com.imooc.sqlitedemo/databases/ generic_x86:/data/data/com.imooc.sqlitedemo/databases # cat info.db > /sdcard/info.db generic_x86:/data/data/com.imooc.sqlitedemo/databases # exit generic_x86:/ $ exit 把数据库文件info.db 导入到 默认问价夹下 即(H:\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo) H:\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo>adb pull /sdcard/info.db /sdcard/info.db: 1 file pulled. 2.6 MB/s (16384 bytes in 0.006s)

错误:Duplicate label 标签重复

MainActivity.xml 文件 <?xml version="1.0" encoding="utf-8"?> <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.imooc.sqlitedemo.MainActivity" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="创建数据库" android:onClick="createDb" android:background="#ffbbff"/> <Button android:id="@+id/btn_insert" android:layout_height="wrap_content" android:text="插入数据" android:onClick="click" android:background="#ffbbff" android:layout_marginTop="15dp" android:layout_width="wrap_content" /> <Button android:id="@+id/btn_update" android:layout_height="wrap_content" android:text="修改数据" android:onClick="click" android:background="#ffbbff" android:layout_marginTop="15dp" android:layout_width="wrap_content" /> <Button android:id="@+id/btn_delet" android:layout_height="wrap_content" android:text="删除数据" android:onClick="click" android:background="#ffbbff" android:layout_marginTop="15dp" android:layout_width="wrap_content" /> <Button android:id="@+id/btn_insertAPI" android:layout_height="wrap_content" android:text="插入数据API" android:onClick="onClick" android:background="#ffbbff" android:layout_marginTop="15dp" android:layout_width="wrap_content" /> <Button android:id="@+id/btn_updateAPI" android:layout_height="wrap_content" android:text="修改数据PI" android:onClick="onClick" android:background="#ffbbff" android:layout_marginTop="15dp" android:layout_width="wrap_content" /> <Button android:id="@+id/btn_deletAPI" android:layout_height="wrap_content" android:text="删除数据API" android:onClick="onClick" android:background="#ffbbff" android:layout_marginTop="15dp" android:layout_width="wrap_content" /> </LinearLayout>

MainActivity.java package com.imooc.sqlitedemo; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.imooc.utils.Constant; import com.imooc.utils.DbManger; import com.imooc.utils.MySqliteHelper; import com.imooc.sqlitedemo.R; public class MainActivity extends AppCompatActivity { private MySqliteHelper helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); helper = DbManger.getIntance(this);//获得数据库帮助类的对象 } /* * 点击按钮创建数据库 * */ public void createDb(View view){ /* *来自MySqliteHelper的父类(即SQLiteOpenHelper) * getReadableDatabase() getWritableDatabase() 创建或打开数据库。 *如果数据库不存在则创建数据库 如果数据库存在直接打开数据库 * 默认情况下这两个函数都表示打开或者创建可读可写的数据库对象 * * 如果磁盘已满或者是数据库本身权限等情况下 getReadableDatabase() 打开的是只读数据库 * */ SQLiteDatabase db = helper.getWritableDatabase(); } public void click(View view){ switch (view.getId()){ case R.id.btn_insert: SQLiteDatabase db = helper.getWritableDatabase(); //声明一次就行。 String sql = "insert into "+ Constant.TABLE_NAME+" values(1,'zhangsan',20)"; DbManger.execSQL(db,sql); String sql1 = "insert into "+ Constant.TABLE_NAME+" values(2,'lisi',20)"; DbManger.execSQL(db,sql1); db.close(); break; case R.id.btn_update: db = helper.getWritableDatabase(); String sql2 = "update "+ Constant.TABLE_NAME+" set "+Constant.NANE +"='xioaming' where "+Constant._ID+"=1"; DbManger.execSQL(db,sql2); db.close(); break; case R.id.btn_delet: db = helper.getWritableDatabase(); String sql3 = "delete from "+Constant.TABLE_NAME+" where "+Constant._ID+" = 2"; DbManger.execSQL(db,sql3); db.close(); break; } } public void onClick(View view){ switch (view.getId()){ case R.id.btn_insertAPI: SQLiteDatabase db = helper.getWritableDatabase(); /* *查看API代码的快捷键 ctrl+Q *insert(String table, String nullColumnHack, ContentValues values) *String table 表示插入数据表的名称 * String nullColumnHack 参数:null 表示插入空行 * ContentValues values 键为String类型的hashmap集合 * 返回值 log 表示插入数据的列数 */ ContentValues values = new ContentValues(); values.put(Constant._ID,110); values.put(Constant.NANE,"xaiosan"); values.put(Constant.AGE,16); long result = db.insert(Constant.TABLE_NAME, null, values); if(result != 0){ Toast.makeText(this,"插入成功",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"插入失败",Toast.LENGTH_SHORT).show(); } db.close(); break; case R.id.btn_updateAPI: db = helper.getWritableDatabase(); /* * * update(String table, ContentValues values, String whereClause, String[] whereArgs); * String table 表示修改的数据表的名称 * ContentValues values 表示键为String类型的hasmap * String whereClause 表示修改条件 * String[] whereArgs 表示修改条件的占位符 * 返回值 int 表示修改的条数 * */ ContentValues cv = new ContentValues(); cv.put(Constant.NANE,"小慕");//put(需要修改的字段名称,修改后的字段值) //int count = db.update(Constant.TABLE_NAME,cv,"Constant._ID+"=?",null); int count = db.update(Constant.TABLE_NAME,cv,Constant._ID+"=?",new String[]{"110"}); // ? 占位 if(count > 0){ Toast.makeText(MainActivity.this,"修改成功",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this,"修改失败",Toast.LENGTH_SHORT).show(); } db.close(); break; case R.id.btn_deletAPI : db = helper.getWritableDatabase(); /* * int delete(String table, String whereClause, String[] whereArgs) * String table 表示删除数据表的名称 * String whereClause 表示删除的条件 * String[] whereArgs 表示删除条件的占位符 * */ int count2 = db.delete(Constant.TABLE_NAME,Constant._ID+"=?",new String[]{"1"}); if(count2 > 0){ Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this,"删除失败",Toast.LENGTH_SHORT).show(); } db.close(); break; } } } Constant.java package com.imooc.utils; /** * Created by JC on 2017/8/30. * 数据库常量 */ 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 NANE = "name"; public static final String _ID = "_id"; public static final String AGE = "age"; } DbManger.java package com.imooc.utils; import android.content.Context; import android.database.sqlite.SQLiteDatabase; /** * Created by JC on 2017/8/30. * 数据库:数据持久化得存储, * Activity:数据页面的展示, * 专门业务逻辑处理的类, * * 主要是对数据库操作的工具类。 */ public class DbManger { private static MySqliteHelper helper; public static MySqliteHelper getIntance(Context context){ //获得 helper对象 if(helper == null){ helper = new MySqliteHelper(context); } return helper;//else } /* 根据sql语句在数据库中执行语句 * @param db 数据库对象 * @param sql sql语句 */ public static void execSQL(SQLiteDatabase db,String sql){ if( db != null){ if(sql != null && !"".equals(sql)){ //sql不为空 db.execSQL(sql); } } } } MySqliteHelper.java package com.imooc.utils; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by JC on 2017/8/30. * * SQLiteOpenHelper * 作用: * 1.提供onCreate() onUpgrade()等创建数据库更新数据的方法 * 2.提供了获取数据库对象的函数 */ public class MySqliteHelper extends SQLiteOpenHelper{ /** *构造函数 * @param context 上下文对象 * @param name 表示创建数据库的名称 * @param factory 游标工厂 * @param version 表示当前创建数据库的版本 要求: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是参数的解释 /** *当数据库创建时回调的函数 *@param db 数据库对象 */ @Override public void onCreate(SQLiteDatabase db) { Log.i("tag","------ onCreate------"); String sql = "create table "+Constant.TABLE_NAME+"("+Constant._ID+ " Integer primary key,"+Constant.NANE+" varchar(10),"+Constant.AGE+" Integer)"; db.execSQL(sql);//执行sql语句 } /** *当数据库版本更新时回调的函数 * @param db 数据库对象 * @param i 数据库旧版本 * @param i1 数据库新版本 */ @Override public void onUpgrade(SQLiteDatabase db, int i, int i1) { Log.i("tag","------ onUpgrade------"); } /** * 当数据库打开时回调的函数 * @param db 数据库对象 */ @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); Log.i("tag","------ onOpen------"); } }
转载请注明原文地址: https://www.6miu.com/read-41068.html

最新回复(0)