SQLite数据库
Sqllite数据库是Android系统集成的一个轻量级数据库,是一个嵌入式的数据库引擎,专门用于资源有限的设备的数据操作。
SQLiteDatabase数据库的使用步骤
获取SQLiteDatabase对象
调用SQLiteDatabase方法执行sql语句
操作返回的cursor结果
关闭SQLiteDatabase数据库
Cursor的使用,可以移动指针到某行,移动成功返回true,移动到指定行后,可通过getXXX()方法获取指定列数据
SQLiteDatabase的事务
通过beginTransaction()开启事务
通过endTransaction()提交或回滚事务,具体提交或回滚取决于SQLiteDatabase是否调用了setTransactionSuccessful()方法设置事务标识,设置了的话事务执行成功则提交事务,否则回滚。
SQLiteDatabase数据库类
SQLiteDatabase代表一个数据库文件,只要获取该对象就可以对该数据库文件进行修改,
方法1创建数据库
Static SQLiteDatabaseopenDatabase(String path, SQLiteDatabase.CursorFactory factory,int flags);//打开path文件所带表的sqlLite数据库// factory用于返回cursor的工厂,null返回默认的工厂
Static SQLiteDatabaseopenOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory);//打开或创建(如果不存在)file文件所代表的SqlLite数据库
Static SQLiteDatabaseopenOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory);//打开或创建(如果不存在)path文件所代表的SqlLite数据库
获取sqlLite数据库对象后就可以对数据库进行增删改查,对于查询的方法会返回一个Cursor对象
方法2:创建数据库
在实际开发中多使用SQLiteOpenHelper开发的子类打开数据库,获取数据库对象。进行操作数据库
SQLite数据库的使用方法有insert(),update(),delete(),query()包含数据库的增删改查
实例:
布局文件
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<Buttonandroid:id="@+id/insertWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加单词"/>
<Buttonandroid:id="@+id/deleteWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除单词"/>
<Buttonandroid:id="@+id/updateWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改单词"/>
<Buttonandroid:id="@+id/queryWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询单词"/>
<EditTextandroid:id="@+id/word"
android:layout_width="match_parent"
android:layout_height="40dp"
android:hint="请输入添加的词"/>
<EditTextandroid:id="@+id/note"
android:layout_width="match_parent"
android:layout_height="40dp"
android:hint="请输入添加的词的注释"/>
<EditTextandroid:id="@+id/willChange"
android:layout_width="match_parent"
android:layout_height="40dp"
android:hint="请输入将被修改的词"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="3"
>
<ListView
android:id="@+id/showWords"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
</LinearLayout>
Activity:
public classMYSQLite extendsActivityimplementsView.OnClickListener{
EditTextword,note,willChange;
SQLiteDatabasedb;
ListViewshowWords;
List<String>listWords;
Heplpterhelpter;
ArrayAdapteradapter;
StringtableName;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqllite);
tableName="Strings";
//方法1
// helpter=newHeplpter(this, "EnglishDB.db", null, 1);//创建数据库名是englishDB的数据库版本是1的SQLiteOpenHelpter对象
// db=helpter.getReadableDatabase();//使用方法1:获取上面的数据库,若数据库不存在则自动创建
//方法2
Filedir=Environment.getExternalStorageDirectory();
Filefile=newFile(dir,"db/EnglishDD.db");
try {
file.createNewFile();//先创建数据库文件,在获取数据库对象
}catch(IOException e) {
e.printStackTrace();
}
db=SQLiteDatabase.openOrCreateDatabase(file,null);
db.execSQL("create table if not exists "+tableName+"(id integer primary key,word varchar(255),detailvarchar(255))");//当表不存在时创建表
ButtoninsertWord=(Button) findViewById(R.id.insertWord);
ButtondeleteWord=(Button) findViewById(R.id.deleteWord);
ButtonupdateWord=(Button) findViewById(R.id.updateWord);
ButtonqueryWord=(Button) findViewById(R.id.queryWord);
word=(EditText)findViewById(R.id.word);
note=(EditText) findViewById(R.id.note);
willChange=(EditText)findViewById(R.id.willChange);
insertWord.setOnClickListener(this);
deleteWord.setOnClickListener(this);
updateWord.setOnClickListener(this);
queryWord.setOnClickListener(this);
listWords=new ArrayList<String>();
showWords=(ListView)findViewById(R.id.showWords);
adapter=newArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,listWords);
showWords.setAdapter(adapter);
}
@Override
public void onClick(View arg0) {
Stringwords=word.getText().toString();
Stringcontent=note.getText().toString();
switch(arg0.getId()){
case R.id.insertWord:
//db.execSQL("insert intotableName(id,word,detail)values(null,"+words+","+content+")");
//db.execSQL("insert intotableName values(null,?,?)",new String[]{words,content});
ContentValuesvalues=newContentValues();
values.put("word", words);
values.put("detail",content);
db.insert(tableName,"空值", values);//第一个参数是表名,第二个参数values是空值或不包含任何key-values值时有效,第三个参数是插入数据的内容values
break;
case R.id.deleteWord:
db.execSQL("delete from"+tableName+" where word=?",new String[]{words});
// db.delete(tableName,"word= ?", new String[]{words});//第一个参数是表名,第二个参数是where条件,第三个参数是where条件的参数
break;
case R.id.updateWord:
// db.execSQL("update"+tableName+" setword="+words+",detail="+content+" whereword="+willChange.getText().toString());
ContentValuesvaluess=newContentValues();
valuess.put("word", words);
valuess.put("detail",content);
db.update(tableName, valuess,"word=?",newString[]{willChange.getText().toString()});//第一个参数是表名,第二个参数是修改成的内容values,第三个参数是where条件,第四个参数是条件的参数集合
break;
case R.id.queryWord:
// db.execSQL("selectword,detail from "+tableName);
Cursorcursor=db.rawQuery("select * from "+tableName,null);
listWords.clear();
while(cursor.moveToNext()){
listWords.add(cursor.getString(1)+":"+cursor.getString(2));
}
adapter.notifyDataSetChanged();
cursor.close();
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// helpter.close();
db.close();
}
}
SQLiteOpenHelpter:
public classHeplpter extendsSQLiteOpenHelper{
//name是创建的数据库的名称后缀是.db,factory是Cursor工厂可以写null为默认的工厂,vertsion是数据库的版本
public Heplpter(Contextcontext, String name, CursorFactory factory,
int version) {
super(context, name, factory,version);//使用默认的cursorFactory
}
//当调用getWritableDatabase()(以写的方式打开数据库,若数据库的磁盘空间满了,数据库则只能读不能写了,此时用本方法打开则会报错)或getReadablDatabase()(先以读写的方式打开数据库,若数据库的磁盘空间满了,此时打开数据库就会打开失败,则会以只读的方式打开数据库)方法获取数据库对象时调用,若不存在数据库则系统或自动创建爱一个在调用oncreate(),其中自动创建一个表,用于操作数据
@Override
public void onCreate(SQLiteDatabasedb) {
db.execSQL("create table English(id integer primary keyautoincrement,word varchar(255),detail varchar(255))");//执行sql语句
}
//当版本变化时调用,当创建本实例对象时会传入一个version,该version高于之前的版本号则会调用.
@Override
public voidonUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) {
}}