移动开发技术(Android)——实验8 SQLite数据库的使用

  • 一、实验目的
  • 二、实验内容
    • (1)创建2个Activity
    • (2)界面构成
      • ① 主界面activity_main.xml
      • ② activity_manage.xml
      • ③ 适配器布局adapter2.xml
    • (3)程序功能
      • ① DBOpenHelper.java(数据库辅助类)
      • ② MainActivity.java
      • ③ ManageActivity.java

一、实验目的

  1. 掌握创建SQLite数据库的方法;
  2. 掌握实现对SQLite数据增删改查的方法;
  3. 学会使用调试工具查看数据库和数据表;

二、实验内容

创建一个Android项目,项目名称为“shiyan0801_专业_×××(学生姓名)”,要求:

(1)创建2个Activity

创建2个Activity,名称分别为MainActivity、ManageActivity,对应的布局文件名称分别为activity_main.xml、activity_manage。

(2)界面构成

① 主界面activity_main.xml

实现用户登录,包括以下控件:
a)2个文本框,分别用来显示“管理员”、“密码”;
b)2个编辑框,分别用来接收用户输入的用户名、密码;
c)1个按钮,文本显示为“登录”。

<TableLayout 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"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><TableRow><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="用户名"android:textSize="17sp" /><EditTextandroid:id="@+id/ET_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="17sp" /></TableRow><TableRow><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="密    码"android:textSize="17sp" /><EditTextandroid:id="@+id/ET_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:inputType="textPassword"android:textSize="17sp" /></TableRow><Buttonandroid:id="@+id/BT_login"android:text="登录" /><TextViewandroid:id="@+id/TV_show"android:gravity="center"android:text="用户名:AAA \n 密码:180000"android:textSize="20sp" /></TableLayout>

② activity_manage.xml

实现图书信息设置,包括以下控件:
(a)5个文本框用于显示提示信息“图书名称:”、“图书价格”、“图书版次”“图书类别”、“出版社”;
(b)2个编辑框分别用于接收图书的名称和价格;
©4个单选按钮用于版次选择(1版、2版、3版、3版以上);
(d)n个复选框用于类别选择(教育、计算机、小说、科技、励志、文学等);
(e)1个下拉列表用于出版社选择(人民邮电出版社、科学出版社、高等教育出版社、清华大学出版社,其他等);
(f)4个普通按钮,文本分别显示为“添加”、“修改”、“删除”、“查询”;
(g)1个ListView控件。

<TableLayout 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"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".ManageActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图书名称" /><EditText android:id="@+id/ED_name" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图书价格" /><EditText android:id="@+id/ED_prize" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图书版次" /><RadioGroupandroid:id="@+id/RadioGroup1"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/radio_1"android:text="1版" /><RadioButtonandroid:id="@+id/radio_2"android:text="2版" /><RadioButtonandroid:id="@+id/radio_3"android:text="3版" /><RadioButtonandroid:id="@+id/radio_3p"android:text="3版以上" /></RadioGroup><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图书类别" /><TableRow android:id="@+id/CB_TR" ><CheckBox android:text="教育" /><CheckBox android:text="计算机" /><CheckBox android:text="小说" /></TableRow><TableRow android:id="@+id/CB_TR2" ><CheckBox android:text="励志" /><CheckBox android:text="科技" /><CheckBox android:text="文学" /></TableRow><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="出版社" /><Spinnerandroid:id="@+id/spinner"android:entries="@array/publisher" /><TableRow><Buttonandroid:id="@+id/submit_BT"android:layout_weight="1"android:text="添加" /><Buttonandroid:id="@+id/update_BT"android:layout_weight="1"android:text="修改" /><Buttonandroid:id="@+id/delete_BT"android:layout_weight="1"android:text="删除" /><Buttonandroid:id="@+id/select_BT"android:layout_weight="1"android:text="查询" /></TableRow><ListViewandroid:id="@+id/listview"android:layout_width="match_parent"android:layout_height="wrap_content" ></ListView></TableLayout>

③ 适配器布局adapter2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><TextViewandroid:id="@+id/no1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10px" /><TextViewandroid:id="@+id/no2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10px" /><TextViewandroid:id="@+id/no3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10px" /><TextViewandroid:id="@+id/no4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10px" /><TextViewandroid:id="@+id/no5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10px" /></LinearLayout>

(3)程序功能

① DBOpenHelper.java(数据库辅助类)

package com.example.shiyan0801; //(此处换成自己的包名)import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper{public DBOpenHelper(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("create table BOOK_INFORMATION(_id integer primary key,"+"bookName varchar(20), "+"bookPrice varchar(10),"+"bookVersion varchar(10),"+"bookKind varchar(20),"+"bookPublisher varchar(20))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubdb.execSQL("drop table if exists BOOK_INFORMATION");onCreate(db);}
}

② MainActivity.java

点击MainActivity中的“登录”按钮,若管理员和密码分别为学生的姓名和学号,则弹出提示对话框,显示“***登录成功!”,然后跳转到ManageActivity,否则,弹出Toast提示“管理员或密码错误,请重新输入”。

package com.example.shiyan0801; //(此处换成自己的包名)import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends Activity {EditText ET_username ,ET_passweord;Button BT_login;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);ET_username=(EditText) findViewById(R.id.ET_username);ET_passweord=(EditText) findViewById(R.id.ET_password);BT_login=(Button) findViewById(R.id.BT_login);BT_login.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString Str_username = ET_username.getText().toString();String str_password = ET_passweord.getText().toString();if(Str_username.equals("AAA")&&str_password.equals("180000")){AlertDialog alert = new AlertDialog.Builder(MainActivity.this).setTitle("提示").setMessage("登陆成功").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubIntent intent = new Intent(MainActivity.this, ManageActivity.class);startActivity(intent);}}).create();alert.show();}else{Toast.makeText(MainActivity.this,"管理员或密码错误,请重新输入" , Toast.LENGTH_LONG).show();}}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}
}

③ ManageActivity.java

ManageActivity中的操作:
a)单击“添加”按钮,将用户输入和选择的各项信息写入数据库;
b)单击“修改”按钮,将_id为3的记录的价格改为100,出版社改为“清华大学出版社”;
c)单击“删除”按钮,将所有版次为1版的记录删除;
d)单击“查询”按钮,将出版社为“人民邮电出版社”的记录显示在ListView控件中。

package com.example.shiyan0801; //(此处换成自己的包名)import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;public class ManageActivity extends Activity {private DBOpenHelper dbOpenHelper;private static final int VERSION = 2;private static final String DBNAME = "BOOK_INFORMATION.db";SQLiteDatabase db;EditText ET_bookName,ET_bookPrice;RadioGroup RG_version;TableRow TR_category,TR_category2;Spinner sp;Button BT_insert,BT_update,BT_delete,BT_select;ListView listView;ArrayList<String> allmess;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_manage);dbOpenHelper = new DBOpenHelper(ManageActivity.this,DBNAME,null,VERSION);db=dbOpenHelper.getWritableDatabase();ET_bookName=(EditText) findViewById(R.id.ED_name);ET_bookPrice=(EditText) findViewById(R.id.ED_prize);RG_version=(RadioGroup) findViewById(R.id.RadioGroup1);TR_category=(TableRow) findViewById(R.id.CB_TR);TR_category2=(TableRow) findViewById(R.id.CB_TR2);sp=(Spinner) findViewById(R.id.spinner);listView=(ListView) findViewById(R.id.listview);BT_insert=(Button) findViewById(R.id.submit_BT);BT_insert.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString Str_version="";String Str_kind="";for(int i=0;i<RG_version.getChildCount();i++){RadioButton r = (RadioButton) RG_version.getChildAt(i);if(r.isChecked()){Str_version=r.getText().toString();}}for(int i=0;i<TR_category.getChildCount();i++){CheckBox c = (CheckBox) TR_category.getChildAt(i);if(c.isChecked()){Str_kind+=c.getText().toString()+" ";}}for(int i=0;i<TR_category2.getChildCount();i++){CheckBox c = (CheckBox) TR_category2.getChildAt(i);if(c.isChecked()){Str_kind+=c.getText().toString()+" ";}}/*db.execSQL("insert into BOOK_INFORMATION(bookName,bookPrice,bookVersion,bookKind,bookPublisher)"+" values(\'"+ET_bookName.getText().toString()+"\',"+"\'"+ET_bookPrice.getText().toString()+"\',"+"\'"+Str_version+"\',"+"\'"+Str_kind+"\',"+"\'"+sp.getSelectedItem().toString()+"\')");*/ContentValues values = new ContentValues();values.put("bookName", ET_bookName.getText().toString());values.put("bookPrice", ET_bookPrice.getText().toString());values.put("bookVersion", Str_version);values.put("bookKind", Str_kind);values.put("bookPublisher", sp.getSelectedItem().toString());long rt=db.insert("BOOK_INFORMATION", null, values);if(rt==-1){Toast.makeText(ManageActivity.this, "插入失败", Toast.LENGTH_SHORT).show();}else{Toast.makeText(ManageActivity.this, "插入成功", Toast.LENGTH_SHORT).show();}}});BT_update=(Button) findViewById(R.id.update_BT);BT_update.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//db.execSQL("update BOOK_INFORMATION set bookPrice = '100',bookPublisher = '清华大学出版社' where _id=3");ContentValues values = new ContentValues();values.put("bookPrice", "100");values.put("bookPublisher", "清华大学出版社");int res = db.update("BOOK_INFORMATION", values, "_id=3", null);if(res==0){Toast.makeText(ManageActivity.this, "更新失败", Toast.LENGTH_SHORT).show();}else{Toast.makeText(ManageActivity.this, "更新成功", Toast.LENGTH_SHORT).show();}}});BT_delete=(Button) findViewById(R.id.delete_BT);BT_delete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//db.execSQL("delete from BOOK_INFORMATION where bookVersion='1版'");int res=db.delete("BOOK_INFORMATION", "bookVersion=?", new String[]{"1版"});if(res==0){Toast.makeText(ManageActivity.this, "删除失败", Toast.LENGTH_SHORT).show();}else{Toast.makeText(ManageActivity.this, "删除成功", Toast.LENGTH_SHORT).show();}}});BT_select=(Button) findViewById(R.id.select_BT);BT_select.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stuballmess = new ArrayList<String>();//Cursor cursor = db.rawQuery("select * from BOOK_INFORMATION", null);Cursor cursor = db.query("BOOK_INFORMATION", null, null, null, null, null, null,null);
//              if(cursor.moveToFirst()){//                  while(!cursor.isAfterLast()){//                      allmess.add(" 书名:"+cursor.getString(1)+
//                              " 价格:"+cursor.getString(2)+
//                              " 版本:"+cursor.getString(3)+
//                              " 类别:"+cursor.getString(4)+
//                              " 出版社:"+cursor.getString(5));
//                  cursor.moveToNext();
//                  }
//              }
//              ArrayAdapter<String> adapter = new ArrayAdapter<String>(ManageActivity.this,
//                          R.layout.adapter,
//                          allmess);
//              listView.setAdapter(adapter);SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(ManageActivity.this, R.layout.adapter2, cursor, new String[] {"bookName","bookPrice","bookVersion","bookKind","bookPublisher"},new int[] {R.id.no1,R.id.no2,R.id.no3,R.id.no4,R.id.no5});listView.setAdapter(adapter2);//db.execSQL("select * from BOOK_INFORMATION where bookPublisher='人民邮电出版社'");}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.manage, menu);return true;}
}

移动开发技术(Android)——实验8 SQLite数据库的使用相关推荐

  1. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  2. 基于sqlite的android数据库编程,Android编程之SQLite数据库操作方法详解

    Android编程之SQLite数据库操作方法详解 发布时间:2020-09-07 12:33:04 来源:脚本之家 阅读:85 作者:低调小一 本文实例讲述了Android SQLite数据库操作方 ...

  3. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  4. Android基础总结+SQlite数据库【申明:来源于网络】

    Android基础总结+SQlite数据库[申明:来源于网络] 基础总结篇之一:Activity生命周期:http://blog.csdn.net/liuhe688/article/details/6 ...

  5. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  6. Android版本升级同时Sqlite数据库的升级及之前数据的保留-转

    http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html http://www.eoeandroid.com/forum.php?m ...

  7. Web前端开发技术课程实验报告实验3:Vue路由实验

    实验代码:实验3第2题实验参考.rar-互联网文档类资源-CSDN下载 Web前端开发技术课程实验报告 实验3:Vue路由实验 姓名:_ __ _ ___ ___   班级:_ _ _ ___ _ _ ...

  8. 实验8 SQLite数据库操作

    实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016/5/6 实验项目名称 SQLite数据库操作 实验地点 综合实验室 实验类型 □验证型    √设计型    □综合型 学 ...

  9. Android基础知识 - SQLite数据库的最佳实践(使用事务、升级数据库的最佳写法)

    目录 使用事务 升级数据库的最佳写法 使用事务 SQLite数据库时支持事务的,事务的特性可以保证让某一系列的操作要么全部完成,要么一个都不会完成. 那么在什么情况下才需要使用事务呢? 想象以下场景, ...

  10. Android中关于SQLite数据库的一些知识

    使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本 ...

最新文章

  1. Python 文件 close() 方法
  2. android studio 如何让包名展开
  3. Pad和Margin
  4. 【ZOJ - 3956】Course Selection System(01背包)
  5. SpringDataRedis的简单案例使用
  6. 学习笔记(01):19年录制Zookeeper、Dubbo视频教程 微服务教程分布式教程 SpringBoot教程整合-技术选型和学后水平...
  7. 360电脑网速怎么测试软件,360怎么测试网速,360如何测试网速
  8. java uml建模工具 apk,UML建模工具(Astah Professional)
  9. 重新思考:在ResNet与Transformer均适用的跳跃连接
  10. Chrome对开发有用的插件
  11. TrackMouseEvent处理鼠标消息
  12. 用计算机despair,despair的用法总结大全
  13. WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商
  14. 解析Java横死之谜,气定神闲看花开花落
  15. SpringBoot自动装配原理解析——面试可以这样会回答
  16. 短说正式版V3.7.4发布【新增悬赏问答、打赏、付费看帖、IP属地】
  17. 1028 人口普查 (20 分)C++ 示例代码
  18. 基于Java实现本地缓存,缓存过期删除和LRU缓存淘汰
  19. 通过进程pid获取窗口句柄HWND,然后可以通过sendmessage进行交互通讯
  20. JavaScript-垃圾回收机制(GC)

热门文章

  1. Docker与Dragonfly详细多机部署
  2. Burp Suite代理和火狐浏览器的设置(超详细)
  3. python简单实现排列和组合的计算
  4. 无人参与应答文件包含的产品密钥无效,删除无效的密钥或在无人参与应答文件中提供有效的产品密钥继续进行windows安装
  5. 深度学习大神都推荐入门必须读完这9篇论文
  6. 2020幻影围棋 第三天围棋规则模块(一)
  7. 郑州java工程师待遇怎么样_Java工程师工资待遇怎么样?
  8. 虽然没有见过凌晨四点的洛杉矶,但是我们见证了了凌晨灯火通明科技园:程序员的痛谁懂
  9. java校园圈子论坛跳蚤市场小程序源码
  10. vs中css样式转换_在现实世界中使用CSS转换