android学习笔记之sqllite数据库

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
———————————————————————————————————————————————————————————————
以上是copy来的,说说自己的理解,sqllite数据库是一个轻量级的数据库,在使用时不需要进行繁杂的配置,使用起来很方便。就比如,在手机app上如果需要保存数据,我们可以在data文件夹下创建一个数据库来保存数据,而这个数据库很小,不会占很大的内存。
ok,如何使用?
有两种方法来实现数据库的创建:

  1. 用openorcreatedatabase()方法来创建数据库,如:
    . SQLiteDatabase sql=openOrCreateDatabase(getFilesDir()+"sp.db",MODE_PRIVATE,null);
  2. 通过自定义类并让其extends SQLiteOpenHelper
    需要重写方法以及构造方法,别着急,等会看例子

主要的方法:
说到数据库,用的多的方法无非就是增删改查了,在android api中提供了这些方法,而不需要sql语句了:

1.insert();//增
2.delete();//删
3.update();//改
4.query();//查

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
通过一个实例来加强理解:
一个摸拟词典的小应用(将词库的数据用insert()方法插入,然后通过query()查出来),下面是效果图:
在这里插入图片描述
在这里插入图片描述
1.首先布局(没啥好说的)
在这里插入图片描述
在这里插入图片描述
2.首先我们来实现一个数据库创建的类

public class AddSQLlite extends SQLiteOpenHelper {
    //创建表的sql语句
    String sql_create_table ="create table tran (id integer" +
            " primary key autoincrement,word char(255),explain char(255))";
    public AddSQLlite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, null, version);
    }

    @Override
    //第一次需要创建数据库时调用此方法
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(sql_create_table);//通过sql语句创表
    }
    //数据库更新时调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("---版本更新-----" + oldVersion + "--->" + newVersion);
    }
}

在需要时可以通过构造方法new一个出来。
3.实现mainActivity里面的功能:
功能如下

1.在点击翻译按钮时实现在数据库中查询,并将查询到的数据保存到Listview中
2.点击添加生词按钮时跳转到另一个Activity中

说一下大致思路:在单击事件中获取Edictext中的数据,并通过query方法在数据库中查询此数据,将查到的数据保存到ArrayList中,通过适配器将Arraylist中的数据与listview相关联。最后不要忘记close()数据库。

//先将数据库实现,因为后面要用到
//SQLiteDatabase sql=openOrCreateDatabase(getFilesDir()+"sp.db",MODE_PRIVATE,null);(也可以这样打开数据库)
AddSQLlite sql=new AddSQLlite(this,"sp.db",null,1);
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button translation= (Button) findViewById(tran);//翻译按钮
        final EditText editText= (EditText) findViewById(R.id.edit1);//中间的编辑框
        final ListView listView= (ListView) findViewById(R.id.list);//要显示的解释部分
        Button add= (Button) findViewById(R.id.add);//添加生词按钮
        //当点击翻译按钮时要在数据库中进行查找
        translation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String key=editText.getText().toString();
                if (!key.equals("")){
                    //getReadableDatabase-->以只读的方式打开数据库;query-->查询;
                    Cursor cursor=sql.query("tran",null,"word=?",new String[]{key},null,null,null);
                    //创建一个arraylist来存储查询到的数据
                    ArrayList<Map<String,String>> arrayList=new ArrayList();
                    Map<String,String> map=new HashMap();
                    //遍历查询到的数据
                    while (cursor.moveToNext()) {
                        map.put("word", cursor.getString(1));//第二列
                        map.put("explain",cursor.getString(2));//第三列
                        arrayList.add(map);
                    }

                    if (arrayList.equals("")||arrayList.size()==0){
                        Toast.makeText(MainActivity.this, "没有相关记录", Toast.LENGTH_SHORT).show();
                    }else {
                        //然后用适配器将arraylist中的数据与listview相关联
                        SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, arrayList,
                                R.layout.result, new String[]{"word", "explain"}, new int[]{R.id.resultchinese, R.id.resultexplain});
                                listView.setAdapter(simpleAdapter);

                    }
                }else{
                    Toast.makeText(MainActivity.this, "不能是空的哦", Toast.LENGTH_SHORT).show();
                }
            }
        });

        //ok,添加生词按钮实现跳转到add页面
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,AddActivity.class);
                startActivity(intent);
            }
        });

    }

4.在另一个Activity中实现插入数据功能
在单击按钮事件中用insert()方法进行数据的插入操作

AddSQLlite sql=new AddSQLlite(this,"sp.db",null,1);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        //获取两个edittext组件
        final EditText chinese= (EditText) findViewById(R.id.chinese);
        final EditText explain= (EditText) findViewById(R.id.explain);
        //获取两个按钮
        Button ok= (Button) findViewById(R.id.ok);
        Button not= (Button) findViewById(R.id.not);
        //点击添加按钮将数据加入到数据库

        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String first=chinese.getText().toString();
                String second=explain.getText().toString();
                if (first.equals("")||second.equals("")){
                    Toast.makeText(AddActivity.this, "不能为空哦", Toast.LENGTH_SHORT).show();
                }else{
                    ContentValues contentValues=new ContentValues();
                    contentValues.put("word",first);
                    contentValues.put("explain",second);
                    sql.getWritableDatabase().insert("tran",null,contentValues);
                    Toast.makeText(AddActivity.this, "成功", Toast.LENGTH_SHORT).show();
                    Intent intent=new Intent(AddActivity.this,MainActivity.class);
                    startActivity(intent);
                }
            }
        });
        //点击取消按钮返回上个intent
        not.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(AddActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
    }
发布了25 篇原创文章 · 获赞 14 · 访问量 6521

猜你喜欢

转载自blog.csdn.net/qq_34423913/article/details/104376493