您的位置:首页 > 移动开发 > Android开发

android:sqlite 数据库的详解

2016-10-26 00:23 162 查看
所有对sqlite的讲解都在代码中进行了注释,可把相关代码拷贝到工程中进行查看

运行效果如下图



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);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐