SQLite使用方法三(二十二)

更新时间:2023-05-16 17:57:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

android

SQLite使用方法三 (windows平台)

android

版 本 历 史

android

目 录

1引言 .............................................................................................................................. 1 1.1编写目的 ................................................................................................................. 1 1.2前景 ........................................................................................................................ 1 1.3定义 ........................................................................................................................ 1 1.4参考资料 ................................................................................................................. 1 2.1软件的结构 ............................................................................................................. 2 2.2程序表 .................................................................................................................... 2 2.3文卷表 .................................................................................................................... 2 3

SQLITE使用方法三 ................................................................................................. 2 3.1 例1 PERSONAL_CONTACTS........................................................................................ 3

android

SQLite使用方法三

(windows平台)

1引言

1.1编写目的

学会Android友善的免费应用程序开发环境,阅读者为计算机应用与网络教研室Android开发小组成员。

1.2前景

说明:

a. 这份操作手册所描述的软件操作系统的名称为Microsoft Windows XP SP3; b. 该软件项目的任务提出者:计算机应用与网络教研室

开发者:Android开发小组 用户(或首批用户):2011级软件工程专业学生

安装软件者:Android开发小组

1.3定义

Android——一个免费的操作系统平台

JDK 5 或JDK 6——Java 开发环境

Eclipse IDE——一个多用途的开发工具平台

Android SDK——Android 程序开发套件,包含Android 手机模拟器(Emulator) ADT——基于Eclipse 的Android 开发工具扩充套件(Android Development Tools plugin)

1.4参考资料

列出有用的参考资料,如:

a. 本项目的经核准的工作计划任务书;

b. Android 官方网站/

c. 开放手持装置联盟(Open Handset Alliance) /

android

d. Google Android 开发者部落格/ e. Android 开发者大赛网站/android/adc.html f. Android 文件/

g. /pub/a/onlamp/2007 ... e-sdk.html h. CNet 专访:Google 手机平台背后的原创者

i. /news/comm/0,200 ... 898,00.htm j. Android 源代码网站 2软件征述

2.1软件的结构

结合软件系统所具有的功能包括输入、处理和输出提供该软件的总体结构图表。

2.2程序表

列出本系统内每个程序的标识符、编号和助记名。

2.3文卷表

列出将由本系统引用、建立或更新的每个永久性文卷,说明它们各自的标识符、编号、助记名、存储媒体和存储要求。

3 SQLite使用方法三

一、个人通信录的实现

确定个人通信录的数据库结构,需要一张表,如下结构

android

3.1 例

1 Personal_Contacts

android

1、在Personal_ContactsActivity.java中,添加代码如下:

import static edu.eurasia.MyOpenHelper.*; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog;

import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.content.Intent;

import android.content.DialogInterface.OnClickListener; import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup;

import youtParams; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

public class Personal_ContactsActivity extends Activity {

MyOpenHelper myHelper; // 声明MyOpenHelper对象 String[] contactsName; // 声明用于存放联系人姓名的数组 String[] contactsPhone; // 声明用于存放联系人电话的数组 int[] contactsId; // 声明用于存放联系人id的数组

final int MENU_ADD = Menu.FIRST; // 声明菜单选行的ID

final int MENU_DELETE = Menu.FIRST + 1; // 声明菜单项的编号 final int DIALOG_DELETE = 0; // 确认删除对话框的ID ListView lv; // 声明ListView对象

BaseAdapter myAdapter = new BaseAdapter() {

@Override

public int getCount() { }

if (contactsName != null) { // 如果姓名数组不为空 }

return contactsName.length; return 0; // 如果姓名数组为空则返回0 } else {

android

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(yout.main); };

@Override

public View getView(int position, View convertView, ViewGroup }

LinearLayout ll = new

ll.setOrientation(LinearLayout.HORIZONTAL);

TextView tv = new TextView(Personal_ContactsActivity.thistv.setText(contactsName[position]); tv.setTextSize(32);

tv.setTextColor(Color.BLACK); tv.setLayoutParams(new

LayoutParams.WRAP_CONTENT));

@Override

public long getItemId(int arg0) { }

return 0;

@Override

public Object getItem(int arg0) { }

return null;

parent) {

LinearLayout(Personal_ContactsActivity.this);

LayoutParams(LayoutParams.WRAP_CONTENT,

tv.setGravity(Gravity.CENTER_VERTICAL);

TextView tv2 = new TextView(Personal_ContactsActivity.thistv2.setText("[" + contactsPhone[position] + "]"); tv2.setTextSize(28);

tv2.setTextColor(Color.BLACK); tv2.setLayoutParams(new

LayoutParams.WRAP_CONTENT));

LayoutParams(LayoutParams.WRAP_CONTENT,

tv2.setGravity(Gravity.BOTTOM | Gravity.RIGHT); // 设置ll.addView(tv); ll.addView(tv2); return ll;

TextView控件在父容器中的位置

android

人 接

Cursor c = db.query(TABLE_NAME, new String[] { ID, NAME, PHONE

null, null, null, ID);

null,

int idIndex = c.getColumnIndex(ID);

int nameIndex = c.getColumnIndex(NAME); // 获得姓名列的列号 int phoneIndex = c.getColumnIndex(PHONE); // 获得电话列的序号 contactsName = new String[c.getCount()]; // 创建存放姓名的StringcontactsId = new int[c.getCount()]; // 创建存放id的int数组对象 contactsPhone = new String[c.getCount()]; // 创建存放phone的数组int i = 0; // 声明一个计数器

for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) {

contactsName[i] = c.getString(nameIndex); // 将姓名添加到

// 方法:获取所有联系人的姓名

public void getBasicInfo(MyOpenHelper helper) {

SQLiteDatabase db = helper.getWritableDatabase(); // 获取数据库连@Override

protected void onResume() { }

getBasicInfo(myHelper);

myAdapter.notifyDataSetChanged(); super.onResume(); }

}

intent.putExtra("id", contactsId[position]); startActivity(intent);

myHelper = new MyOpenHelper(this, DB_NAME, null, 1); lv = (ListView) findViewById(R.id.lv); lv.setAdapter(myAdapter);

lv.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View view,

int position, long id) { Intent intent = new

DetailActivity.class);

Intent(Personal_ContactsActivity.this,

intent.putExtra("cmd", 0); // 0代表查询联系人,1代表添加联系

});

数组对象

对象

String数组中

android

@Override

protected Dialog onCreateDialog(int id) {

Dialog dialog = null;

switch (id) { // 对对话框ID进行判断 case DIALOG_DELETE: // 创建删除确认对话框

Builder b = new AlertDialog.Builder(this);

b.setIcon(R.drawable.dialog_delete); // 设置对话框图标 b.setTitle("提示"); // 设置对话框标题

b.setMessage(R.string.dialog_message); // 设置对话框内容 b.setPositiveButton(R.string.ok, new OnClickListener() { //

@Override

public boolean onOptionsItemSelected(MenuItem item) { }

switch (item.getItemId()) { // 判断按下的菜单选项 case MENU_ADD: // 按下添加按钮 }

return super.onOptionsItemSelected(item);

Intent intent = new Intent(Personal_ContactsActivity.this,

DetailActivity.class);

intent.putExtra("cmd", 1); startActivity(intent); break;

showDialog(DIALOG_DELETE); // 显示确认删除对话框 break;

@Override

public boolean onCreateOptionsMenu(Menu menu) { }

menu.add(0, MENU_ADD, 0,

menu.add(0, MENU_DELETE, 0, R.string.menu_delete).setIcon(

R.drawable.delete); // 添加“删除”菜单选项

return super.onCreateOptionsMenu(menu); }

}

c.close(); // 关闭Cursor对象

db.close(); // 关闭SQLiteDatabase对象

contactsId[i] = c.getInt(idIndex);

contactsPhone[i] = c.getString(phoneIndex); // 将固定电话添加i++;

到String数组中

R.string.menu_add).setIcon(R.drawable.add); // 添加“添加”菜单选项

case MENU_DELETE: // 按下了删除选项

android

点下确认删除按钮 }

public void deleteContact(int id) { }

SQLiteDatabase db = myHelper.getWritableDatabase(); // 获得数据db.delete(TABLE_NAME, ID + "=?", new String[] { id + "" }); db.close();

// 方法:删除指定联系人

}

}

return dialog;

which) {

}

int position =

.getSelectedItemPosition();

Personal_ContactsActivity.this.lv

deleteContact(contactsId[position]); getBasicInfo(myHelper);

myAdapter.notifyDataSetChanged();

@Override

public void onClick(DialogInterface dialog, int

});

b.setNegativeButton(R.string.cancel, new OnClickListener() @Override

public void onClick(DialogInterface dialog, int}

});

dialog = b.create(); break;

库对象

android

<LinearLayout

android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" >

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/title" android:textSize="24px"

android:textColor="@color/text"

/>

<ImageView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/title" />

</LinearLayout> <ScrollView

android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true" >

<ListView

android:id="@+id/lv"

android:layout_width="fill_parent" android:layout_height="fill_parent" android:choiceMode="singleChoice" />

</ScrollView>

</LinearLayout>

android

Personal_ContactsActivity!</string>

<string name="app_name">个人通信录</string> <string name="tvName">姓名:</string> <string name="tvPhone">固定电话:</string> <string name="tvMobile">移动电话:</string> <string name="tvEmail">电子邮件:</string> <string name="tvPost">邮政编码:</string> <string name="tvAddr">通信地址:</string> <string name="tvComp">公司名称:</string> <string name="menu_add">添加</string> <string name="menu_modify">修改</string> <string name="menu_delete">删除</string> <string name="menu_save">保存</string>

<string name="dialog_message">确认删除此人吗?</string> <string name="ok">确定</string> <string name="cancel">取消</string> <string name="title">联系人列表</string> </resources>

5、 在MyOpenHelper.java中添加代码如下:

public class MyOpenHelper extends SQLiteOpenHelper {

public MyOpenHelper(Context context, String name, CursorFactory }

@Override

public void onCreate(SQLiteDatabase db) {

//重写onCreate方法

//

db.execSQL("create table if not exists "+TABLE_NAME+" ("

int version) {

//调用父类构造器

factory,

super(context, name, factory, version);

public static final String DB_NAME = "personal_contacts"; //数据public static final String TABLE_NAME = "contacts"; public static final String ID="_id"; public static final String NAME="name";

//表名 //ID //名称 //固定电话 //手机号码 //电子邮件//邮政编码 //通信地址 //公司

库文件名称

public static final String PHONE="phone"; public static final String EMAIL="email"; public static final String POST="post"; public static final String ADDR="addr"; public static final String COMP="comp";

public static final String MOBILE="mobile";

地址

android

调用execSQL方法创建表 }

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int }

}

+ ID + " integer primary key," + NAME + " varchar," + PHONE+" varchar," + MOBILE + " varchar," + EMAIL + " varchar," + POST + " varchar," + ADDR + " varchar," + COMP + " varchar)");

newVersion) { //重写onUpgrade方法

6、 在/Personal_Contacts/res/layout/detail.xml,中添加代码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout

xmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/back" >

<LinearLayout

xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" >

<!-- 显示联系人姓名线性布局 -->

<TextView

android:layout_width="100px"

android:layout_height="wrap_content" android:textSize="18px"

android:textColor="@color/text"

android:layout_gravity="left|center_vertical" android:text="@string/tvName" />

android

<EditText

android:id="@+id/etName"

android:layout_width="fill_parent" android:layout_height="wrap_content" />

</LinearLayout>

xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" >

<!-- 显示联系人固定电话的线性布局 -->

<TextView

android:layout_width="100px"

android:layout_height="wrap_content" android:textSize="18px"

android:textColor="@color/text"

android:layout_gravity="center_vertical|left" android:text="@string/tvPhone" />

android:id="@+id/etPhone"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:phoneNumber="true" />

<LinearLayout

<EditText

</LinearLayout>

xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" >

<!-- 显示联系人手机号码的线性布

<LinearLayout

局 -->

<TextView

android:layout_width="100px"

android:layout_height="wrap_content" android:textSize="18px"

android:textColor="@color/text"

android:layout_gravity="left|center_vertical" android:text="@string/tvMobile" />

android:id="@+id/etMobile"

<EditText

android

android:layout_height="wrap_content" android:phoneNumber="true" />

</LinearLayout>

xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" >

<!-- 显示联系人电子邮件的线性布

<LinearLayout

局 -->

<TextView

android:layout_width="100px"

android:layout_height="wrap_content" android:textSize="18px"

android:textColor="@color/text"

android:layout_gravity="left|center_vertical" android:text="@string/tvEmail" />

android:id="@+id/etEmail"

android:layout_width="fill_parent" android:layout_height="wrap_content" />

<EditText

</LinearLayout>

xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" >

<!-- 显示联系人邮编的线性布局

<LinearLayout

-->

<TextView

android:layout_width="100px"

android:layout_height="wrap_content" android:textSize="18px"

android:textColor="@color/text"

android:layout_gravity="left|center_vertical" android:text="@string/tvPost" />

android:id="@+id/etPost"

android:layout_width="fill_parent"

<EditText

android

/>

</LinearLayout>

xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" >

<!-- 显示联系人通信地址的线性布

<LinearLayout

局 -->

<TextView

android:layout_width="100px"

android:layout_height="wrap_content" android:textSize="18px"

android:textColor="@color/text"

android:layout_gravity="left|center_vertical" android:text="@string/tvAddr" />

android:id="@+id/etAddr"

android:layout_width="fill_parent" android:layout_height="wrap_content" />

<EditText

</LinearLayout>

xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" >

<!-- 显示联系人公司的线性布局

<LinearLayout

-->

<TextView

android:layout_width="100px"

android:layout_height="wrap_content" android:textSize="18px"

android:textColor="@color/text"

android:layout_gravity="left|center_vertical" android:text="@string/tvComp" />

android:id="@+id/etComp"

android:layout_width="fill_parent" android:layout_height="wrap_content" />

<EditText

android

7. /Personal_Contacts/src/edu/eurasia/DetailActivity.java

import static edu.eurasia.MyOpenHelper.*; import android.app.Activity;

import android.content.ContentValues; import android.content.Intent; import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Toast;

public class DetailActivity extends Activity {

int id = -1; // 记录当前显示的联系人id

int[] textIds = { R.id.etName, R.id.etPhone, R.id.etMobile,

R.id.etPost, R.id.etAddr, R.id.etComp };

MyOpenHelper myHelper; // 声明一个MyOpenHelper对象 final int MENU_ADD = Menu.FIRST; // 声明菜单项的编号

final int MENU_MODIFY = Menu.FIRST + 1; // 声明菜单项的编号 final int MENU_DELETE = Menu.FIRST + 2; // 声明菜单项的编号 final int MENU_SAVE = Menu.FIRST + 3; // 声明菜单项的编号

R.id.etEmail,

EditText[] textArray; // 存放界面中的EditText控件的数组 ImageButton ibSave; // 保存按钮

int status = -1; // 0表示查看信息,1表示添加联系人,2表示修改联系人 View.OnClickListener myListener = new View.OnClickListener() {

@Override

public void onClick(View v) { // 保存按钮按下触发该事件

String[] strArray = new String[textArray.length]; for (int i = 0; i < strArray.length; i++) {

strArray[i] = textArray[i].getText().toString().trim();

android

// 获得用户输入的信息数组 }

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(yout.detail);

textArray = new EditText[textIds.length]; for (int i = 0; i < textIds.length; i++) { }

ibSave = (ImageButton) findViewById(R.id.ibSave); ibSave.setOnClickListener(myListener);

myHelper = new MyOpenHelper(this, MyOpenHelper.DB_NAME, null, Intent intent = getIntent();

status = intent.getExtras().getInt("cmd"); // 读取命令类型 switch (status) {

case 0: // 查看联系人的详细信息

id = intent.getExtras().getInt("id"); // 获得要显示的联系人的idSQLiteDatabase db = myHelper.getWritableDatabase(); Cursor c = db.query(MyOpenHelper.TABLE_NAME, new String[]

PHONE, MOBILE, EMAIL, POST, ADDR, COMP }, ID + "=?"new String[] { id + "" }, null, null, null);

textArray[i] = (EditText) findViewById(textIds[i]);

};

}

if (strArray[0].equals("") || strArray[1].equals("")) {

Toast.makeText(DetailActivity.this, "对不起,请将姓名和电话

Toast.LENGTH_LONG).show();

填写完整!",

}

switch (status) { // 判断当前的状态 case 0: // 查询联系人详细信息时按下保存 }

updateContact(strArray); // 更新联系人信息 break;

insertContact(strArray); // 插入联系人信息 break;

case 1: // 新建联系人时按下保存按钮

{ NAME,

if (c.getCount() == 0) { // 没有查询到指定的人

Toast.makeText(this, "对不起,没有找到指定的联系人!",

.show();

Toast.LENGTH_LONG)

} else { // 查询到了这个人

android

容 容 容

// 方法:添加指定联系人

public void insertContact(String[] strArray) {

SQLiteDatabase db = myHelper.getWritableDatabase(); // 获得数据ContentValues values = new ContentValues(); values.put(NAME, strArray[0]); values.put(PHONE, strArray[1]); values.put(MOBILE, strArray[2]); values.put(EMAIL, strArray[3]); values.put(POST, strArray[4]); values.put(ADDR, strArray[5]); values.put(COMP, strArray[6]);

long count = db.insert(TABLE_NAME, ID, values); // 插入数据 db.close();

if (count == -1) {

Toast.makeText(this, "添加联系人失败!",

}

}

} break;

}

c.close(); db.close(); break;

for (EditText et : textArray) {

et.getEditableText().clear(); // 清空各个EditText控件中内textArray[2].setText(c.getString(2)); // 设置手机号码框中textArray[3].setText(c.getString(3)); // 设置电子邮件框中textArray[4].setText(c.getString(4)); // 设置电子邮件框中textArray[5].setText(c.getString(5)); // 设置电子邮件框中textArray[6].setText(c.getString(6)); // 设置电子邮件框中

的内容 的内容 的内容 的内容 的内容

textArray[1].setText(c.getString(1)); // 设置固话框中的内

c.moveToFirst(); // 移动到第一条记录

textArray[0].setText(c.getString(0)); // 设置姓名框中的内

case 1: // 新建详细人信息

库对象

android

Toast.LENGTH_LONG).show(); } else {

// 方法:更新某个联系人信息

public void updateContact(String[] strArray) {

SQLiteDatabase db = myHelper.getWritableDatabase(); // 获得数据 }

}

Toast.makeText(this, "添加联系人成功!",

Toast.LENGTH_LONG).show();

库对象 ContentValues values = new ContentValues();

values.put(NAME, strArray[0]); values.put(PHONE, strArray[1]); values.put(MOBILE, strArray[2]); values.put(EMAIL, strArray[3]); values.put(POST, strArray[4]); values.put(ADDR, strArray[5]); values.put(COMP, strArray[6]);

int count = db.update(TABLE_NAME, values, ID + "=?", new

+ "" }); // 更新数据库

{ id

db.close(); if (count == 1) {

Toast.makeText(this, "修改联系人成功!",

Toast.LENGTH_LONG).show(); } else { }

}

}

Toast.makeText(this, "修改联系人失败!",

Toast.LENGTH_LONG).show();

本文来源:https://www.bwwdw.com/article/bj94.html

Top