android:sqlite 数据库的详解
2016-10-26 00:23
162 查看
所有对sqlite的讲解都在代码中进行了注释,可把相关代码拷贝到工程中进行查看
运行效果如下图
1.资源文件strings.xml
2.布局文件activity_main
2.Activity的实现类MainActivity.java
4.SQLiteOpenHelper的实现类OpenHelper.java
运行效果如下图
1.资源文件strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">sqlit数据库</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="sql_add">添加数据</string> <string name="sql_delete">删除数据</string> <string name="sql_update">修改数据</string> <string name="sql_query">查询数据</string> </resources>
2.布局文件activity_main
<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" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="---通过SQL语句进行数据的增删改,优点:对多表查询有优势。缺点:当SQL语句出现语法错误的时候不好查找,如圆角的空格,而且增删改没有返回值,调用完方法后不知道是否成功--"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickAdd" android:text="@string/sql_add" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickUpdate" android:text="@string/sql_update" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickDelete" android:text="@string/sql_delete" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickQuery" android:text="@string/sql_query" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="---通过封装好的方法对数据进行增删改查,优点:不容易写错,有返回值可判断执行是否正确。缺点对多表查询不方便--"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickAdd2" android:text="@string/sql_add" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickUpdate2" android:text="@string/sql_update" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickDelete2" android:text="@string/sql_delete" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClickQuery2" android:text="@string/sql_query" /> </LinearLayout> </RelativeLayout>
2.Activity的实现类MainActivity.java
package com.example.testsqlite; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import com.example.testsqlite.db.OpenHelper; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private OpenHelper helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //这个地方是不会创建数据库的 //!!!!!!!当你第一次在手机上部署这个应用的时候一定要用!!!!!! helper = new OpenHelper(this);//这个方法!!!!!!!!!!!!!! //helper = new OpenHelper(this, 3);//当你第二次部署项目的时候调用这个方法!!!这个是为了验证OpenHelper.onUpgrade的方法!!! // 打开或创建数据库,第一次调用则创建数据库 //SQLiteDatabase writableDatabase = helper.getWritableDatabase(); // 打开或创建数据库,如果磁盘无存储空间则返回一个只读的数据库对象 // SQLiteDatabase readableDatabase = helper.getReadableDatabase(); } /** * 添加一条数据 * @param v */ public void onClickAdd(View v) { SQLiteDatabase db = helper.getWritableDatabase();// 打开或创建数据库,第一次调用则穿件数据库 db.execSQL("INSERT INTO USER (NAME,PHONE,SEX,AGE) VALUES(?,?,?,?)", new Object[]{"王超","18701545309",1,30}); db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } /** * 修改记录 * @param v */ public void onClickUpdate(View v) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("UPDATE USER SET NAME=? WHERE PHONE=?", new Object[]{"马汉","18701545309"}); db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } /** * 删除数据 * @param v */ public void onClickDelete(View v) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("delete from user where PHONE=?", new Object[]{"18701545309"}); db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } /** * 查询数据集 * @param v */ public void onClickQuery(View v) { SQLiteDatabase db = helper.getWritableDatabase(); // Cursor cursor = db.query("user", null,null,null,null,null,null);//查询整张表 //cursor为数据游标 Cursor cursor = db.rawQuery("select * from user",null);//第一参数为sql语句,第二个参数为条件填充 if(cursor != null && cursor.getCount()>0) { while(cursor.moveToNext()) { Integer _id = cursor.getInt(0); String name = cursor.getString(1); Integer age = cursor.getInt(2); Integer sex = cursor.getInt(3); String phone = cursor.getString(4); Log.i(TAG,"id:" + _id + ",name:" + name + ",age:" + age + ",sex:" + sex + ",phone:" + phone); } cursor.close(); } db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } /** * 添加一条数据 * @param v */ public void onClickAdd2(View v) { SQLiteDatabase db = helper.getWritableDatabase();// 打开或创建数据库,第一次调用则穿件数据库 ContentValues values = new ContentValues(); values.put("name", "王超"); values.put("phone", "18701545309"); values.put("age", 11); values.put("sex", 2); long inserteRow = db.insert("user", null, values);//inserteRow返回插入行的ID,没有执行则返回-1 if(inserteRow != -1) { Log.i(TAG,"添加数据成功"); } else { Log.i(TAG,"添加数据失败"); } db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } /** * 修改记录 * @param v */ public void onClickUpdate2(View v) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "王朝"); values.put("phone", "18701545309"); values.put("age", 11); values.put("sex", 2); int rowsAffected = db.update("user", values, "name=?", new String[]{ "王超"});//返回他行受影响的行数 if(rowsAffected > 0) { Log.i(TAG,"修改了" + rowsAffected + "数据"); } else { Log.i(TAG,"没有修改数据"); } db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } /** * 删除数据 * @param v */ public void onClickDelete2(View v) { SQLiteDatabase db = helper.getWritableDatabase(); int rowsAffected = db.delete("user", "name=?", new String[]{"王朝"});//返回删除行的条数 if(rowsAffected > 0) { Log.i(TAG,"删除了" + rowsAffected + "数据"); } else { Log.i(TAG,"没有删除数据"); } db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } /** * 查询数据集 * @param v */ public void onClickQuery2(View v) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.query("user", null,null,null,null,null,null);//查询整张表 if(cursor != null && cursor.getCount()>0) { while(cursor.moveToNext()) { Integer _id = cursor.getInt(0); String name = cursor.getString(1); Integer age = cursor.getInt(2); Integer sex = cursor.getInt(3); String phone = cursor.getString(4); Log.i(TAG,"id:" + _id + ",name:" + name + ",age:" + age + ",sex:" + sex + ",phone:" + phone); } cursor.close(); } db.close();//官方建议用完后关闭数据库,但是实际开发的时候如果对数据库操作非常频繁,则不建议关闭数据库 } }
4.SQLiteOpenHelper的实现类OpenHelper.java
package com.example.testsqlite.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * 实现android提供的抽象类SQLiteOpenHelper,用于sqlite数据库的操作 * @author wangguang * */ public class OpenHelper extends SQLiteOpenHelper { /** * 第一次调用数据库,对出具库进行访问。 * @param context */ public OpenHelper(Context context) { //数据版本version只能比之前高,不得低于之前设定的版本号 super(context, "smartdot.db", null, 1);//系统创建数据库 } /** * 当数据库(表)发生改变时可调用此方法 * @param Context context 上下文 * @param int version 数据库版本 */ public OpenHelper(Context context,int version) { //数据版本version只能比之前高,不得低于之前设定的版本号 super(context, "smartdot.db", null, version); } /** * 当数据库第一次创建的时候创建<br> * 这个表特别适合做创建表的操作 */ @Override public void onCreate(SQLiteDatabase db) { String creaTTable = "create table user (_id integer PRIMARY KEY AUTOINCREMENT NOT NULL,name varchar,age int,sex int,phone varchar)"; db.execSQL(creaTTable); } /** * 当数据库版本发生改变的时候调用此方法,此方法适合修改数据库的处理修改表,添加表,删除表<br> *@param SQLiteDatabase db<br> *@param int oldVersion 老版本号<br> *@param int newVersion 新版本号<br> */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(oldVersion != newVersion) { String alter = "ALTER TABLE user ADD COLUMN other varchar"; db.execSQL(alter); } } }
相关文章推荐
- Android-数据库详解之一:SQLite关键字以及语法
- Android SQLite数据库增删改查操作的使用详解
- Android数据库SQLite操作详解及LitePal用法详解(四)
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- (转)【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android数据库SQlite详解
- android SQLite数据库的使用介绍详解
- Android SQLite数据库增删改查操作的使用详解
- Android-数据库详解之一:SQLite关键字以及语法
- Android轻量型数据库SQLite详解
- Android数据库SQLite使用详解二 : 学生管理系统的简单实现
- Android数据库SQLite的使用详解(SQLiteOpenHelper,SQLiteDataBase)【看后面简约进阶版】access中数据库拷贝到本地
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- android SQLite数据库用法图文详解(附源码)
- Android SQLite数据库增删改查操作的使用详解
- SQLite Android数据库详解
- android:sqlite 数据库的事务详解
- 详解Android轻量型数据库SQLite