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();
正在阅读:
SQLite使用方法三(二十二)05-16
爱情短语表达心情02-12
大学生一日食谱编制05-06
大连理工大学网络教育学院生产实践课程奥鹏远程教育学习中心03-08
输入文字教学设计04-23
新版GMP培训(生产)2012.7.1105-28
《政府采购协定》成员国次级中央实体出价规律与我国对策10-30
幼儿园活动游戏设计与指导12-23
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 使用方法
- SQLite
- 二十二
- 停车场标线说明书
- 低压差线性稳压器中电源控制电路的设计
- 优秀大学生申请书
- 苏教版高中语文必修三复习
- 履带式拖拉机安全操作规程通用范本
- 销售满意度提升激励方案
- 教育电视新闻稿写作
- 高中语文必修一(人教版)《记梁任公先生的一次演讲》导学案
- 2-1-3施工企业考察评估表
- 部编道德与法治小学四年级上册知识点汇总
- 崇尚科学 主题班会
- lol盲僧李青高级玩法攻略
- 农村生态环境整治现状
- 推荐21个令你叹为观止的游戏场景的概念设计
- 运筹学期末考试试卷(B)卷
- 第六章 教学课程
- 仪表自动化管理规章制度
- other__the_other__another_与_others_的用法区别与同步练习题
- ZCSE-204-C1路由策略和策略路由
- 桥梁工程抗震设计的主要内容和方法(完整资料).doc