zoukankan      html  css  js  c++  java
  • SQLite-SQLiteDatabase 数据库实例练习

    今天趁着有时间,自己在网上找了相关的数据库操作代码,进行了一下练习,先上代码

    main.xml文件

    <RelativeLayout 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="com.example.sqlittest.MainActivity" >
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world"
            android:textColor="#0000ff" />
    
        <LinearLayout
            android:id="@+id/l1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/bt1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="创建数库"
                android:textColor="#0000ff" />
    
            <Button
                android:id="@+id/bt2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="创建表格"
                android:textColor="#0000ff" />
    
            <Button
                android:id="@+id/bt3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="插入数据"
                android:textColor="#0000ff" />
            </LinearLayout>
    <LinearLayout
         android:id="@+id/l2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
    
            android:layout_above="@id/l1"
            android:orientation="horizontal" >
        >
            <Button
                android:id="@+id/bt4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="删除数据"
                android:textColor="#0000ff" />
    
            <Button
                android:id="@+id/bt5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="修改数据"
                android:textColor="#0000ff" />
    
            <Button
                android:id="@+id/bt6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="查看表格"
                android:textColor="#0000ff" />
        </LinearLayout>
    
    </RelativeLayout>

    然后看练习代码

    package com.example.sqlittest;
    
    import android.R.string;
    import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
    import android.support.v7.app.ActionBarActivity;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends ActionBarActivity implements OnClickListener {
        TextView tv;
        Button bt1, bt2, bt3, bt4, bt5, bt6, bt7;
        SQLiteDatabase mDatabase;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mDatabase = SQLiteDatabase.openOrCreateDatabase(
                    "/data/data/com.example.sqlittest/test.db", null);
    
            initButton();
    
        }
    
        private void initButton() {
            tv = (TextView) findViewById(R.id.tv);
            bt1 = (Button) findViewById(R.id.bt1);
            bt2 = (Button) findViewById(R.id.bt2);
            bt3 = (Button) findViewById(R.id.bt3);
            bt4 = (Button) findViewById(R.id.bt4);
            bt5 = (Button) findViewById(R.id.bt5);
            bt6 = (Button) findViewById(R.id.bt6);
            bt1.setOnClickListener(this);
            bt2.setOnClickListener(this);
            bt3.setOnClickListener(this);
            bt4.setOnClickListener(this);
            bt5.setOnClickListener(this);
            bt6.setOnClickListener(this);
    
        }
    
        @Override
        public 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;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
        // 创建数据库
        private void createdb() {
            mDatabase = SQLiteDatabase.openOrCreateDatabase(
                    "/data/data/com.example.sqlittest/test.db", null);
    
        }
    
        // 创建表格
        private void createtabe() {
            String stu_table = "create table testtable(_id integer primary key autoincrement,sname text,snumber text)";
            mDatabase.execSQL(stu_table);
    
        }
    
        // 插入数据方式1
        private void insert1() {
            ContentValues contentValues = new ContentValues();
            contentValues.put("sname", "zhangsan");
            contentValues.put("snumber", "13166111082");
            mDatabase.insert("testtable", null, contentValues);
    
        }
    
        // 插入数据方式2
        private void insert2() {
            String stu_sql = "insert into testtable(sname,snumber) values('xiaoming','01005')";
            mDatabase.execSQL(stu_sql);
    
        }
    
        // 删除数据方式1
        private void delete1() {
            String string = "_id=?";
            String[] string2 = { String.valueOf(1) };
            mDatabase.delete("testtable", string, string2);
        }
    
        // 删除数据方式2
        private void delete2() {
            String sql = "delete from testtable where _id = 2";
            mDatabase.execSQL(sql);
    
        }
    
        // 修改数据方式1
        private void change1() {
            String string = "_id=?";
            String[] string2 = { String.valueOf(1) };
            ContentValues contentValues = new ContentValues();
            contentValues.put("sname", "zhangsi");
            mDatabase.update("testtable", contentValues, string, string2);
    
        }
    
        // 修改数据方式2
        private void change2() {
            String sql = "update testtable set snumber = 654321 where _id = 1";
            mDatabase.execSQL(sql);
    
        }
    
        // 数据库查询
        private String squre() {
            StringBuffer stringBuffer = new StringBuffer();
            Cursor cursor = mDatabase.query("testtable", null, null, null, null,
                    null, null);
            // 判断游标是否为空
            if (!cursor.moveToFirst()) {
                return null;
            }
            for (int i = 0; i < cursor.getCount() - 1; i++) {
                // 获得ID
                cursor.moveToNext();
                int id = cursor.getInt(0);
                // 获得用户名
                int name_id = cursor.getColumnIndexOrThrow("sname");
                String username = cursor.getString(name_id);
                // 获得密码
                int number_id = cursor.getColumnIndexOrThrow("snumber");
                Log.e("123",
                        "" + name_id + " " + number_id + " count"
                                + cursor.getCount());
                String password = cursor.getString(number_id);
                stringBuffer.append("name_id:" + name_id + "
    " + " name:"
                        + username + "
    " + " number:" + password + "
    ");
    
            }
    
            return stringBuffer.toString();
        }
    
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            switch (arg0.getId()) {
            case R.id.bt1:
                // createdb();
                break;
            case R.id.bt2:
                // createtabe();
                break;
            case R.id.bt3:
                insert1();
                insert2();
                break;
            case R.id.bt4:
                delete1();
                delete2();
                break;
            case R.id.bt5:
                change1();
                change2();
                break;
            case R.id.bt6:
                tv.setText(squre());
                break;
            default:
                break;
            }
        }
    }

    结果如下

    在做练习的时候,遇到了以下几个问题:

    1)当创建数据库的时候,刚开始使用的是

    mDatabase = SQLiteDatabase.openOrCreateDatabase("test.db",null);

    结果报错了。所以我们可以得出的结论是,这个数据库创建,必须是指定的应用路径

    2)当进行遍历的时候,开始使用的是

    for (int i = 0; i < cursor.getCount() - 1; i++) {
        cursor.move(i);
    }

    报错,后来发现问题了,原来是数据库并不会自动更新id,也就是说,如果你删除了id=3的行,那么这一行就永久消失了,id只会增加,不会自动重新排序

    3)当我们删除一个数据的时候,我们查看数据库,会发现表格内容如下

    3|zhangsan|13166111082
    4|xiaoming|01005
    5|zhangsan|13166111082
    6|xiaoming|01005
    7|zhangsan|13166111082
    8|xiaoming|01005
    9|zhangsan|13166111082
    10|xiaoming|01005
    11|zhangsan|13166111082
    12|xiaoming|01005
    13|zhangsan|13166111082
    14|xiaoming|01005
    15|zhangsan|13166111082
    16|xiaoming|01005
    17|zhangsan|13166111082
    18|xiaoming|01005
    19|zhangsan|13166111082
    20|xiaoming|01005
    21|zhangsan|13166111082
    22|xiaoming|01005
    23|zhangsan|13166111082
    24|xiaoming|01005
    25|zhangsan|13166111082

    另外,数据库id永远是从1开始,而不是0,这是问题2报错的原因

  • 相关阅读:
    编程实现Windows系统自动登录
    IOS开发笔记
    所有的GUI Toolkit,类型之多真开眼界
    文件保护DEP
    Delphi 重启应用程序(创建Bat文件的Process)
    Linux的几个概念,常用命令学习
    Delphi内存操作API函数(备查,并一一学习)
    Servle中的会话管理
    Windows软件在Linux上的等价/替代/模仿软件列表 (抄一个)
    Go 的文件系统抽象 Afero
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_datebase_1557182.html
Copyright © 2011-2022 走看看