`

ch020 Android SQLite3(第二部分)

阅读更多

--------------------------------------------AndroidManifest.xml----------------------------------

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.ch20"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="10"

        android:targetSdkVersion="15" />

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".ListViewActivity"

            android:label="@string/title_activity_main" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

</manifest>

--------------------------------------------Layout activity_main.xml----------------------------

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <Button

        android:id="@+id/add_id"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="添加数据"/>

      <Button

        android:id="@+id/delete_id"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="删除数据"/>

        <Button

        android:id="@+id/edit_id"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="修改数据"/>

          <Button

        android:id="@+id/qyery_id"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="查询数据"/>

          

      <ListView 

          android:id="@+id/show_result"

          android:layout_width="fill_parent"

          android:layout_height="wrap_content">

      </ListView>

</LinearLayout>

--------------------------------------------Layout list_item.xml---------------------------------

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal" >

    <TextView

        android:id="@+id/view_id"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="id....." />

    

        <TextView

        android:id="@+id/view_name"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="name....." />

</LinearLayout>

--------------------------------------------Layout list_input.xml--------------------------------

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <TextView

        android:id="@+id/view_id"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="学生编号" />

    <EditText

        android:id="@+id/stu_id"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />

    <TextView

        android:id="@+id/view_name"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="学生姓名" />

        <EditText

        android:id="@+id/stu_name"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />

</LinearLayout>

--------------------------------------------ListViewActivity.java----------------------------------

package com.ch20;

import java.util.HashMap;

import java.util.List;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.ContentValues;

import android.content.DialogInterface;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.SimpleAdapter;

/**

 * 

 * 项目名称:com.ch20    

 * 类名称:ListViewActivity    

 * 类描述: CRUD

 * 创建人:方勇   

 * 创建时间:2012-12-4 上午9:37:39   

 * Copyright (c) 方勇-版权所有

 */

public class ListViewActivity extends Activity implements OnClickListener {

private ListView lisView;

private List<HashMap<String, Object>> list;

private Button addBtndeleteBtneditBtnqueryBtn;

private SimpleAdapter simpleAdapter;

private DBHelper dbHelper;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViews();

setListeners();

dbHelper = new DBHelper(this);

init();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.add_id:

buildDialog_input().show();

break;

case R.id.delete_id:

// deleteDialog_input().show();

break;

case R.id.edit_id:

buildDialog_update().show();

break;

case R.id.qyery_id:

break;

}

}

/* 实例化UI */

private void findViews() {

addBtn = (Button) findViewById(R.id.add_id);

deleteBtn = (Button) findViewById(R.id.delete_id);

editBtn = (Button) findViewById(R.id.edit_id);

queryBtn = (Button) findViewById(R.id.qyery_id);

lisView = (ListView) findViewById(R.id.show_result);

}

/* 设置监听 */

private void setListeners() {

addBtn.setOnClickListener(this);

deleteBtn.setOnClickListener(this);

editBtn.setOnClickListener(this);

queryBtn.setOnClickListener(this);

}

/* 初始化数据 */

private void init() {

list = StudentBean.getInstance().findList(dbHelper);

simpleAdapter = new SimpleAdapter(thislist, R.layout.list_itemnew String[] { "id""name" }, new int[] {

R.id.view_id, R.id.view_name });

lisView.setAdapter(simpleAdapter);

}

/* 添加数据对话框 */

private AlertDialog buildDialog_input() {

/* 获取布局文件 */

LayoutInflater layoutInflater = LayoutInflater.from(this);

final View view = layoutInflater.inflate(R.layout.list_inputnull);

/* 弹出对话框,输入数据 */

Builder build = new AlertDialog.Builder(this);

build.setTitle("输入学生信息");// 标题

build.setView(view);// 内容

// 确定按钮

build.setPositiveButton("submit"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

/* 获取数据 */

EditText filed_id = (EditText) view.findViewById(R.id.stu_id);

EditText filed_name = (EditText) view.findViewById(R.id.stu_name);

/* 保存数据 */

// dbHelper.open();

// ContentValues values = new ContentValues();

// values.put("id", Integer.parseInt(filed_id.getText().toString()));

// values.put("name", filed_name.getText().toString());

// Log.i("a07", "id=" + filed_id.getText().toString());

// Log.i("a07", "name=" + filed_name.getText().toString());

// long size = dbHelper.insert("stu", values);

// dbHelper.close();

ContentValues values = new ContentValues();

values.put(StudentBean.STU_ID, Integer.parseInt(filed_id.getText().toString()));

values.put(StudentBean.STU_NAME, filed_name.getText().toString());

long size = StudentBean.getInstance().save(dbHelper, values);

/* 追加数据 */

if (size > 0) {

HashMap<String, Object> map = new HashMap<String, Object>();

map.put(StudentBean.STU_ID, Integer.parseInt(filed_id.getText().toString()));

map.put(StudentBean.STU_NAME, filed_name.getText().toString());

list.add(map);

/* 更新UI */

simpleAdapter.notifyDataSetChanged();

}

}

});

build.setNegativeButton("cancel"null);

return build.create();

}

/* 修改数据对话框 */

private AlertDialog buildDialog_update() {

/* 获取布局文件 */

LayoutInflater layoutInflater = LayoutInflater.from(this);

final View view = layoutInflater.inflate(R.layout.list_inputnull);

/* 弹出对话框,输入数据 */

Builder build = new AlertDialog.Builder(this);

build.setTitle("输入学生信息");// 标题

build.setView(view);// 内容

// 确定按钮

build.setPositiveButton("submit"new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

/* 获取数据 */

EditText filed_id = (EditText) view.findViewById(R.id.stu_id);

EditText filed_name = (EditText) view.findViewById(R.id.stu_name);

/* 保存数据 */

// dbHelper.open();

// ContentValues values = new ContentValues();

// values.put("id", Integer.parseInt(filed_id.getText().toString()));

// values.put("name", filed_name.getText().toString());

// Log.i("a07", "id=" + filed_id.getText().toString());

// Log.i("a07", "name=" + filed_name.getText().toString());

// // 条件

// String whereClause = "id=?";

// // 条件值

// String[] whereArgs = new String[] { filed_id.getText().toString() };

// long size = dbHelper.update("stu", whereClause, whereArgs, values);

// dbHelper.close();

HashMap<String,Object> oldValues = new HashMap<String,Object>();

oldValues.put(StudentBean.STU_ID, Integer.parseInt(filed_id.getText().toString()));

long size = StudentBean.getInstance().update(dbHelper, oldValues, new String[]{ filed_name.getText().toString()});

if (size > 0) {

HashMap<String, Object> map = null;

String id = filed_id.getText().toString();

for (int i = 0; i < list.size(); i++) {

HashMap<String, Object> mmap = list.get(i);

if (mmap.get("id").toString().equals(id)) {

map = list.get(i);

break;

}

}

map.put("id", Integer.parseInt(filed_id.getText().toString()));

map.put("name", filed_name.getText().toString());

// list.add(map);

/* 更新UI */

simpleAdapter.notifyDataSetChanged();

}

}

});

build.setNegativeButton("cancel"null);

return build.create();

}

}

--------------------------------------------DBHelper.java-----------------------------------------

package com.ch20;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

/**

 * 

 * 项目名称:com.ch20    

 * 类名称:DBHelper    

 * 类描述:数据库操作工具类  

 * 创建人:方勇   

 * 创建时间:2012-12-4 上午8:50:40   

 * Copyright (c) 方勇-版权所有

 */

public class DBHelper {

/* DDL,定义数据结构 */

private DataBaseHelper dbHelper;

/* DML,数据库操作 */

private SQLiteDatabase db;

/* 数据库名 */

private final static String DATABASE_NAME = "a07.db3";

/* 版本号 */

private final static int DATABASE_VERSION = 1;

/* 上下文 */

private Context mcontext;

public DBHelper(Context mcontext) {

super();

this.mcontext = mcontext;

}

/* 静态内部类,针对DDL */

private static class DataBaseHelper extends SQLiteOpenHelper {

public DataBaseHelper(Context context) {

super(context, DATABASE_NAMEnullDATABASE_VERSION);

}

/* 创建表结构 */

@Override

public void onCreate(SQLiteDatabase db) {

// db.execSQL("create table if not exists stu(id integer primary key,name text)");

    db.execSQL(StudentBean.getInstance().sql$createTable());

// db.execSQL("insert into stu values(1,'a1')");

// db.execSQL("insert into stu values(2,'a2')");

}

/* 针对数据库升级 */

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

/* 打开数据库,如果已经打开就使用,否则创建 */

public DBHelper open() {

dbHelper = new DataBaseHelper(mcontext);

db = dbHelper.getWritableDatabase();

return this;

}

/* 关闭数据库 */

public void close() {

db.close();// 先关DML

dbHelper.close();// DDL

}

/* 插入 */

public long insert(String tableName, ContentValues values) {

return db.insert(tableName, null, values);

}

/**

 * 

 * 更新

 *  

 * @param tableName   表名

 * @param whereClause 条件

 * @param whereArgs   条件值

 * @param values      更新值

 * @return 更新的条数

 *

 */

public long update(String tableName, String whereClause, String[] whereArgs, ContentValues values) {

return db.update(tableName, values, whereClause, whereArgs);

}

/* 删除 */

public boolean delete(String tableName, String whereClause, String[] whereArgs) {

return db.delete(tableName, whereClause, whereArgs) > 0;

}

/**

 * 

 * 查询,多条记录

 *  

 * @param tableName     表名

 * @param columns       列名

 * @param selection     条件

 * @param selectionArgs 条件值

 * @param groupBy       分组

 * @param having        过滤

 * @param orderBy       排序

 * @param limit         分页(2,3),从第二条记录开始,向下取三条记录

 * @return 动态游标

 *

 */

public Cursor findList(String tableName, String[] columns, String selection, String[] selectionArgs, String groupBy,

String having, String orderBy, String limit) {

return db.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);

}

/**

 * 

 * 精确查询,返回一条数据

 *  

 * @param tableName     表名

 * @param columns       列名

 * @param selection     条件

 * @param selectionArgs 条件值

 * @param groupBy       分组

 * @param having        过滤

 * @param orderBy       排序

 * @param limit         分页(2,3),从第二条记录开始,向下取三条记录

 * @return 动态游标

 *

 */

public Cursor findInfo(String tableName, String[] columns, String selection, String[] selectionArgs, String groupBy,

String having, String orderBy, String limit) {

Cursor cursor = db.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);

while (cursor.moveToNext()) {

cursor.moveToFirst();

}

return cursor;

}

/* 执行sql方法 */

public void executeSql(String sql) {

db.execSQL(sql);

}

}

--------------------------------------------StudentBean.java-------------------------------------

package com.ch20;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.content.ContentValues;

import android.database.Cursor;

/**

 * 

 * 项目名称:com.ch20    

 * 类名称:StudentBean    

 * 类描述:业务逻辑Bean  

 * 创建人:方勇   

 * 创建时间:2012-12-6 上午11:57:16   

 * Copyright (c) 方勇-版权所有

 */

public class StudentBean {

private static StudentBean studentBean = null;

/* 表名 */

public final static String TABLE_NAME = "stu";

/* 表对应的字段 */

public final static String STU_ID = "id";

public final static String STU_NAME = "name";

/* 单例模式 */

public static StudentBean getInstance() {

if (null == studentBean) {

studentBean = new StudentBean();

}

return studentBean;

}

/* DDL操作 */

// 创建表结构SQL

public String sql$createTable() {

return "create table if not exists stu(id integer primary key,name text)";

}

// 删除表结构SQL

public String sql$dropTable() {

return "drop table if exists stu(id integer primary key,name text)";

}

/* DML操作 */

/* 插入 */

public long save(DBHelper dbHelper, ContentValues values) {

dbHelper.open();

long size = dbHelper.insert(TABLE_NAME, values);

dbHelper.close();

return size;

}

/**

 * 

 * 更新 

 *  

 * @param dbHelper 

 * @param oldValues 一般为Map,可根据自己的实际情况调整

 * @param newValues 一般为String[],可根据自己的实际情况调整

 * @return 更新的记录

 *

 */

public long update(DBHelper dbHelper, HashMap<String, Object> oldValues, String[] newValues) {

dbHelper.open();

ContentValues values = new ContentValues();

values.put(STU_NAME, newValues[0]);

long size = dbHelper.update(TABLE_NAME"id=?"new String[] { oldValues.get(STU_ID).toString() }, values);

dbHelper.close();

return size;

}

/* 删除 */

public long delete(DBHelper dbHelper, String whereArs, HashMap<String, Object> values) {

return 0;

}

/* 获取数据库集合数据 */

public List<HashMap<String, Object>> findList(DBHelper dbHelper) {

dbHelper.open();

Cursor cursor = dbHelper.findList(TABLE_NAMEnullnullnullnullnullnullnull);

List list = cursor2List(cursor);

dbHelper.close();

return list;

}

/* 游标转换为集合 */

private List<HashMap<String, Object>> cursor2List(Cursor cursor) {

List list = new ArrayList<HashMap<String, Object>>();

/* 有记录 */

while (cursor.moveToNext()) {

HashMap<String, Object> map = new HashMap<String, Object>();

int id = cursor.getInt(cursor.getColumnIndex(STU_ID));

String name = cursor.getString(cursor.getColumnIndex(STU_NAME));

map.put(STU_ID, id);

map.put(STU_NAME, name);

list.add(map);

}

return list;

}

}

--------------------------------------------效果----------------------------------------------------

添加数据

修改数据

<!--EndFragment-->
  • 大小: 105.7 KB
  • 大小: 105 KB
  • 大小: 93.7 KB
1
0
分享到:
评论
2 楼 fangyong2006 2012-12-10  
确实有这个错误,感谢提醒。
1 楼 comrd 2012-12-07  
public class StudentBean {

private static StudentBean studentBean = null;

/* 表名 */

public final static String TABLE_NAME = "stu";

/* 表对应的字段 */

public final static String STU_ID = "id";

public final static String STU_NAME = "name";

/* 单例模式 */

public static StudentBean getInstance() {

if (null == studentBean) {

studentBean = new StudentBean();

}

return studentBean;

}


StudentBean 类没有将默认的构造方法显式设置为private 还能叫做单例模式吗????

相关推荐

    Android SDK开发范例大全(第二版)CH05.rar

    《Android SDK开发范例大全(第二版)CH05》是针对Android应用开发的一份重要资源,由清华大学出版社出版。这个压缩包包含了第五章的源代码,为开发者提供了丰富的实践示例,帮助深入理解Android SDK的使用。在这个...

    疯狂android讲义(第2版) 源码 ch04-06

    《疯狂Android讲义(第2版)》是Android开发领域一本知名的教材,它深入浅出地介绍了Android应用开发的各种技术和实践。源码ch04-06涵盖了书中的第四至第六章,这部分内容通常会涉及Android开发的基础知识,包括用户...

    android SDK范例开发大全 第3版 源代码 CH8

    3. **数据存储**:Android提供了SQLite数据库、SharedPreferences、文件系统以及ContentProvider等多种数据存储方式。开发者可能通过例子学习如何读写数据库,管理用户偏好设置,以及与文件系统交互。 4. **Android...

    疯狂android讲义(第2版) 源码 ch11-14

    《疯狂Android讲义(第2版)》是李刚老师撰写的一本深入解析Android开发的经典教程,这本书以其详尽的讲解和丰富的实例深受广大开发者喜爱。源码ch11-14涵盖了书中第11至14章的内容,这部分主要涉及Android应用开发中...

    疯狂android讲义(第2版) 源码 ch02 6-11

    《疯狂Android讲义(第2版)》是著名Android开发者李刚老师撰写的一本深入浅出的Android开发教程,此源码包包含了该书第二章“Android基础组件”中的部分内容,具体为章节6至11的实践代码。通过这些源码,我们可以深入...

    AndroidSDK开发范例大全第二版(全部源码打包)

    《Android SDK开发范例大全第二版》是一本深入讲解Android应用程序开发的专业书籍,包含了丰富的实践案例,旨在帮助开发者全面理解并掌握Android SDK的使用。这个压缩包提供了书中的所有源码,便于读者在实践中学习...

    Android SDK开发范例大全(第二版)CH03.rar

    《Android SDK开发范例大全(第二版)CH03》是针对Android应用程序开发的一本详尽教程,由清华大学出版社出版。这本书的第三章涵盖了Android SDK中的关键知识点,旨在帮助开发者深入理解和实践Android应用的构建过程。...

    Android SDK开发范例大全(第二版)CH06.rar

    《Android SDK开发范例大全(第二版)CH06》是一个关于Android开发的章节资源,主要聚焦于SDK的使用和实战技巧。这个压缩包可能包含了该章节的所有代码示例、讲解文档和其他相关材料,帮助开发者深入理解Android应用...

    疯狂android讲义(第2版) 源码 ch15-19

    《疯狂Android讲义(第2版)》是李刚老师撰写的一本深入讲解Android开发的经典教程,这本书的源代码涵盖了第15至19章的内容。这些章节主要讲解了Android应用开发中的高级技术和实践,包括UI设计、多线程、网络编程、...

    Android SDK开发范例大全(第二版)CH08.rar

    《Android SDK开发范例大全(第二版)CH08》是一个关于Android应用程序开发的压缩包,专注于SDK的第八章内容。这一章可能涵盖了Android开发中的关键概念和技术,旨在帮助开发者深入理解和实践Android平台的编程。 在...

    android SDK范例开发大全 第3版 源代码 CH4

    在CH04这个目录下,我们可以预期找到与第四章内容相关的源码,这通常会涵盖以下关键知识点: 1. **活动(Activity)管理**:Activity是Android应用的基本构建块,用于展示用户界面。源码可能会包含如何创建、启动、...

    google.android.sdk开发范例大全.源码ch2-ch6

    源码ch2-ch6”提供了一系列从第二章到第六章的源码示例,旨在帮助开发者深入理解和实践SDK中的各种功能和API。 首先,让我们探讨一下SDK中的核心组件和概念: 1. **AndroidManifest.xml**:这是每个Android应用的...

    Android SDK开发范例大全(第二版)CH09.rar

    《Android SDK开发范例大全(第二版)CH09》是一个关于Android应用程序开发的资源压缩包,主要聚焦在SDK的第九章内容。Android SDK是Android应用开发者的重要工具集,它包含了构建、测试和调试Android应用所需的所有...

    android SDK范例开发大全 第3版 源代码 CH7

    《Android SDK范例开发大全 第3版 源代码 CH7》是一本专注于Android应用程序开发的实战指南,其中包含了丰富的示例代码,旨在帮助开发者深入理解Android SDK的各种功能和使用方法。这部分源代码主要聚焦于第7章的...

    Android ophone开发完全讲义源码ch02-08

    《Android Ophone开发完全讲义源码》涵盖了从基础到进阶的Android应用程序开发知识,主要涉及了第2章至第8章的内容。这个压缩包包含的子文件按章节顺序排列,分别是ch02、ch07、ch06、ch04、ch02(可能是重复或错误...

    《Android/OPhone开发完全讲义》源代码(ch02-ch10).zip

    2. Android应用开发基础:书中从第二章开始介绍Android应用的基本结构,包括主Activity、布局文件、XML资源、Intent等。开发者可以通过源代码学习如何创建一个简单的Android应用,理解Activity生命周期和Intent的...

    android开发课件

    1. **Android开发基础**(ch_01android开发基础.ppt):这部分内容通常会介绍Android平台的概述,包括Android系统架构、开发环境的搭建(如安装Android Studio和SDK)、以及编写第一个Hello World应用程序。...

    Android开发权威指南(源代码ch03)

    在本章“ch03”中,我们将探索Android应用的基础架构,包括Activity、Intent、BroadcastReceiver以及Service等核心组件。这些组件构成了Android应用的核心功能,理解和掌握它们对于任何Android开发者来说都是至关...

    Google Android SDK开发范例大全 第二版(源码)

    2. **CH04**: 可能涉及的是Android的数据存储,包括SQLite数据库的使用、SharedPreferences的读写以及文件操作。开发者可以学习如何在应用中持久化数据,以便在应用重启后仍能保留信息。 3. **CH05**: 这部分可能...

    Google Android SDK 开发范例大全(第2版)光盘内容 第3-6章

    《Google Android SDK 开发范例大全(第2版)》是一部深入浅出的Android开发教程,其中光盘内容包括了第3至6章的实践示例代码,这四个章节覆盖了Android开发的关键技术与概念。这里我们将分别探讨这四个章节的重点...

Global site tag (gtag.js) - Google Analytics