android开发之使用SQLite创建一个记事本

先创建一个数据库

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>

我写的比较简单,也许有很多地方不完整,请大家见谅!

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值