SQLiteDatabase数据库的使用

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的数据库版本是1SQLiteOpenHelpter对象

//      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,factoryCursor工厂可以写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) {

        }}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值