SQLite数据库基础

来源:互联网 发布:三轴点胶系统如何编程 编辑:程序博客网 时间:2024/05/16 14:39

使用数据库SQLite 主要有两种方式进行操作,一种为写sql 语句,另外一种为 安卓已封装好sql方法 ,属于安卓自带的方法.

直接写sql 语句 有很大的方便性,而使用安卓自带的sql 方法局限性会多.直接写sql 语句  ;  安卓自带的sql方法。

1.建库

有三种:    一种是直接拼写SQL语句,使用SQLiteDatabase.execSQL("SQL")方法执行该SQL语句,    第二种是使用 SQLiteOpenHelper 对象做CURD操作。    第三种 Context.openOrCreateDatabase(name, mode, factory)        参数:        参数一:数据库名称,        参数二:操作模式,  MODE_PRIVATE--默认模式   MODE_WORLD_READABLE--可读 MODE_WORLD_WRITEABLE--可写        参数三:附加的一个工厂类,当SQLiteDatabase实例的query函数被调用时,会使用该工厂类返回一个Cursor。可为null。说明:    SQLiteOpenHelper 中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,    然后分别在这两个方法中去实现创建、升级数据库的逻辑。    onCreate(SQLiteDatabase db):创建数据库时的操作,如建表    onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。     SQLiteOpenHelper中还有两个非常重要的实例方法,getReadableDatabase()和getWritableDatabase()。这两个方法都可    以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进    行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以    只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
  1. 建表

    SQLiteDatabase.execSQL(“create table 表名(id integer primary key autoincrement,列名 数据类型(最大长度),列名

    数据类型(最大长度)) ” )

    示例代码:

    create table Book (
    id integer primary key autoincrement,
    author text,
    price real,
    pages integer,
    name text);

  2. 增删改查

    3.1 第一种方式

    CURD  创建(Create)、更新(Update)、读取(Read)和删除(Delete)增:(插入)    有占位符:    SQLiteDatabase.execSQL("insert into 表名(要插入数据的列名1,要插入数据的列名2) values(?,?) ,new Object[]    {"插到列名1的数据", "插到列名2的数据" }");    参数一:要执行的SQL,    参数二:占位符(?)所对应的数据    无占位符:    SQLiteDatabase.execSQL("insert into 表名(要插入数据的列名1,要插入数据的列名2) values('插到列名1的数据',    '插到列名2的数据') ");删除(删):    有占位符:    SQLiteDatabase.execSQL("delete from 表名 where 要删除数据的列名 = ?",new String[]{"要删除的对比信息"});    无占位符:    SQLiteDatabase.execSQL("delete from 表名 where 要删除数据的列名 = '要删除的对比信息'");修改(改):    有占位符:    SQLiteDatabase.execSQL("update 表名 set 要修改数据的列名 = ? where 要插入数据的列名= ?",new String[]{"修改后    ,该列名对应的数据","该列名对应的原始数据"});    无占位符:    SQLiteDatabase.execSQL("update 表名 set 要修改数据的列名 = '修改后的数据' where 要修改数据的列名='修改前的数据'");查询(查):    Cursor(指针) cursor=SQLiteDatabase.rawQuery("select * from 表名 where  要查询数据的列名 = ?",new String[]    {"要查询的数据" });    cursor.getCount():通过指定条件查询出的数据的总条数    cursor.moveToNext();是否还有下一条符合条件的数据

    3.2 第二种方式 安卓自带

    增: SQLiteDatabase.insert(table, nullColumnHack, values)    参数一:表名    参数二:当values参数为空或者里面没有内容的时候,就会将你指定的这个列名的值设为null,然后再向数据库中插入    参数三:代表一行要插入的数据。    返回值(long):插入不成功返回-1,插入成功返回行号ID删: SQLiteDatabase.delete(table, whereClause, whereArgs)    参数一:表名    参数二:删除条件    参数三:删除条件里(参数二),占位符(?)所对应的参数列表    返回值(int):被删除的行数(影响的行数)改: SQLiteDatabase.update(table, values, whereClause, whereArgs)    参数一:表名    参数二:要修改的数据    参数三:修改条件    参数四:修改条件里(参数二),占位符(?)所对应的参数列表    返回值(int):被修改的行数(影响的行数)查: SQLiteDatabase.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)    Table 表名     Columens 要返回的列    Selection 查询条件    selectionArgs 查询条件占位符对应的内容    groupBy 分组判断条件    Having 是否含有的判断条件    orderBy  排序判断条件    Limit  分页查询判断条件    返回值(Cursor ):Cursor 对象里包含了查询到的数据查询使用的方法:    Cursor.moveToNext()//指针是否可以移动到下一行(是否还有下一行数据)    Cursor.getColumnIndex(String columnName)//获取指定列所在列的索引    Cursor.getString(int columnIndex);//根据指定的列的索引,去拿与该列对应的数据,返回值为String    Cursor.getInt(int columnIndex);//根据指定的列的索引,去拿与该列对应的数据,返回值为int    Cursor.getLong(int columnIndex);//根据指定的列的索引,去拿与该列对应的数据,返回值为long
  3. 注意事项:

    4.1 在有占位符(?)的SQL中,占位符的顺序与其内容所对应的数组的元素的顺序一致

  4. 示例代码

一。 第一种方式

a. 建立数据库    public class MyHelper extends SQLiteOpenHelper{        private static String NAME="day02.db";        //建表语句        private static  String CREATE_TABLE=" create table day02 (_id integer primary key autoincrement ,name text ,age text);";        // 四个参数 : context 上下文  name 数据库的名称  factory 游标工厂  version 版本号,必须从一开始        public MyHelper(Context context) {            super(context, NAME, null, 1);        }            //当数据库创建的时候调用        @Override        public void onCreate(SQLiteDatabase db) {            //建表            db.execSQL(CREATE_TABLE);        }            //更新数据库的时候调用         @Override        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {            // 比较 oldVersion 与 newVersion ,newVersion 大于  oldVersion 则进行更新操作。    //      Toast.makeText(context, text, duration).show();        }    }b. 建立Bean 接收数据    public class Person {        public Person(int id, String name, int age) {            super();            this.id = id;            this.name = name;            this.age = age;        }        public Person() {            super();            // TODO Auto-generated constructor stub        }        private int id;        private String name;        private int age;        public int getId() {            return id;        }        public void setId(int id) {            this.id = id;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }        @Override        public String toString() {            return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";        }    }c. 活动中代码实现,展示:    public class MainActivity extends Activity implements OnClickListener{        private MyHelper myHelper;        private EditText name;        private EditText age;        private String name5;        private String age5;        private TextView content;        private ListView listView;        private ArrayList<Person> list;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            //1.获取数据库对象 ,该对象还未创建表格            myHelper = new MyHelper(this);            list = new ArrayList<Person>();            init();        }        private void init() {            Button add=(Button) findViewById(R.id.add);            Button delt=(Button) findViewById(R.id.delt);            Button query=(Button) findViewById(R.id.query);            Button update=(Button) findViewById(R.id.update);            name = (EditText) findViewById(R.id.name);            age = (EditText) findViewById(R.id.age);            content = (TextView) findViewById(R.id.content);            listView = (ListView) findViewById(R.id.listView);            add.setOnClickListener(this);            delt.setOnClickListener(this);            query.setOnClickListener(this);            update.setOnClickListener(this);    //      SQLiteDatabase db=SQLiteDatabase.openDatabase(path, factory, flags);    //      SQLiteDatabase.openOrCreateDatabase(file, factory);        }        @Override        public void onClick(View v) {            switch (v.getId()) {            case R.id.add:                //获取数据                String name1=name.getText().toString();                String age1=age.getText().toString();                //1.  通过帮助实例,获取数据库 ,此时会调用  帮助类中的 onCreate 方法。                SQLiteDatabase database_add = myHelper.getWritableDatabase();                //2.  给表中添加数据 定义sql语句                String sql="insert into day02 (name,age) values (?,?);";                //3.  执行sql 语句                database_add.execSQL(sql, new String[]{name1,age1});                //4. 关闭数据库                database_add.close();                break;            case R.id.delt:                //将相同名字的条目删除                String name2=name.getText().toString();                //1. 通过帮助实例,获取数据库, 此时会调用 帮助类中的 onCreate 方法                SQLiteDatabase database_delt = myHelper.getWritableDatabase();                //2. 定义删除 sql 语句                 String sql_delt ="delete from day02 where name=?;";                //3. 执行sql 语句                database_delt.execSQL(sql_delt, new String[]{name2});                //4. 关闭数据库                database_delt.close();                break;            case R.id.update:                //清空集合                list.clear();                //根据名字更新年龄                String name3=name.getText().toString();                String age3=age.getText().toString();                //1、 通过帮助实例,获取数据库 ,此时会调用 帮助类 中的 onCreate 方法                SQLiteDatabase database_update = myHelper.getWritableDatabase();                //2. 定义更新sql语句                String sql_update="update day02 set age=? where name=? ;";                //3. 执行sql语句                database_update.execSQL(sql_update, new String[]{age3,name3});                //4. 关闭数据库                database_update.close();                break;            case R.id.query:                //根据名字查询数据                String name4=name.getText().toString();                String age4=age.getText().toString();                //1. 获取帮助实例,获取数据库,此时会调用帮助类中的 onCreate 方法                SQLiteDatabase database_query = myHelper.getWritableDatabase();                //2. 定义查询语句 结果集                String sql_select=" select * from day02 where name = ? ;";                 Cursor cursor = database_query.rawQuery(sql_select, new String[]{name4});                 //3.遍历结果集                while(cursor.moveToNext()){                    String name5=cursor.getString(cursor.getColumnIndex("name"));                    int age5=cursor.getInt(cursor.getColumnIndex("age"));                    int id5=cursor.getInt(cursor.getColumnIndex("_id"));                    Person person=  new Person(id5, name5, age5);                    list.add(person);                }                listView.setAdapter(new ArrayAdapter<Person>(MainActivity.this, android.R.layout.simple_list_item_1, list));        /*      //2. 定义查询语句 结果集                Cursor cursor = database_query.query("day02", new String[]{"name","age"}, "name=?", new String[]{name4}, null, null, null);                //3. 遍历结果集                while(cursor.moveToNext()){                    name5 += cursor.getString(cursor.getColumnIndex("name"));                    age5 += cursor.getString(cursor.getColumnIndex("age"));                    content.setText("NAME--------"+name5+"age_____"+age5);                }*/                //关闭数据库                database_query.close();                break;            default:                break;            }        }    }d. 控件    <LinearLayout 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:gravity="center_horizontal"        android:orientation="vertical" >        <EditText        android:id="@+id/name"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="姓名" />        <EditText        android:id="@+id/age"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="年龄" />        <Button        android:id="@+id/add"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="添加" />        <Button        android:id="@+id/delt"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="删除" />        <Button        android:id="@+id/update"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="修改" />        <Button        android:id="@+id/query"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="查询" />        <TextView        android:id="@+id/content"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:text="数据展示"        android:textColor="#66ff0000"         />        <ListView         android:id="@+id/listView"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        ></ListView>    </LinearLayout>

二。 第二种方式

a. 创建数据库    public class MyHelper extends SQLiteOpenHelper{        private static String NAME="day02.db";        //建表语句        private static  String CREATE_TABLE=" create table day02 (_id integer primary key autoincrement ,name text ,age text);";        // 四个参数 : context 上下文  name 数据库的名称  factory 游标工厂  version 版本号,必须从一开始        public MyHelper(Context context) {            super(context, NAME, null, 1);        }            //当数据库创建的时候调用        @Override        public void onCreate(SQLiteDatabase db) {            //建表            db.execSQL(CREATE_TABLE);        }            //更新数据库的时候调用         @Override        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {            // 比较 oldVersion 与 newVersion ,newVersion 大于  oldVersion 则进行更新操作。    //      Toast.makeText(context, text, duration).show();        }    }b. 创建Bean ,按对象接收数据    public class Person {        public Person(int id, String name, int age) {            super();            this.id = id;            this.name = name;            this.age = age;        }        public Person() {            super();            // TODO Auto-generated constructor stub        }        private int id;        private String name;        private int age;        public int getId() {            return id;        }        public void setId(int id) {            this.id = id;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }        @Override        public String toString() {            return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";        }    }c. 主活动 代码实现,并展示    public class MainActivity extends Activity implements OnClickListener{        private MyHelper myHelper;        private EditText name;        private EditText age;        private String name5;        private String age5;        private TextView content;        private ListView listView;        private ArrayList<Person> list;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            //1.获取数据库对象 ,该对象还未创建表格            myHelper = new MyHelper(this);            list = new ArrayList<Person>();            init();        }        private void init() {            Button add=(Button) findViewById(R.id.add);            Button delt=(Button) findViewById(R.id.delt);            Button query=(Button) findViewById(R.id.query);            Button update=(Button) findViewById(R.id.update);            name = (EditText) findViewById(R.id.name);            age = (EditText) findViewById(R.id.age);            content = (TextView) findViewById(R.id.content);            listView = (ListView) findViewById(R.id.listView);            add.setOnClickListener(this);            delt.setOnClickListener(this);            query.setOnClickListener(this);            update.setOnClickListener(this);        }        @Override        public void onClick(View v) {            switch (v.getId()) {            case R.id.add:                //获取数据                String name1=name.getText().toString();                String age1=age.getText().toString();                //1.  通过帮助实例,获取数据库 ,此时会调用  帮助类中的 onCreate 方法。                SQLiteDatabase database_add = myHelper.getWritableDatabase();                //2.  给表中添加数据 定义sql语句                ContentValues values=new ContentValues();                values.put("name", name1);                values.put("age", age1);                database_add.insert("day02", null, values);                //4. 关闭数据库                database_add.close();                break;            case R.id.delt:                //将相同名字的条目删除                String name2=name.getText().toString();                //1. 通过帮助实例,获取数据库, 此时会调用 帮助类中的 onCreate 方法                SQLiteDatabase database_delt = myHelper.getWritableDatabase();                //2. 定义删除  语句                 database_delt.delete("day02", "name=?", new String[]{name2});                //3. 关闭数据库                database_delt.close();                break;            case R.id.update:                //根据名字更新年龄                String name3=name.getText().toString();                String age3=age.getText().toString();                //1、 通过帮助实例,获取数据库 ,此时会调用 帮助类 中的 onCreate 方法                SQLiteDatabase database_update = myHelper.getWritableDatabase();                //2. 执行跟新语句                ContentValues values2=new ContentValues();                values2.put("name", "xiaomingming");                values2.put("age", "20周岁");                database_update.update("day02", values2, "name=?", new String[]{name3});                //3. 关闭数据库                database_update.close();                break;            case R.id.query:                //清空数据                list.clear();                //根据名字查询数据                String name4=name.getText().toString();                String age4=age.getText().toString();                //1. 获取帮助实例,获取数据库,此时会调用帮助类中的 onCreate 方法                SQLiteDatabase database_query = myHelper.getWritableDatabase();                //2. 执行查询语句 获取 结果集                Cursor cursor = database_query.query("day02", null, "name=?", new String[]{name4}, null, null, null);                 //3.遍历结果集                while(cursor.moveToNext()){                    String name5=cursor.getString(cursor.getColumnIndex("name"));                    int age5=cursor.getInt(cursor.getColumnIndex("age"));                    int id5=cursor.getInt(cursor.getColumnIndex("_id"));                    Person person=  new Person(id5, name5, age5);                    list.add(person);                }                listView.setAdapter(new ArrayAdapter<Person>(MainActivity.this, android.R.layout.simple_list_item_1, list));                //4.关闭数据库                database_query.close();                break;            default:                break;            }        }    }d. 布局文件    <LinearLayout 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:gravity="center_horizontal"        android:orientation="vertical" >        <EditText        android:id="@+id/name"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="姓名" />        <EditText        android:id="@+id/age"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="年龄" />        <Button        android:id="@+id/add"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="添加" />        <Button        android:id="@+id/delt"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="删除" />        <Button        android:id="@+id/update"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="修改" />        <Button        android:id="@+id/query"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="查询" />        <TextView        android:id="@+id/content"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:text="数据展示"        android:textColor="#66ff0000"         />        <ListView         android:id="@+id/listView"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        ></ListView>    </LinearLayout>
0 0
原创粉丝点击