irpas技术客

Android学习:利用SQLite数据库存储数据_遗憾总将过去_android sqlite 插入数据

网络投稿 5492

1、SQLite简介

????????SQLite是一款轻量级的关系型数据库,他支持SQL语言。由于它占用的资源非常少,利用很少的内存就有很好的性能,所以很多嵌入式设备都使用SQLite来存储数据。它支持windows、Linux以及UNIX等主流的操作系统,兼容性好。可以使用java、C#和PHP等多种开发语言,通过ODBC接口操作SQLite。

????????目前的一些主流移动操作系统(如Android和IOS等),都在使用SQLite作为复杂数据的存储引擎。

2、SQLite的数据类型

????????一般数据库采用的是固定的静态数据类型,而SQLite采用的是动态数据类型,它会根据输入的数值自动判断并存储。SQLite具有以下五种数据类型。

????????NULL:空值;

????????INTEEGER: 带符号的整型,具体取决于存入数字的范围大小;

????????REAL:浮点数字,存储为8-byte IEEE浮点数;

????????TEXT:字符串文本;

????????BLOB:二进制对象。

????????实际上,SQLite3也支持smallint、integer、float、decimal、double、varchar、date以及time等数据类型。

3、SQLite的基本用法

1.创建或打开数据库

????????当需要创建或打开一个数据库并获得数据库对象时,首先根据指定的文件名,利用SQLiteOpenHelper类创建一个辅助对象,并调用该对象的getWritableDatabase()方法或者getReadableDatabase()方法来获得一个SQLiteDatabase对象,此时才创建或者打开了一个数据库。

????????创建或者打开一个数据库的基本语法如下:

//创建StudentsDBHelper对象 StundentsDBHelper dbHelper = new StundentsDBHelper(MainActivity.this,"stdentDB",null,1); ? ? ? ? ? ?//得到一个可读的SQLiteDatabase对象 SQLiteDatabase db = dbHelper.getReadableDatabase();

2.关闭数据库

????????使用完数据库后,应该及时将其关闭,以便释放其所占的系统资源。Android系统利用SQLiteOpenHelper类的close()方法关闭打开的数据库。

3.创建或删除表

????????创建数据库的一个表的基本方法是:编写创建表(create table)或删除表(drop table)的SQL语句,然后调用SQLiteDatabase类的execSQL()方法来执行该SQL语句。

4.插入数据

????????向表中插入数据有以下两种方法。

????????方法1:利用SQLiteDatabase类的insert(String table,String nullColumnHack,ContentValues values)方法。

????????其中,各参数的意义如下:

????????table:表名称。

????????nullColumnHack:空列的默认值。

????????values:ContentValues类型的键值对Key-Values。

????????方法2:编写插入数据(insert)的SQL语句,然后调用SQLiteDatabase类的execSQL()方法执行该SQL语句。

5.删除语句

????????删除表中的数据有以下两种方法。

????????方法1:利用SQLiteDatabase类的delete(String table,String whereClause,String【】 whereArgs)方法。

????????其中,各参数的意义如下:

????????table:表名称。

????????whereClause:删除条件。

????????whereArgs:删除条件值数组。

????????方法2:编写删除数据(delete)的SQL语句,然后调用SQLiteDatabase类的execSQL()方法来执行该SQL语句。

6.修改数据

????????修改表中的数据有以下两种方法。

????????方法1:利用SQLiteDatabase类的update(String table,ContentValues values,String whereClause,String【】 whereArgs)方法。

????????其中,各参数的意义如下:

????????table:表名称。

????????values:ContentValues类型的键值对Key-Values。

????????whereClause:更新条件(where子句)。

????????whereArgs:更新条件数据。

????????方法2:编写更新数据(update)的SQL语句,然后调用SQLiteDatabase类的execSQL()方法来执行该SQL语句。

7.查询数据

????????查询表中的数据有以下两种常用的方法。

????????方法1:在Android中查询数据可以通过Cursor类实现。当使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向每一条数据,提供了很多有关查询的方法,常用的方法是 public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit)。

????????其中,各参数的意义如下:

????????table:表名称。

????????columns:列名称数组。

????????selection:条件子句,相当于where。

????????selectionArgs:条件子句,参数数组。

????????groupBy:分组列。

????????having:分组条件。

????????orderBy:排序列。

????????limit:分页查询限制。

????????Cursor:返回值,相当于结果集ResultSet。

【说明】对于不使用的参数,可以将将他们设置为NULL。

????????Cursor是一个游标接口,提供了遍历查询结果的方法,例如,移动指针方法move()、获得列值方法getString()等。

????????方法2:同样通过Cursor类,利用db.rawQuery(String sql,String[] selectionArgs)方法。

????????其中,各参数的意义如下:

????????sql:查询(select)的SQL条件子句。

????????selectionArgs:条件子句,参数数组。

示例:

????????开发一个Android应用程序,通过单击相应按钮,创建一个SQLite数据库,用来保存学生的“姓名”、“年龄”和“入学日期”这3个字段数据,并且还可以实现数据库的增加、删除、修改和查询等基本功能。

XML布局代码如下:

<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ?xmlns:tools="http://schemas.android.com/tools" ? ?android:layout_width="wrap_content" ? ?android:layout_height="wrap_content" ? ?android:layout_gravity="center_horizontal" ? ?android:columnCount="4" ? ?tools:context="zut.edu.e13_4.MainActivity"> ? ? ? ?<TextView ? ? ? ?android:id="@+id/textView1" ? ? ? ?android:layout_row="1" ? ? ? ?android:layout_column="0" ? ? ? ?android:layout_gravity="right" ? ? ? ?android:text="姓名:" ? ? ? ?android:textColor="@android:color/black"/> ? ?<EditText ? ? ? ?android:id="@+id/name" ? ? ? ?android:layout_columnSpan="2" ? ? ? ?android:ems="6"/> ? ?<TextView ? ? ? ?android:id="@+id/textView2" ? ? ? ?android:layout_column="0" ? ? ? ?android:layout_gravity="right" ? ? ? ?android:text="年龄:" ? ? ? ?android:textColor="@android:color/black"/> ? ?<EditText ? ? ? ?android:id="@+id/age" ? ? ? ?android:layout_columnSpan="2" ? ? ? ?android:ems="6"/> ? ?<TextView ? ? ? ?android:id="@+id/textView3" ? ? ? ?android:layout_column="0" ? ? ? ?android:layout_gravity="right" ? ? ? ?android:text="入学时间:" ? ? ? ?android:textColor="@android:color/black"/> ? ?<EditText ? ? ? ?android:id="@+id/enrol" ? ? ? ?android:layout_columnSpan="2" ? ? ? ?android:ems="6"/> ? ?<Button ? ? ? ?android:id="@+id/previous" ? ? ? ?android:layout_width="80dp" ? ? ? ?android:layout_height="wrap_content" ? ? ? ?android:layout_column="1" ? ? ? ?android:text="&lt;上一条"/> ? ?<Button ? ? ? ?android:id="@+id/next" ? ? ? ?android:layout_width="80dp" ? ? ? ?android:layout_height="wrap_content" ? ? ? ?android:layout_column="2" ? ? ? ?android:text="下一条>"/> ? ?<Button ? ? ? ?android:id="@+id/insert" ? ? ? ?android:layout_width="80dp" ? ? ? ?android:layout_height="wrap_content" ? ? ? ?android:layout_row="5" ? ? ? ?android:layout_column="0" ? ? ? ?android:text="插入"/> ? ?<Button ? ? ? ?android:id="@+id/update" ? ? ? ?android:layout_width="80dp" ? ? ? ?android:layout_height="wrap_content" ? ? ? ?android:text="更新"/> ? ?<Button ? ? ? ?android:id="@+id/query" ? ? ? ?android:layout_width="80dp" ? ? ? ?android:layout_height="wrap_content" ? ? ? ?android:text="查询"/> ? ?<Button ? ? ? ?android:id="@+id/delete" ? ? ? ?android:layout_width="80dp" ? ? ? ?android:layout_height="wrap_content" ? ? ? ?android:text="删除"/> ? ?<Button ? ? ? ?android:id="@+id/createDatabase" ? ? ? ?android:layout_width="wrap_content" ? ? ? ?android:layout_height="wrap_content" ? ? ? ?android:layout_row="6" ? ? ? ?android:layout_column="1" ? ? ? ?android:layout_columnSpan="2" ? ? ? ?android:layout_gravity="center" ? ? ? ?android:text="创建数据库"/> </GridLayout> ?

另外 在包含MainActivity.java的包里面新建一个StudentsDBHelper类。

其中该类的具体代码如下:

? import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; ? /** * Created by 86166 on 2022/5/9. */ ? public class StundentsDBHelper extends SQLiteOpenHelper { ? ? ?private static final String TAG = "studentDB"; ? ? ?//必要构造参数 ? ?public StundentsDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { ? ? ? ?super(context, name, factory, version); ? } ? ? ?//第一次创建数据库时调用该方法 ? ?public void onCreate(SQLiteDatabase db){ ? ? ? ?//创建新表 ? ? ? ?String sql = "create table student_table(TxtName TEXT,IntAge INTEGER,TxtEnrol TEXT)"; ? ? ? ?db.execSQL(sql); ? ? ? ?//输出创建数据库的日志信息 ? ? ? ?Log.i(TAG,"create Database OK!"); ? } ? ?public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { ? ? ? ?Log.i(TAG,"update Database OK!"); ? ? } } ?

打开MainActivity.java,编写相应的代码:

? import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; ? public class MainActivity extends Activity { ? ?//定义各种控件对象 ? ?private Button createBtn; ? ?private Button insertBtn; ? ?private Button updateBtn; ? ?private Button queryBtn; ? ?private Button deleteBtn; ? ?private Button previousBtn; ? ?private Button nextBtn; ? ?private EditText nameEdt; ? ?private EditText ageEdt; ? ?private EditText enrolEdt; ? ?//定义对应的参数 ? ?private Cursor cursor; ? ?private String name,age,enrol; ? ? ?@Override ? ?protected void onCreate(Bundle savedInstanceState) { ? ? ? ?super.onCreate(savedInstanceState); ? ? ? ?setContentView(R.layout.activity_main); ? ? ? ?//获得各控件对象; ? ? ? ?createBtn = (Button)findViewById(R.id.createDatabase); ? ? ? ?insertBtn = (Button)findViewById(R.id.insert); ? ? ? ?updateBtn = (Button)findViewById(R.id.update); ? ? ? ?queryBtn = (Button)findViewById(R.id.query); ? ? ? ?deleteBtn = (Button)findViewById(R.id.delete); ? ? ? ?previousBtn = (Button)findViewById(R.id.previous); ? ? ? ?nextBtn = (Button)findViewById(R.id.next); ? ? ? ?nameEdt = (EditText)findViewById(R.id.name); ? ? ? ?ageEdt = (EditText)findViewById(R.id.age); ? ? ? ?enrolEdt = (EditText) findViewById(R.id.enrol); ? ? ? ?//为按钮注册监听器 ? ? ? ?createBtn.setOnClickListener(new CreateListener()); ? ? ? ?deleteBtn.setOnClickListener(new DeleteListener()); ? ? ? ?queryBtn.setOnClickListener(new QueryListener()); ? ? ? ?updateBtn.setOnClickListener(new ModifyListener()); ? ? ? ?insertBtn.setOnClickListener(new InsertListener()); ? ? ? ?nextBtn.setOnClickListener(new NextListener()); ? ? ? ?previousBtn.setOnClickListener(new PreviousListener()); ? ? } ? ?//创建数据库 ? ?class CreateListener implements View.OnClickListener{ ? ? ? ?@Override ? ? ? ?public void onClick(View v){ ? ? ? ? ? ?//创建StudentsDBHelper对象 ? ? ? ? ? ?StundentsDBHelper dbHelper = new StundentsDBHelper(MainActivity.this,"stdentDB",null,1); ? ? ? ? ? ?//得到一个可读的SQLiteDatabase对象 ? ? ? ? ? ?SQLiteDatabase db = dbHelper.getReadableDatabase(); ? ? ? ? ? ?Toast.makeText(MainActivity.this,"数据库创建成功。",Toast.LENGTH_LONG).show(); ? ? ? } ? } ? ?//插入数据 ? ?class InsertListener implements View.OnClickListener{ ? ? ? ?@Override ? ? ? ?public void onClick(View v){ ? ? ? ? ? ?try{ ? ? ? ? ? ? ? ?StundentsDBHelper dbHelper = new StundentsDBHelper(MainActivity.this,"studentDB",null,1); ? ? ? ? ? ? ? ?//得到一个可写的数据库对象 ? ? ? ? ? ? ? ?SQLiteDatabase db = dbHelper.getWritableDatabase(); ? ? ? ? ? ? ? ?//生成ContentValues对象(key:列名,value:要插入的值) ? ? ? ? ? ? ? ?ContentValues cv = new ContentValues(); ? ? ? ? ? ? ? ?//向ContentValues对象中存放数据(键—值对) ? ? ? ? ? ? ? ?cv.put("TxtName",nameEdt.getText().toString()); ? ? ? ? ? ? ? ?cv.put("IntAge",ageEdt.getText().toString()); ? ? ? ? ? ? ? ?cv.put("TxtEnrol",enrolEdt.getText().toString()); ? ? ? ? ? ? ? ?//将数据插入表 ? ? ? ? ? ? ? ?db.insert("student_table",null,cv); ? ? ? ? ? ? ? ?//关闭数据库 ? ? ? ? ? ? ? ?db.close(); ? ? ? ? ? ? ? ?Toast.makeText(MainActivity.this,"插入数据成功。",Toast.LENGTH_LONG).show(); ? ? ? ? ? }catch (SQLException e){ ? ? ? ? ? ? ? ?Toast.makeText(MainActivity.this,"插入数据失败.",Toast.LENGTH_LONG).show(); ? ? ? ? ? } ? ? ? } ? } ? ?//查询数据 ? ?class QueryListener implements View.OnClickListener{ ? ? ? ?@Override ? ? ? ?public void onClick(View v){ ? ? ? ? ? ?StundentsDBHelper dbHelper = new StundentsDBHelper(MainActivity.this,"studentDB",null,1); ? ? ? ? ? ?//获得一个可读的数据库 ? ? ? ? ? ?SQLiteDatabase db = dbHelper.getReadableDatabase(); ? ? ? ? ? ?cursor = db.rawQuery("SELECT * FROM student_table WHERE TxtName=?",new String[]{nameEdt.getText().toString()}); ? ? ? ? ? ?//如果有查询结果,则移动游标到第一条记录 ? ? ? ? ? ?if(cursor.getCount()>0){ ? ? ? ? ? ? ? ?cursor.moveToFirst(); ? ? ? ? ? ? ? ?name = cursor.getString(cursor.getColumnIndex("TxtName")); ? ? ? ? ? ? ? ?nameEdt.setText(name); ? ? ? ? ? ? ? ?age = cursor.getString(cursor.getColumnIndex("IntAge")); ? ? ? ? ? ? ? ?ageEdt.setText(age); ? ? ? ? ? ? ? ?enrol = cursor.getString(cursor.getColumnIndex("TxtEnrol")); ? ? ? ? ? ? ? ?enrolEdt.setText(enrol); ? ? ? ? ? }else { ? ? ? ? ? ? ? ?Toast.makeText(MainActivity.this,"没有满足条件的数据。",Toast.LENGTH_LONG).show(); ? ? ? ? ? } ? ? ? ? ? ?//关闭数据库 ? ? ? ? ? ?db.close(); ? ? ? } ? } ? ?//修改数据 ? ?class ModifyListener implements View.OnClickListener{ ? ? ? ?@Override ? ? ? ?public void onClick(View v){ ? ? ? ? ? ?StundentsDBHelper dbHelper = new StundentsDBHelper(MainActivity.this,"studentDB",null,1); ? ? ? ? ? ?//得到一个可写的数据库对象 ? ? ? ? ? ?SQLiteDatabase db = dbHelper.getWritableDatabase(); ? ? ? ? ? ?//定义一个ContentValeus对象 ? ? ? ? ? ?ContentValues cv = new ContentValues(); ? ? ? ? ? ?cv.put("IntAge",ageEdt.getText().toString()); ? ? ? ? ? ?cv.put("TxtEnrol",enrolEdt.getText().toString()); ? ? ? ? ? ?//where子句 ? ? ? ? ? ?String whereClause="TxtName=?"; ? ? ? ? ? ?//where子句的条件 ? ? ? ? ? ?String [] whereArgs = {String.valueOf(nameEdt.getText())}; ? ? ? ? ? ?db.update("student_table",cv,whereClause,whereArgs); ? ? ? ? ? ?//关闭数据库 ? ? ? ? ? ?db.close(); ? ? ? ? ? ?Toast.makeText(MainActivity.this,"修改数据成功。",Toast.LENGTH_LONG).show(); ? ? ? ? } ? } ? ?//删除数据 ? ?class DeleteListener implements View.OnClickListener{ ? ? ? ?@Override ? ? ? ?public void onClick(View v){ ? ? ? ? ? ?StundentsDBHelper dbHelper = new StundentsDBHelper(MainActivity.this,"studentDB",null,1); ? ? ? ? ? ?//得到一个可写的数据库对象 ? ? ? ? ? ?SQLiteDatabase db = dbHelper.getWritableDatabase(); ? ? ? ? ? ?String whereClauses = "TxtName = ?"; ? ? ? ? ? ?String [] ?whereArgs = {String.valueOf(nameEdt.getText())}; ? ? ? ? ? ?//删除数据 ? ? ? ? ? ?db.delete("student_table",whereClauses,whereArgs); ? ? ? ? ? ?nameEdt.setText(""); ? ? ? ? ? ?ageEdt.setText(""); ? ? ? ? ? ?enrolEdt.setText(""); ? ? ? ? ? ?db.close(); ? ? ? ? ? ?Toast.makeText(MainActivity.this,"删除数据成功。",Toast.LENGTH_LONG).show(); ? ? ? ? } ? } ? ?//上一条数据 ? ?class PreviousListener implements View.OnClickListener{ ? ? ? ?@Override ? ? ? ?public void onClick(View v){ ? ? ? ? ? ?if(!cursor.isFirst()){ ? ? ? ? ? ? ? ?cursor.moveToFirst(); ? ? ? ? ? ? ? ?name = cursor.getString(cursor.getColumnIndex("TxtName")); ? ? ? ? ? ? ? ?nameEdt.setText(name); ? ? ? ? ? ? ? ?age = cursor.getString(cursor.getColumnIndex("IntAge")); ? ? ? ? ? ? ? ?ageEdt.setText(age); ? ? ? ? ? ? ? ?enrol = cursor.getString(cursor.getColumnIndex("TxtEnrol")); ? ? ? ? ? ? ? ?enrolEdt.setText(enrol); ? ? ? ? ? } ? ? ? } ? } ? ?//下一条数据 ? ?class NextListener implements View.OnClickListener{ ? ? ? ?@Override ? ? ? ?public void onClick(View v){ ? ? ? ? ? ?if(!cursor.isLast()){ ? ? ? ? ? ? ? ?cursor.moveToNext(); ? ? ? ? ? ? ? ?name = cursor.getString(cursor.getColumnIndex("TxtName")); ? ? ? ? ? ? ? ?nameEdt.setText(name); ? ? ? ? ? ? ? ?age = cursor.getString(cursor.getColumnIndex("IntAge")); ? ? ? ? ? ? ? ?ageEdt.setText(age); ? ? ? ? ? ? ? ?enrol = cursor.getString(cursor.getColumnIndex("TxtEnrol")); ? ? ? ? ? ? ? ?enrolEdt.setText(enrol); ? ? ? ? ? } ? ? ? } ? } ? } ?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Android #sqlite #插入数据