AndroidSQLite数据库基本操作方法_第1页
AndroidSQLite数据库基本操作方法_第2页
AndroidSQLite数据库基本操作方法_第3页
AndroidSQLite数据库基本操作方法_第4页
AndroidSQLite数据库基本操作方法_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AndroidSQLite数据库基本操作⽅法程序的最主要的功能在于对数据进⾏操作,通过对数据进⾏操作来实现某个功能。⽽数据库就是很重要的⼀个⽅⾯的,Android中内置了⼩巧轻便,功能却很强的⼀个数据库–SQLite数据库。那么就来看⼀下在Android程序中怎么去操作SQLite数据库来实现⼀些需求的吧,仍然以⼀个⼩例⼦开始:项⽬之前,我们应该想⼀下我们要定义的数据库的相关信息和⾥⾯的表格的相关信息,为了⽇后数据库的更新新建⼀个Android⼯程:在Src⽂件夹下新建⼀个包com.example.databaseHelper:在这个包中创建两个类,⾸先我们来看第⼀个类DatabaseStatic.Java:packagecom.example.databaseHelper;publicclassDatabaseStatic{publicfinalstaticStringDATABASE_NAME="BookStore.db";publicfinalstaticintDATABASE_VERSION=1;publicfinalstaticStringTABLE_NAME="book";publicfinalstaticStringBOOK_NAME="bookName";publicfinalstaticStringID="_id";publicfinalstaticStringAUTHOR="author";publicfinalstaticStringPRICE="price";publicfinalstaticStringDATE="sellData";}的表的相关信息,实现我们上⾯的意图,接下来是这个包⾥⾯MyHelper.java:packagecom.example.databaseHelper;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteDatabase.CursorFactory;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.util.Log;importandroid.widget.Toast;/*在这个类的构造函数⾥⾯我们调⽤了⽗类的构造⽅法⽤来创建数据库⽂件,第⼆个构造⽅法只是为了⽅便构造(不⽤些那么多的参数)SQLiteOpenHelper类,并且重写了⽗类⾥⾯的⽅法和⽅法,⽅法当数据库⽂件不存在的时候会被调⽤来创建⼀个新的数据库⽂件(不懂的⼩伙伴可以百度⼀下)*/publicclassMyHelperextendsSQLiteOpenHelper{publicstaticStringCREATE_TABLE="createtable"+DatabaseStatic.TABLE_NAME+"("+DatabaseStatic.BOOK_NAME+"varchar(30),"+DatabaseStatic.ID+"Integerprimarykeyautoincrement,"+DatabaseStatic.AUTHOR+"varchar(20)notnull,"+DatabaseStatic.PRICE+"real)";//⽤于创建表的SQL语句privateContextmyContext=null;publicMyHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){super(context,DatabaseStatic.DATABASE_NAME,null,DatabaseStatic.DATABASE_VERSION);}publicMyHelper(Contextcontext){super(context,DatabaseStatic.DATABASE_NAME,null,DatabaseStatic.DATABASE_VERSION);myContext=context;}@OverridepublicvoidonCreate(SQLiteDatabasedb){Log.i("UseDatabase","创建数据库");Toast.makeText(myContext,"创建数据库",Toast.LENGTH_SHORT).show();db.execSQL(CREATE_TABLE);}@OverridepublicvoidonUpgrade(SQLiteDatabasearg0,intarg1,intarg2){}}当要获取数据库对象时(通过SQLiteOPenHelper中⾃带的⽅法getWriteableDatabase或者getReadableDatabase),如果数据库⽂件不存在,这个类⾥⾯的onCreate⽅法会被调⽤来创建⼀个新的数据库⽂件,如果数据库⽂件已经存在,那么onCreate⽅法将不会被调⽤activity_main.xml:<LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/mainLayout"android:layout_width="match_parent"android:orientation="vertical"android:gravity="center_horizontal"tools:context=".MainActivity"><Buttonandroid:id="@+id/buttonCreateDatabase"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="创建数据库"/><Buttonandroid:id="@+id/buttonInsertDatabase"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="插⼊数据"/><Buttonandroid:id="@+id/buttonUpdateDatabase"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="更新数据"/><Buttonandroid:id="@+id/buttonDeleteDatabase"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="删除数据"/><Buttonandroid:id="@+id/buttonQueryDatabase"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显⽰数据库中Book表中的所有数据"/></LinearLayout>(查询)数据。那么最后是MainActivity.java:importcom.example.databaseHelper.DatabaseStatic;importcom.example.databaseHelper.MyHelper;importandroid.os.Bundle;importandroid.app.Activity;importandroid.content.ContentValues;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.graphics.Color;importandroid.view.Menu;importandroid.view.View;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid.widget.TextView;importandroid.widget.Toast;publicclassMainActivityextendsActivity{privateMyHelpermyHelper=null;privateButtonbutton=null;privateSQLiteDatabasedatabase=null;privatestaticintbookSum=0;TextViewtextView=null;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=newTextView(this);LinearLayoutlayout=(LinearLayout)findViewById(R.id.mainLayout);layout.addView(textView);button=(Button)findViewById(R.id.buttonCreateDatabase);button.setOnClickListener(listener);button=(Button)findViewById(R.id.buttonInsertDatabase);button.setOnClickListener(listener);button=(Button)findViewById(R.id.buttonUpdateDatabase);button.setOnClickListener(listener);button=(Button)findViewById(R.id.buttonDeleteDatabase);button.setOnClickListener(listener);button=(Button)findViewById(R.id.buttonQueryDatabase);button.setOnClickListener(listener);}privateView.OnClickListenerlistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.buttonCreateDatabase:createDatabase();break;caseR.id.buttonInsertDatabase:insertDatabase();break;caseR.id.buttonUpdateDatabase:updateDatabase();break;caseR.id.buttonDeleteDatabase:deleteDatabase();break;caseR.id.buttonQueryDatabase:searchDatabase();break;}}};privatevoidcreateDatabase()//创建或者打开数据库{myHelper=newMyHelper(this);/*⽅法或者getReadableDatabase⽅法时,如果数据库⽂件中不存在(注意⼀个数据库中可以存在多个表格),MyHelper⽅法新建⼀个数据库⽂件并且在这个数据库⽂件中新建⼀个book表格*/myHelper.getWritableDatabase();}privatevoidinsertDatabase()//向数据库中插⼊新数据{if(myHelper==null){myHelper=newMyHelper(this);}database=myHelper.getWritableDatabase();ContentValuescV=newContentValues();cV.put(DatabaseStatic.BOOK_NAME,"CLanguage");cV.put(DatabaseStatic.ID,++bookSum);cV.put(DatabaseStatic.AUTHOR,"zhidian");cV.put(DatabaseStatic.PRICE,42.6);/*SQL把SQLite的插⼊语句封装了起来,通过ContentValues类的对象来保存数据库中的数据,于HashMap*/database.insert(DatabaseStatic.TABLE_NAME,null,cV);/*SQL语句:database.execSQL("insertinto"+DatabaseStatic.TABLENAME+"values(?,?,?,?)",newObject[]{"CLanguage",++bookSum,"zhidian",42.6});或者是这个:database.execSQL("insertinto"+DatabaseStatic.TABLENAME+"("+DatabaseStatic.BOOKNAME+","+DatabaseStatic.ID+","+DatabaseStatic.AUTHOR+","+DatabaseStatic.PRICE+")values(?,?,?,?)",newObject[]{"CLanguage",++bookSum,"zhidian",42.6});Object[]数组中的内容补全,下同参数中的Object[]数组是⼀个通⽤的数组,⾥⾯的数据可以转换为任意类型的数据,通过这个完成不同数据类型变量之间的储存*/Toast.makeText(this,"插⼊数据成功",Toast.LENGTH_SHORT).show();}privatevoidupdateDatabase()//更新数据{if(myHelper==null){myHelper=newMyHelper(this);}database=myHelper.getWritableDatabase();ContentValuescV=newContentValues();cV.put(DatabaseStatic.AUTHOR,"xiaoming");/*调⽤update"CLanguage"xiaoming*/database.update(DatabaseStatic.TABLE_NAME,cV,DatabaseStatic.BOOK_NAME+"=?",newString[]{"CLanguage"});/*SQL语句:database.execSQL("update"+DatabaseStatic.TABLENAME+"set"+DatabaseStatic.AUTHOR+"=?where"+DatabaseStatic.BOOKNAME+"=?",newString[]{"xiaoming","CLanguage"});*/Toast.makeText(this,"数据更新成功",Toast.LENGTH_SHORT).show();}privatevoiddeleteDatabase()//数据库中删除数据{if(myHelper==null){myHelper=newMyHelper(this);}database=myHelper.getWritableDatabase();/*调⽤delete⽅法删除数据库中的数据SQL语句:database.execSQL("deletefrom"+DatabaseStatic.TABLE_NAME+"where"+DatabaseStatic.BOOK_NAME+"=?",newString[]{"CLanguage"});*/database.delete(DatabaseStatic.TABLE_NAME,DatabaseStatic.BOOK_NAME+"=?",newString[]{"CLanguage"});Toast.makeText(this,"数据删除成功",Toast.LENGTH_SHORT).show();}privatevoidsearchDatabase()//查询数据库中的数据{if(myHelper==null){myHelper=newMyHelper(this);}database=myHelper.getWritableDatabase();/*database的⽅法,第⼀个参数是要查询的表名,SQL语句的⼀些参null代表查询表格中所有的数据对象SQL语句:Cursorcursor=database.rawQuery("select*frombook",null);*/Cursorcursor=database.query(DatabaseStatic.TABLE_NAME,null,null,null,null,null,null);StringBuilderstr=newStringBuilder();if(cursor.moveToFirst())//显⽰数据库的内容{for(!cursor.isAfterLast()cursor.moveToNext())//获取查询游标中的数据{str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.ID))+"");str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.BOOK_NAME))+"str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.AUTHOR))+"");str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.PRICE))+"\n");}}cursor.close();//记得关闭游标对象if(str.toString().equals("")){str.append("数据库为空!");textView.setTextColor(Color.RED);}else{textView.setTextColor(Color.BLACK);}textView.setText(str.toString());}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.main,menu);returntrue;}}MainActivity.java⾥⾯主要是实现了5个按钮对应的操作SQLiteDatabase类⾥⾯提供了对数据库表格进⾏插⼊、更新、删除、查询的对应API,⽤于给对SQL语句不熟悉的开发者使⽤,当然我们还可以调⽤这个类⾥⾯的execSQL⽅法来直接执⾏SQL语句中的插⼊、更改、删除操作,⽤rawQuery⽅法来执⾏SQL语句的查询语句。Ok,整个⼯程的项⽬视图(可能有些多余。。。):好了,运⾏⼀下:先点击“创建数据库”按钮:程序中的数据库⽂件都储存在/data/data/<包名>/databases⽂件中cmd(windows系统)abd调试⼯具(adb.exeadb.exe的完整路径)输⼊adbshellcd/data/data/com.example.UseDataBase/databases进⼊对应储存⽂件⽬录ls显⽰⽂件中的⼦⽂件⽬录,接下来我们就可以对数据库⽂件进⾏操作了:输⼊sqlite3输⼊.table来查看当前数据库⽂件中的表格⽬录,结果如下:我们可以看到我们要创建的表格确实存在,证明我们的代码确实创建了数据库⽂件和⾥⾯对应的表。表,这个表是每个数据库⽂件都会⾃动⽣成的,不需要管。按钮:“select*fromSQL语句,不熟悉的⼩伙伴可以在⽹上查到⼀些教程book这张表中成功的插⼊了⼀条新的数据。按钮:Ok,确实把书名为“CLanguage”的书的作者改为了“xiaowei”,继续单击“删除”按钮:“select*book按钮:这样看来,数据库中book表中的数据确实已经被我们删除了。这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论