先创建一个数据库
package com.example.zhujunxian.zhujunxian;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
//创建数据库帮助类DBHelper:这个是日记本的数据库。。
public class DBOHelper extends SQLiteOpenHelper {
//设置数据库的名字
private static final String DBNAME = "mydiarya.db";
//设置数据库的版本
private static final int DBVERSION = 1;
//父类没有提供默认构造器
public DBOHelper(Context context){
//第三个参数的意思是cursorFactory指定在执行查询时获得一个游标实例的工厂类,
// 如果设置为空,代表使用系统默认的工厂类
//上下文,数据库名字,游标工厂,数据库版本。。
super(context,DBNAME,null,DBVERSION);
}
//创建数据库
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("create table tb_diary(id integer primary key autoincrement,title varchar(20),content varchar(1000),pubdate)");
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
}
}
创建一个数据库的操作类,对数据库进行一些增删改查的操作。这个类可以看成封装的方法,都可以套用。
package com.example.zhujunxian.zhujunxian;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
//这是对数据库的操作类,对数据库进行的一些增删改查的操作
public class EX01_09DiaryDao {
private SQLiteDatabase sqLiteDatabase;
private DBOHelper dboHelper;//这个就是我们刚才定义的数据库
//构造方法。带有content方法,以便对下一个对象进行操作
public EX01_09DiaryDao(Context context) {
dboHelper = new DBOHelper(context);
}
//数据库的添加方法,这个参数是我们刚才定义的实体类。
public void add(EX01_09Diary diary) {
//先定义一个SQL语句
String sql = "insert into tb_diary(title,content,pubdate) values(?,?,?)";
//得到SQLite数据库.getWritableDatabase()是以读写的方式打开数据库。。。
sqLiteDatabase = dboHelper.getWritableDatabase();
//执行SQL语句,,获取实体类中的标题,内容,日期
sqLiteDatabase.execSQL(sql, new String[]{diary.getTitle(), diary.getContent(), diary.getPubdate()});
}
//数据库的删除方法
public void delete(int id) {
//先定义一个SQL语句
String sql = "delete from tb_diary where id = ? ";
//得到SQLite数据库
sqLiteDatabase = dboHelper.getWritableDatabase();
//执行SQL语句。根据id删除数据
sqLiteDatabase.execSQL(sql, new String[]{Integer.toString(id)});
}
//数据库的修改方法,,参数是我们刚才定义的实体类。。。
/* public void update(EX01_09Diary diary) {
String sql = "update tb_diary set title = ? , content = ? where id = ?";
sqLiteDatabase = dboHelper.getWritableDatabase();
sqLiteDatabase.execSQL(sql, new String[]{diary.getTitle(), diary.getContent(), Integer.toString(diary.getId())});
}*/
//数据库的查看一条数据的方法
public EX01_09Diary select(int id) {
//定义一个自己的数据库
EX01_09Diary diary = null;
String sql = "select * from tb_diary where id = ?";
sqLiteDatabase = dboHelper.getWritableDatabase();
//Cursor是每行的集合
Cursor cursor1 = sqLiteDatabase.rawQuery(sql, new String[]{Integer.toString(id)});
//moveToNext是定位到第一行。。
if (cursor1.moveToNext()) {
String title = cursor1.getString(cursor1.getColumnIndex("title"));
String context = cursor1.getString(cursor1.getColumnIndex("content"));
String pubdate = cursor1.getString(cursor1.getColumnIndex("pubdate"));
diary = new EX01_09Diary(title, context, pubdate);
}
return diary;
}
//数据库查看所有数据的方法
public List<EX01_09Diary> getAllDiarys() {
List<EX01_09Diary> list = new ArrayList<EX01_09Diary>();
//得到数据库
sqLiteDatabase = dboHelper.getReadableDatabase();
Cursor cursor1 = sqLiteDatabase.rawQuery("select * from tb_diary ", null);
while (cursor1.moveToNext()) {
int id = cursor1.getInt(cursor1.getColumnIndex("id"));
String title = cursor1.getString(cursor1.getColumnIndex("title"));
String content = cursor1.getString(cursor1.getColumnIndex("content"));
String pubdate = cursor1.getString(cursor1.getColumnIndex("pubdate"));
EX01_09Diary diary = new EX01_09Diary(title, content, pubdate);
diary.setId(id);
list.add(diary);
}
return list;
}
//获取记录总数
public long count() {
long count = 0;
//获取数据库
sqLiteDatabase = dboHelper.getReadableDatabase();
Cursor cursor1 = sqLiteDatabase.rawQuery("select count(*) from tb_diary", null);
cursor1.moveToNext();
count = cursor1.getLong(0);
return count;
}
}
创建一个实体类
package com.example.zhujunxian.zhujunxian;
//编写日记本的实体类
public class EX01_09Diary {
private int id;
private String title;//日记标题
private String content; //日记的内容
private String pubdate; //日期
public EX01_09Diary(String title, String content) {
super();
this.title = title;
this.content = content;
}
public EX01_09Diary(String title, String content, String pubdate) {
super();
this.title = title;
this.content = content;
this.pubdate = pubdate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//判断标题的长度
public String getsubTitle() {
if (title.length() > 8) {
return title.substring(0, 7) + ".....";
} else {
return title;
}
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPubdate() {
return pubdate;
}
public void setPubdate(String pubdate) {
this.pubdate = pubdate;
}
}
主页面的Activity
package com.example.zhujunxian.zhujunxian;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class EX01_22 extends Activity {
private ListView listView;
private Button button;
private TextView textView;
//实例化数据库的增删改查方法
EX01_09DiaryDao ex01_09DiaryDao = new EX01_09DiaryDao(EX01_22.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ex01_22);
listView = (ListView) findViewById(R.id.listviewdiary);
textView = (TextView) findViewById(R.id.textViewtwo);
final List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
//运用数据库的查询全部的方法.
final List<EX01_09Diary> allDiarys = ex01_09DiaryDao.getAllDiarys();
for (EX01_09Diary d : allDiarys) {
Map<String, Object> map = new HashMap<String, Object>();
//map获取标题和日期
map.put("title", d.getsubTitle());
map.put("pubdate", d.getPubdate());
data.add(map);
}
//布局文件。。
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.ii, new String[]{"title", "pubdate"},
new int[]{R.id.titlee, R.id.datee});
listView.setAdapter(adapter);
//添加方法。通过往实体类中添加
button = (Button) findViewById(R.id.create);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击添加后跳转添加的页面
Intent intent = new Intent(EX01_22.this, EX01_22Update.class);
startActivity(intent);
}
});
//共有多少条数据
EX01_09DiaryDao diaryDao = new EX01_09DiaryDao(EX01_22.this);
long count = diaryDao.count();
Log.i("zhujunxiana", "count=" + count);
textView.setText("共有" + count + "条数据");
//通过剑姬列表弹出修改和删除选项
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
final String[] gender = new String[]{"修改", "删除"};
AlertDialog.Builder builder = new AlertDialog.Builder(EX01_22.this);
builder.setTitle("请选择");
builder.setItems(gender, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (gender[which].equals("修改")) {
//获取用户点击的item、、EX01_09Diary是实体类
Log.i("zhujunxiana", "test");
EX01_09Diary diary = allDiarys.get(position);
Log.i("zhujunxiana", "testone");
Intent intenta = new Intent(EX01_22.this, EX01_22UpdateAdd.class);
intenta.putExtra("id", diary.getId() + "");
// Log.i("zhujunxiana","afterid="+diary.getId());
intenta.putExtra("title", diary.getTitle());
intenta.putExtra("content", diary.getContent());
startActivity(intenta);
} else if (gender[which].equals("删除")) {
AlertDialog.Builder builder1 = new AlertDialog.Builder(EX01_22.this);
builder1.setTitle("确定要删除吗?");
builder1.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EX01_09Diary diary = allDiarys.get(position);
int id1 = diary.getId();
EX01_09DiaryDao ex01_09DiaryDao = new EX01_09DiaryDao(EX01_22.this);
ex01_09DiaryDao.delete(id1);
//刷新一下
Intent intent = new Intent(EX01_22.this, EX01_22.class);
startActivity(intent);
finish();
}
});
builder1.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder1.show();
}
}
}).show();
}
});
}
}
上面代码有点击修改,这个是点击修改后的跳转的Activity
package com.example.zhujunxian.zhujunxian;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.text.SimpleDateFormat;
import java.util.Date;
public class EX01_22UpdateAdd extends Activity {
private EditText editText1, editText2;
private Button button;
//之前会报getWritableDatabase()出错,报空指针异常,原因是具体的应该
// 是你helper = new DBOpenHelper(context)时
//context对象为null 导致你的helper为null 继而 helper.getWritableDatabase()有问题
private DBOHelper dboHelper = new DBOHelper(EX01_22UpdateAdd.this);
/* //构造方法。带有content方法,以便对下一个对象进行操作
public EX01_22UpdateAdd(Context context) {
dboHelper = new DBOHelper(context);
}*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ex01_22updateadd);
editText1 = (EditText) findViewById(R.id.titleoneone);
editText2 = (EditText) findViewById(R.id.contentoneone);
Intent intent = getIntent();
String title = intent.getStringExtra("title");
String content = intent.getStringExtra("content");
//String id = intent.getStringExtra("id");
final String id = intent.getStringExtra("id");
final int i = Integer.parseInt(id);
editText1.setText(title);
editText2.setText(content);
button = (Button) findViewById(R.id.baocunone);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String title1 = editText1.getText().toString();
String content1 = editText2.getText().toString();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss
Date date = new Date(System.currentTimeMillis());
String current = simpleDateFormat.format(date);
//实体类
EX01_09Diary diaryDao = new EX01_09Diary(title1, content1, current);
// EX01_09DiaryDao ex01_09DiaryDao = new EX01_09DiaryDao(EX01_22UpdateAdd.this);
// ex01_09DiaryDao.update(diaryDao);
Log.i("zhujunxiana", "id=" + id);
Log.i("zhujunxiana", "idtwo=" + diaryDao.getId());
Log.i("zhujunxiana", "title=" + diaryDao.getTitle());
Log.i("zhujunxiana", "titletwo=" + title1);
Log.i("zhujunxiana", "content=" + diaryDao.getContent());
String sql = "update tb_diary set title = ? , content = ? where id = ?";
// SQLiteDatabase sqLiteDatabase = dboHelper.getWritableDatabase();
SQLiteDatabase writableDatabase = dboHelper.getWritableDatabase();
writableDatabase.execSQL(sql, new String[]{diaryDao.getTitle(), diaryDao.getContent(), id});
// ex01_22UpdateAdd.update(diaryDao);
Intent intent1 = new Intent(EX01_22UpdateAdd.this, EX01_22.class);
startActivity(intent1);
finish();
}
});
}
/* public void update(EX01_09Diary diary) {
String sql = "update tb_diary set title = ? , content = ? where id = ?";
sqLiteDatabase = dboHelper.getWritableDatabase();
sqLiteDatabase.execSQL(sql, new String[]{diary.getTitle(), diary.getContent(), id});
}*/
}
下面的是点击 添加执行的方法,即添加的Activity
package com.example.zhujunxian.zhujunxian;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.text.SimpleDateFormat;
import java.util.Date;
public class EX01_22Update extends Activity {
private Button button;
private EditText editText1,editText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ex01_22update);
button = (Button) findViewById(R.id.baocun);
editText1 = (EditText) findViewById(R.id.titleone);
editText2 = (EditText) findViewById(R.id.contentone);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取标题内容
String title = editText1.getText().toString();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss
//获取当前时间
Date date = new Date(System.currentTimeMillis());
String current = simpleDateFormat.format(date);
//获取当前内容
String content = editText2.getText().toString();
//接下来把标题,内容,时间添加到数据库里面去。
//EX01_09Diary是个实体类
EX01_09Diary ex01_09Diary = new EX01_09Diary(title,content,current);
EX01_09DiaryDao ex01_09DiaryDao = new EX01_09DiaryDao(EX01_22Update.this);
ex01_09DiaryDao.add(ex01_09Diary);
//finish();
Intent intent = new Intent(EX01_22Update.this,EX01_22.class);
startActivity(intent);
finish();
}
});
}
}
下面的是主Activity的(EX01_22)布局文件
<?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="vertical"
>
<!--显示日记列表,标题和时间-->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="新建"
android:id="@+id/create"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textViewtwo"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listviewdiary"
>
</ListView>
</LinearLayout>
</LinearLayout>
注意:上面 主Activity里面的ListView里面设置的是自定义的adapter。R.layout.ii.
即下面的代码
<?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"
>
<LinearLayout
android:layout_width="130dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/titlee"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:gravity="left"
android:textColor="#228B22"
android:textSize="20dp"
/>
</LinearLayout>
<TextView
android:id="@+id/datee"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_gravity="right"
android:textColor="#340000"
android:textSize="18dp"
/>
</LinearLayout>
下面的修改数据的布局文件(EX01_22UpdateAdd)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题" />
<EditText
android:id="@+id/titleoneone"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="内容" />
<EditText
android:id="@+id/contentoneone"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/baocunone"
android:layout_width="80dp"
android:layout_height="40dp"
android:text="保存"
/>
</LinearLayout>
下面是添加数据的布局文件(EX01_22Update)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题" />
<EditText
android:id="@+id/titleone"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="内容" />
<EditText
android:id="@+id/contentone"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/baocun"
android:layout_width="80dp"
android:layout_height="40dp"
android:text="保存"
/>
</LinearLayout>
我写的比较简单,也许有很多地方不完整,请大家见谅!