Android SQLite使用
- 格式:doc
- 大小:84.50 KB
- 文档页数:7
android sqlite on conflict语法在Android的SQLite中,ON CONFLICT子句是用于处理插入或更新发生冲突的情况。
下面是ON CONFLICT子句的语法:1. REPLACE:在插入发生冲突时,会删除原有的行并插入新的行。
语法:INSERT OR REPLACE INTO table_name (col1, col2, ...) VALUES (value1, value2, ...)2. IGNORE:在插入发生冲突时,忽略冲突,不进行任何操作。
语法:INSERT OR IGNORE INTO table_name (col1, col2, ...) VALUES (value1, value2, ...)3. ABORT:在插入发生冲突时,回滚整个事务。
语法:INSERT INTO table_name (col1, col2, ...) VALUES (value1, value2, ...) ON CONFLICT ABORT4. FAIL:在插入发生冲突时,回滚当前语句,但不回滚整个事务。
语法:INSERT INTO table_name (col1, col2, ...) VALUES (value1, value2, ...) ON CONFLICT FAIL5. ROLLBACK:在插入发生冲突时,回滚当前语句以及之前的所有语句。
语法:INSERT INTO table_name (col1, col2, ...) VALUES(value1, value2, ...) ON CONFLICT ROLLBACK6. REPLACE:在插入发生冲突时,删除原有的行并插入新的行。
语法:INSERT INTO table_name (col1, col2, ...) VALUES (value1, value2, ...) ON CONFLICT REPLACE使用ON CONFLICT子句时,需要将其放置在INSERT INTO 语句之后,并在其中指定冲突解决策略。
android sqlite3 sql select 用法
在 Android 开发中,可以使用 SQLite3 数据库,并通过 SQL 的`SELECT`语句来从数据库中获取数据。
以下是`SELECT`语句的基本用法:
```sql
SELECT column1, column2, ...
FROM table_name
WHERE condition;
```
其中:
- `column1, column2, ...`是你想要选择的列名,可以指定一个或多个列,用逗号分隔。
- `table_name`是要从中选择数据的表名。
- `WHERE condition`是可选的条件,用于筛选结果。
如果省略,则将返回表中的所有行。
例如,以下是一个简单的示例,选择名为`students`表中的所有列:
```sql
SELECT * FROM students;
```
如果你只想选择特定的列,可以这样做:
```sql
SELECT name, age FROM students;
```
还可以使用`WHERE`子句来添加条件:
```sql
SELECT * FROM students WHERE age > 18;
```
这将返回`students`表中`age`列大于 18 的所有行。
你可以根据自己的需求进行组合和扩展这些查询语句。
请注意,在实际使用中,还需要
考虑适当的错误处理和数据库操作的封装。
SQLite 是Android 平台上的默认数据库管理系统,用于存储和检索数据。
以下是一些常用的SQLite 语句和操作:1. 创建数据库:sqlCREATE DATABASE [database_name];2. 打开数据库:如果你想在特定数据库上执行操作,你需要先打开它。
sqlATTACH DATABASE [database_name] AS [database_alias];3. 创建表:sqlCREATE TABLE [table_name] ([column1] [data_type],[column2] [data_type],...);4. 插入数据:sqlINSERT INTO [table_name] ([column1], [column2], ...)VALUES ([value1], [value2], ...);5. 查询数据:sqlSELECT FROM [table_name]; -- 选择所有列SELECT [column1], [column2] FROM [table_name]; -- 选择特定列6. 更新数据:sqlUPDATE [table_name]SET [column1] = [value1], [column2] = [value2], ...WHERE [condition];7. 删除数据:sqlDELETE FROM [table_name] WHERE [condition];8. 创建索引:创建索引可以加速查询速度。
sqlCREATE INDEX [index_name] ON [table_name] ([column1], [column2], ...);9. 创建触发器:触发器是与特定表相关联的特殊类型的存储过程,它自动执行特定操作。
例如,当向表中插入、更新或删除记录时,触发器可以自动执行。
10. 创建视图:视图是基于一个或多个表的虚拟表。
Sqlite 实现简单的增删改查主界面:功能实现:1)增加数据:2)全部显示3)清除显示4)全部删除5):ID删除6)ID查询:7)ID更新:主要代码段:DBOpenHelper.javapackage com.chen.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class DBOpenHelper extends SQLiteOpenHelper { private static final int VERSION=2;//版本private static final String DBNAME="user.db";//数据库名字//创建数据库public DBOpenHelper(Context context) {super(context, DBNAME, null, VERSION);}@Override/** 创建表*/public void onCreate(SQLiteDatabase db) {db.execSQL("create table if not exists u_user(_id integer primary key,name varchar(20),age integer,tall varchar(5))");}//版本被更新时执行@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}UserDAO.javapackage com.chen.dao;import java.util.ArrayList;import java.util.List;import er;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class UserDAO {private DBOpenHelper helper;//写入,不然会是出错,是空指针public UserDAO(Context context){helper=new DBOpenHelper(context);}/*** 添加用户信息*/public void add(User user){SQLiteDatabase db=helper.getWritableDatabase();String sql="Insert into u_user(_id,name,age,tall) values(?,?,?,?)";db.execSQL(sql, new Object[]{user.getId(),user.getName(),user.getAge(),user.getTall()});db.close();}/*** 删除用户信息*/public void delete(Integer...id){if(id.length>0){StringBuffer sb=new StringBuffer();for(int i=0;i<id.length;i++){sb.append("?").append(",");}sb.deleteCharAt(sb.length()-1);SQLiteDatabase database=helper.getWritableDatabase();String sql="delete from u_user where _id in ("+sb+")";database.execSQL(sql, (Object[])id);}}/*** 删除表里的全部数据*/public void delelteall(){SQLiteDatabase database=helper.getWritableDatabase();String sql = "delete from u_user";database.execSQL(sql);}/*** 用户修改*/public void update(User user){SQLiteDatabase db=helper.getWritableDatabase();//写入数据库中注意!!!!不能放在外面String sql="update u_user set name=?,age=?,tall=? where _id=?";db.execSQL(sql, new Object[]{user.getName(),user.getAge(),user.getTall(),user.getId()});}/*** 查找用户信息*/public User find(int userid){SQLiteDatabase db=helper.getWritableDatabase();//写入数据库中注意!!!!不能放在外面String sql="select _id,name,age,tall from u_user where _id=?";Cursor cursor=db.rawQuery(sql, new String[]{String.valueOf(userid)});if(cursor.moveToNext()){return new User(cursor.getInt(cursor.getColumnIndex("_id")),cursor.getString(cursor.getColumnIndex("name")),cursor.getInt(cursor.getColumnIndex("age")),cursor.getString(cursor.getColumnIndex("tall")));}return null;}/*** 显示用户*/public Cursor select() {SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.query("u_user",null, null, null, null,null, "_id desc");return cursor;}}MainActivity.javapackage com.chen.database;/*** writer:ManMan*Email:*******************/import erDAO;import er;import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{ private static final String TAG = "Add";private EditText edname,edage,edtall,id;private Button add,deleteshow,show,iddelete,idupdate,idshow,deleteall;private TextView tedatashow;private ListView datashow;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);edname = (EditText)findViewById(R.id.edname);edage = (EditText)findViewById(R.id.edage);edtall = (EditText)findViewById(R.id.edtall);id = (EditText)findViewById(R.id.id);tedatashow = (TextView)findViewById(R.id.tedatashow);datashow = (ListView)findViewById(R.id.datashow);add = (Button)findViewById(R.id.add);deleteshow = (Button)findViewById(R.id.deleteshow);show = (Button)findViewById(R.id.show);iddelete = (Button)findViewById(R.id.iddelete);idupdate = (Button)findViewById(R.id.idupdate);idshow = (Button)findViewById(R.id.idshow);deleteall = (Button)findViewById(R.id.deleteall);add.setOnClickListener(this);deleteshow.setOnClickListener(this);show.setOnClickListener(this);iddelete.setOnClickListener(this);idupdate.setOnClickListener(this);idshow.setOnClickListener(this);deleteall.setOnClickListener(this);}public void onClick(View v) {/** 添加数据*/if(v==add){if(!id.getText().toString().equals(null)&&!edname.getText().toString().equals(null)&&!edage .getText().toString().equals(null)&&!edtall.getText().toString().equals(null)){try{UserDAO userdao = new UserDAO(MainActivity.this);User user = new User(Integer.valueOf(id.getText().toString()), edname.getText().toString(),Integer.valueOf(edage.getText().toString()), edtall.getText().toString());userdao.add(user);Toast.makeText(MainActivity.this, "成功添加!", Toast.LENGTH_LONG).show();tedatashow.setText("新添数据为:"+"\n"+"ID:"+Integer.valueOf(id.getText().toString())+","+"姓名:"+edname.getText().toString()+","+"年龄:"+Integer.valueOf(edage.getText().toString())+","+"身高:"+edtall.getText().toString()+",");//设置为空edage.setText("");edname.setText("");edtall.setText("");id.setText("");}catch (Exception e) {Log.i(TAG, "出错了");Log.i(TAG, e.getMessage());}}else if(id.getText().toString().equals(null)){Toast.makeText(MainActivity.this, "ID不能为空!", Toast.LENGTH_LONG) .show();}}/** 清除显示*/if(v==deleteshow){tedatashow.setText("");}/** 全部显示*/if(v==show){try{UserDAO userdao = new UserDAO(MainActivity.this);Cursor cursor = userdao.select();/** 构建Listview适配器*/SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, yout.showuser, cursor, new String[]{"_id","name","age","tall" },newint[]{R.id.textView1,R.id.textView2,R.id.textView3,R.id.textView4});datashow.setAdapter(adapter);}catch (Exception f) {Log.e("err",f.getMessage());Log.e("err",null, f.getCause());Toast.makeText(MainActivity.this, "显示不了", Toast.LENGTH_LONG).show();}}/** ID删除*/if(v==iddelete){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面userDAO.delete(Integer.valueOf(id.getText().toString()));Toast.makeText(MainActivity.this, "您成功删除了"+Integer.valueOf(id.getText().toString()), Toast.LENGTH_LONG).show();id.setText("");}/** 全部删除*/if(v==deleteall){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面userDAO.delelteall();Toast.makeText(MainActivity.this, "您已经把数据全部删除了", Toast.LENGTH_LONG).show();}/** ID更新*/if(v==idupdate){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面User user=userDAO.find(Integer.valueOf(id.getText().toString()));user.setName(edname.getText().toString());user.setAge(Integer.valueOf(edage.getText().toString()));user.setTall(edtall.getText().toString());userDAO.update(user);Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_LONG).show();}/** ID查询*/if(v==idshow){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面User user=userDAO.find(Integer.valueOf(id.getText().toString()));tedatashow.setText("ID:"+user.getId()+" "+"姓名:"+user.getName()+" "+"年龄:"+user.getAge()+" "+"身高"+user.getTall());}/***/}}User.javapackage com.chen.modl;public class User {private int id;private String name;private int age;private String tall;/** 构造方法*/public User(){super();}public User(int id,String name,int age,String tall){ this.id=id;=name;this.age=age;this.tall=tall;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getTall() {return tall;}public void setTall(String tall) {this.tall = tall;}//复写toString()方法进行查找public String toString(){return"id:"+id+"name:"+name+"age"+age+"tall"+tall;}}Main.xml<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><!--姓名 --><TextViewandroid:text="姓名:"android:layout_width="wrap_content"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/edname"android:layout_height="wrap_content"android:layout_width="278dp"/></LinearLayout><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><!--年龄 --><TextViewandroid:text="年龄:"android:layout_width="wrap_content"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/edage"android:layout_width="278dp"/></LinearLayout><!--身高 --><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content" ><TextViewandroid:text="身高:"android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditTextandroid:id="@+id/edtall"android:layout_height="wrap_content"android:layout_width="278dp"/></LinearLayout><!--按钮 --><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/add"android:text="添加数据"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="3dip"/><Buttonandroid:id="@+id/show"android:text="全部显示"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/deleteshow"android:text="清除显示"android:layout_width="wrap_content"/><Buttonandroid:id="@+id/deleteall"android:text="全部删除"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout><!--按钮 --><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:text="ID:"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="3dip"android:layout_weight="1"/><EditTextandroid:id="@+id/id"android:layout_width="75dip"android:layout_height="wrap_content"android:layout_marginLeft="3dip"android:layout_weight="2"/><Buttonandroid:id="@+id/iddelete"android:text="ID删除"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dip"android:layout_weight="1"/><Buttonandroid:id="@+id/idshow"android:text="ID查询"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"/><Buttonandroid:id="@+id/idupdate"android:text="ID更新"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"/></LinearLayout><TextViewandroid:text="数据库数据显示:"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/tedatashow"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="15dip"/><ListViewandroid:id="@+id/datashow"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="15dip"/></LinearLayout>。
android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查1:androidmanifest.xml的内容[html]view plaincopy1.<?xml version="1.0" encoding="utf-8"?>2.<manifest xmlns:android="/apk/res/android"3.package="cn.itcast.db"4.android:versionCode="1"5.android:versionName="1.0">6.<application android:icon="@drawable/icon" android:lab el="@string/app_name">7.<uses-library android:name="android.test.runner" />8.<activity android:name=".MainActivity"9.android:label="@string/app_name">10.<intent-filter>11.<action android:name="android.intent.action.MAIN" / >12.<category android:name=" UNCHER" />13.</intent-filter>14.</activity>15.16.</application>17.18.<uses-sdk android:minSdkVersion="8" />19.<!-- 配置测试环境 -->20.<instrumentation android:name="android.test.Instru mentationTestRunner"21.android:targetPackage="cn.itcast.db"22.android:label="T est for My App"/>23.24.</manifest>2:Person类[java]view plaincopy1.package cn.itcast.domain;2.3.public class Person {4.5.private Integer id;6.private String name;7.8.public Person() {9.10.}11.12.public Integer getId() {13.return id;14.}15.16.public void setId(Integer id) {17.this.id = id;18.}19.20.public String getName() {21.return name;22.}23.24.public void setName(String name) { = name;26.}27.28.@Override29.public String toString() {30.return "Person [id=" + id + ", name=" + name + "]";31.}32.33.}3:DBOpenHelper类,该类继承了SQLiteOpenHelper类[java]view plaincopy1.package cn.itcast.service;2.3.import android.content.Context;4.import android.database.sqlite.SQLiteDatabase;5.import android.database.sqlite.SQLiteOpenHelper;6.import android.database.sqlite.SQLiteDatabase.CursorFac tory;7.8.public class DBOpenHelper extends SQLiteOpenHelper {9.10.private static final String DATABASENAME = "cn.itcast. db";11.private static final int DATABASEVERSION = 1;12.13./*14.* 构造函数15.*/16.public DBOpenHelper(Context context) {17.super(context, DATABASENAME, null, DATABASEVERSION);18.}19.20./*21.* 数据库第一次生成时调用该方法,创建一些表或者初始化一些数据22.* @see android.database.sqlite.SQLiteOpenHelper#on Create(android.database.sqlite.SQLiteDatabase)23.*/24.@Override25.public void onCreate(SQLiteDatabase db) {26.db.execSQL("create table person(personid integer pri mary key autoincrement, name varchar(20))");27.}28.29.@Override30.public void onUpgrade(SQLiteDatabase db, int oldVer sion, int newVersion) {31.32.}33.34.}4:PersonService类[java]view plaincopy1.package cn.itcast.service;2.3.import java.util.ArrayList;4.import java.util.List;5.6.import android.content.Context;7.import android.database.Cursor;8.import android.database.sqlite.SQLiteDatabase;9.import cn.itcast.domain.Person;10.11.public class PersonService {12.13.private DBOpenHelper dbOpenHelper;14.15.public PersonService(Context context) {16.this.dbOpenHelper = new DBOpenHelper(context);17.}18.19./*20.* save a person to the database21.*/22.public void save(Person person) {23.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();24.database.execSQL("insert into person(name) values (?) ", new Object[]{person.getName()});25.}26.27./*28.* updata a person to the database29.*/30.public void update(Person person) {31.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();32.database.execSQL("update person set name=? wherepersonid=?", new Object[]{person.getName(), person.getId()});33.}34.35./*36.* delete a person from the database according to the id37.*/38.public void delete(Integer id) {39.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();40.database.execSQL("delete from person where personi d=?", new Object[]{id.toString()});41.}42.43./*44.* find a person from the database according to the id45.*/46.public Person find(Integer id) {47.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();48.Cursor cursor = database.rawQuery("select * from per son where personid=?", new String[]{id.toString()});49.Person person = null;50.if(cursor.moveT oFirst()) {51.Integer personid = cursor.getInt(cursor.getColumnInd ex("personid"));52.String name = cursor.getString(cursor.getColumnIndex ("name"));53.person = new Person();54.person.setId(personid);56.}57.return person;58.}59.60./*61.* get the data of person accroding to the offset and m axResult62.*/63.public List<Person> getScrollData(Integer offset, Integ er maxResult) {64.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();65.Cursor cursor = database.rawQuery("select * from per son limit ?,?", new String[] {offset.toString(), maxResult.toString() });66.int idIndex = 0;67.int nameIndex = 0;68.List<Person> personList = null;69.70.if(cursor.getCount() >= 0) {71.idIndex = cursor.getColumnIndex("personid");Index = cursor.getColumnIndex("name");73.personList = new ArrayList<Person>();74.}75.76.while(cursor.moveToNext()) {77.Integer personid = cursor.getInt(idIndex);78.String name = cursor.getString(nameIndex);79.Person person = new Person();81.person.setName(name);82.personList.add(person);83.}84.return personList;85.}86.87./*88.* get the count of the database89.*/90.public long getCount(){91.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();92.Cursor cursor = database.rawQuery("select count(*) fr om person", null);93.cursor.moveToFirst();94.return cursor.getLong(0);95.}96.97.}5:PersonServiceT est类[java]view plaincopy1.package cn.itcast.db;2.3.import java.util.List;4.5.import android.test.AndroidTestCase;6.import android.util.Log;7.import cn.itcast.domain.Person;8.import cn.itcast.service.DBOpenHelper;9.import cn.itcast.service.PersonService;10.11.public class PersonServiceTest extends AndroidT estCase {12.private static final String TAG = "PersonServiceTest";13.14./*15.* 测试生成数据库的方法16.*/17.public void testCreateDB() throws Throwable {18.DBOpenHelper dbOpenHelper = new DBOpenHelper( this.getContext());19.dbOpenHelper.getWritableDatabase(); //第一次调用该方法会生成数据库20.21.}22.23./*24.* 测试保存方法25.*/26.public void testSave() throws Throwable{27.PersonService personService = new PersonService(this .getContext());28.29.Person person1 = new Person();30.person1.setName("zhangsan");31.personService.save(person1);32.33.Person person2 = new Person();34.person2.setName("lisi");35.personService.save(person2);36.37.Person person3 = new Person();38.person3.setName("wangwu");39.personService.save(person3);40.41.}42.43.public void testDelete() {44.PersonService personService = new PersonService(this .getContext());45.personService.delete(1);46.47.}48.49./*50.* 测试更新方法51.*/52.public void testUpdate() {53.PersonService personService = new PersonService(this .getContext());54.Person person = personService.find(1);55.person.setName("zhaoliu");56.personService.update(person);57.58.}59.60./*61.* 测试获得数据方法63.public void testGetScrollData() throws Throwable{64.PersonService personService = new PersonService(this .getContext());65.List<Person> persons = personService.getScrollData(0 , 3);66.for(Person person : persons) {67.Log.i(TAG, person.toString());68.}69.}70.71./*72.* 测试根据id查找的方法73.*/74.public void testFind() throws Throwable{75.PersonService personService = new PersonService(this .getContext());76.Person person = personService.find(1);77.Log.i(TAG, person.toString());78.79.}80.81./*82.* 测试获得数量的方法83.*/84.public void testGetCount() {85.PersonService personService = new PersonService(this .getContext());86.long count = personService.getCount();87.Log.i(TAG, count + "");89.}。
Android 学习之SQLite 数据库存储•引⾔概念 SQLite 数据库,和其他的SQL 数据库不同, 我们并不需要在⼿机上另外安装⼀个数据库软件,Android 系统已经集成了这个数据库;特点SQLite 是⼀个轻量级的关系型数据库,运算速度快,占⽤资源少,很适合在移动设备上使⽤不仅⽀持标准SQL 语法,还遵循ACID(数据库事务)原则,⽆需账号,使⽤起来⾮常⽅便SQLite ⽀持五种数据类型NULLinteger (整型)real(浮点型)text(⽂本类型)blob(⼆进制类型)SQLite 通过⽂件来保存数据库⼀个⽂件就是⼀个数据库数据库中⼜包含多个表格表格⾥⼜有多条记录每条记录由多个字段构成每个字段都有对应的值•创建数据库 Android 为了让我们能够更加⽅便地管理数据库,专门提供了⼀个 SQLiteOpenHelper 帮助类; 借助这个类就可以⾮常简单地对数据库进⾏创建和升级。
SQLiteOpenHelper 是⼀个抽象类,这意味着如果我们想要使⽤它的话,就需要创建⼀个⾃⼰的帮助类去继承它; SQLiteOpenHelper 中有两个抽象⽅法,分别是 和 ;: 数据库第⼀次被创建时被调⽤: 在数据库的版本发⽣变化时会被调⽤⼀般在软件升级时才需改变版本号,⽽数据库的版本是由程序员控制的假设数据库现在的版本是 1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新⽤户⼿机⾥的数据库表结构为了实现这⼀⽬的,可以把原来的数据库版本设置为 2,或者其他与旧版本号不同的数字即可 我们必须在⾃⼰的帮助类⾥⾯重写这两个⽅法,然后分别在这两个⽅法中去实现 创建、升级数据库 的逻辑。
SQLiteOpenHelper 中还有两个⾮常重要的实例⽅法: 和 。
这两个⽅法都可以 创建或打开 ⼀个现有的数据库(如果数据库已存在则直接打开,否则创建⼀个新的数据库), 并返回⼀个可对数据库进⾏读写操作的对象。
在Android应用中利用SQLite进行本地数据库操作随着移动应用的不断发展,电子设备成为人们生活中不可或缺的一部分。
而Android操作系统作为最广泛使用的移动操作系统之一,它提供了强大的开发平台,为开发者们提供了各种各样的开发工具和API。
其中,SQLite作为Android应用中的一种轻量级数据库管理系统,被广泛应用于数据存储和管理。
本文将介绍在Android应用中通过SQLite实现本地数据库操作的方法。
1. 简介SQLite是一种无服务器的自包含的数据库引擎,它在Android操作系统中作为默认的关系型数据库引擎。
它无需独立的服务器进程,将数据库引擎与应用程序合并在一起,使得应用程序可以直接操作数据库。
SQLite在移动设备上非常流行,因为它占用的磁盘空间相对较少,并且提供了性能高效的操作方式。
2. 创建数据库在Android应用中使用SQLite进行本地数据库操作,首先需要创建一个数据库。
Android提供了SQLiteOpenHelper类来管理数据库的创建和升级。
在创建数据库之前,首先需要定义数据库的结构,包括表的结构和字段信息。
接着,通过继承SQLiteOpenHelper类,重写onCreate()方法和onUpgrade()方法,可以自动创建数据库和升级数据库。
3. 创建表使用SQLite进行本地数据库操作时,需要在数据库中创建表来存储数据。
通过执行SQL语句,可以在数据库中创建表以及定义表中的字段信息。
SQLite支持多种数据类型,包括整型、浮点型、文本型等。
通过在SQL语句中指定字段的名称和类型,可以创建适合应用需求的表。
4. 插入数据插入数据是在数据库中进行本地数据库操作的常见操作之一。
通过执行SQL 语句的INSERT INTO语句,可以将数据插入到数据库的表中。
通过使用ContentValues类,可以方便地设置插入数据的字段值。
通过调用SQLiteDatabase 类的insert()方法,可以执行插入数据的操作。
android sqlite query方法在Android开发中,使用SQLite数据库进行查询是一个常见的操作。
下面是一个简单的例子,展示如何在Android中执行一个SQLite查询:1. 创建数据库助手类:首先,你需要创建一个帮助类来管理你的数据库。
这个类通常会包含创建数据库、打开数据库和执行查询的方法。
2. 定义表格:在数据库中定义一个表格。
例如,你可以创建一个名为`Users`的表格,其中包含`id`, `name`, 和`age`字段。
3. 执行查询:使用`SQLiteDatabase`的`query`方法来执行查询。
这个方法需要指定表名、列名、筛选条件等。
4. 处理结果:查询结果通常会返回一个`Cursor`对象。
你可以遍历这个对象来获取查询到的数据。
下面是一个示例代码,展示如何在Android中执行一个简单的SQLite查询:```javaimport ;import ;import ;import ;import ;public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "";private static final int DATABASE_VERSION = 1;private static final String TABLE_NAME = "Users";private static final String COLUMN_ID = "id";private static final String COLUMN_NAME = "name";private static final String COLUMN_AGE = "age";private static final String COLUMN_CREATED_AT = "created_at";public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION); }Overridepublic void onCreate(SQLiteDatabase db) {String createTableQuery = "CREATE TABLE " + TABLE_NAME + " (" +COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +COLUMN_NAME + " TEXT, " +COLUMN_AGE + " INTEGER, " +COLUMN_CREATED_AT + " DATETIME DEFAULT CURRENT_TIMESTAMP" +");";(createTableQuery);}Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {("DROP TABLE IF EXISTS " + TABLE_NAME);onCreate(db);}public void addUser(String name, int age) {SQLiteDatabase db = ();ContentValues contentValues = new ContentValues();(COLUMN_NAME, name);(COLUMN_AGE, age);(TABLE_NAME, null, contentValues);();}public Cursor getUsers() {SQLiteDatabase db = ();String selectQuery = "SELECT FROM " + TABLE_NAME;Cursor cursor = (TABLE_NAME, null, null, null, null, null, null); return cursor;}}```在上面的代码中,我们定义了一个`DatabaseHelper`类,它包含了创建数据库、添加用户和查询用户的方法。
AndroidKotlin使⽤SQLite案例详解Kotlin使⽤SQLite⾸先确定我们的⽬标,SQLite只是⼀种⼯具,我们需要掌握就是增删改查就可以,我们真正需要动脑的还是项⽬中的业务逻辑。
我这篇⽂章写得⽐较适合新⼿,没⽤过SQLite的同学。
前期准备⼯作新建⼀个类MyDataBaseHelper继承⾃SQLiteOpenHelper,代码如下:class MyDatabaseHelper(var context: Context, name: String, version: Int) :SQLiteOpenHelper(context, name, null, version) {public var createBook="create table Book (" +"id integer primary key autoincrement," +"author text," +"price real," +"pages integer," +"name text)"override fun onCreate(db: SQLiteDatabase?) {// 下⾯这个todo 如果不注释掉的话就会报错。
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.db?.execSQL(createBook)Toast.makeText(context,"Create Successed",Toast.LENGTH_LONG).show()}override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.db?.execSQL("drop table if exists Book")onCreate(db)}}对数据进⾏操作操作⽐较简单,下⾯直接看代码:Activity中class MySQLite : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(yout.activity_my_sqlite)val dbHelper=MyDatabaseHelper(this,"BookStore.db",1)/*** 创建表*/btnCreateDataBase.setOnClickListener {dbHelper.writableDatabase}/*** 添加数据*/btnAddData.setOnClickListener {val db=dbHelper.writableDatabaseval Values1=ContentValues().apply {// 第⼀条数据put("name","The Da Vinci Code")put("author","Dan Broen")put("pages",454)put("price",16.96)}db.insert("Book",null,Values1)val values2=ContentValues().apply {// 第⼆条数据put("name","The Lost Symbol")put("author","Dan Brown")put("pages",510)put("price",19.95)}db.insert("Book",null,values2)}btnUpdateData.setOnClickListener {val db=dbHelper.writableDatabaseval values=ContentValues()values.put("price",10.99)db.update("Book",values,"name=?", arrayOf("The Da Vinci Code"))}btnDeleteData.setOnClickListener {val db=dbHelper.writableDatabasedb.delete("Book","pages>?", arrayOf("500"))}btnQueryData.setOnClickListener {val db=dbHelper.writableDatabase// 查询Book表中所有数据// 这⾥获取到是Cursor对象val cursor=db.query("Book",null,null,null,null,null,null)if (cursor.moveToFirst()){do {val name=cursor.getString(cursor.getColumnIndex("name"))val author=cursor.getString(cursor.getColumnIndex("author"))val pages=cursor.getString(cursor.getColumnIndex("pages"))val price=cursor.getString(cursor.getColumnIndex("price"))Log.d("MainActivity","book name is $name")Log.d("MainActivity","author is $author")Log.d("MainActivity","pages is $pages")Log.d("MainActivity","price is $price")}while (cursor.moveToNext())}cursor.close()}}}布局⽂件<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="/apk/res/android" xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".sqlite.MySQLite"><Buttonandroid:id="@+id/btnCreateDataBase"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="CreateDataBase"android:textAllCaps="false"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/btnAddData"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="AddData"android:textAllCaps="false"app:layout_constraintTop_toBottomOf="@+id/btnCreateDataBase" /><Buttonandroid:id="@+id/btnUpdateData"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="UpdateData"android:textAllCaps="false"app:layout_constraintTop_toBottomOf="@+id/btnAddData" /><Buttonandroid:id="@+id/btnDeleteData"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="DeleteData"app:layout_constraintTop_toBottomOf="@+id/btnUpdateData" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btnQueryData"android:text="Query Data"android:textAllCaps="false"app:layout_constraintTop_toBottomOf="@+id/btnDeleteData"/></androidx.constraintlayout.widget.ConstraintLayout>到此这篇关于Android Kotlin使⽤SQLite案例详解的⽂章就介绍到这了,更多相关Android Kotlin使⽤SQLite内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
在Android中,当你使用SQLite数据库进行插入操作时,通常情况下并没有一个直接的返回值来表示插入操作是否成功。
这是因为SQLite的INSERT操作是一个原子操作,要么完全成功,要么完全失败,不会因为中间某个环节失败而导致数据不一致。
但是,你可以通过以下几种方式来间接判断插入操作是否成功:
1.使用lastInsertId()方法:
如果你在插入操作时指定了一个自增的主键,那么在插入操作完成后,你可以调用lastInsertId()方法来获取这个新插入的记录的自增ID。
如果这个方法返回-1,那么表示插入操作失败。
2.捕获异常:
如果在进行插入操作时出现了异常,那么这意味着插入操作失败了。
你可以通过捕获SQLException来处理这种情况。
3.查询数据库:
在插入操作后,你可以执行一个查询来检查新插入的记录是否存在。
如果存在,那么插入操作成功;否则,插入操作失败。
注意:为了提高效率,如果知道有数据被成功插入,建议直接使用lastInsertId()或者异常处理来确定结果,而不是进行额外的查询操作。
Android 开发中使用SQLite 数据库SQLite 介绍SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。
此外它还是开源的,任何人都可以使用它。
许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。
SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
图 1. SQLite 内部结构SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。
它的优点就是高效,Android 运行时环境包含了完整的 SQLite。
SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。
当某个值插入数据库时,SQLite 将检查它的类型。
如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。
如果不能转换,则该值将作为其本身具有的类型存储。
比如可以把一个字符串(String)放入INTEGER 列。
SQLite 称这为“弱类型”(manifest typing.)。
∙构造函数,调用父类 SQLiteOpenHelper 的构造函数。
这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
∙onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
∙onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:public class DatabaseHelper extends SQLiteOpenHelper {DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version){super(context, name, cursorFactory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO 创建数据库后,对数据库的操作}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO 更改数据库版本的操作}@Overridepublic void onOpen(SQLiteDatabase db) {super.onOpen(db);// TODO 每次成功打开数据库后首先被执行}}接下来讨论具体如何创建表、插入数据、删除表等等。
调用getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:db=(new DatabaseHelper(getContext())).getWritableDatabase();return (db == null) ? false : true;上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。
当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用SQLiteDatabase 的 Close() 方法来释放掉数据库连接。
创建表和索引为了创建表和索引,需要调用 SQLiteDatabase 的 execSQL() 方法来执行 DDL 语句。
如果没有异常,这个方法没有返回值。
例如,你可以执行如下代码:db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEYAUTOINCREMENT, title TEXT, value REAL);");这条语句会创建一个名为 mytable 的表,表有一个列名为 _id,并且是主键,这列的值是会自动增长的整数(例如,当你插入一行时,SQLite 会给这列自动赋值),另外还有两列:title( 字符 ) 和 value( 浮点数 )。
SQLite 会自动为主键列创建索引。
通常情况下,第一次创建数据库时创建了表和索引。
如果你不需要改变表的schema,不需要删除表和索引 . 删除表和索引,需要使用 execSQL() 方法调用DROP INDEX 和 DROP TABLE 语句。
给表添加数据上面的代码,已经创建了数据库和表,现在需要给表添加数据。
有两种方法可以给表添加数据。
像上面创建表一样,你可以使用 execSQL() 方法执行 INSERT, UPDATE, DELETE 等语句来更新表的数据。
execSQL() 方法适用于所有不返回结果的 SQL 语句。
例如:db.execSQL("INSERT INTO widgets (name, inventory)"+"VALUES ('Sprocket', 5)");另一种方法是使用 SQLiteDatabase 对象的 insert(), update(), delete() 方法。
这些方法把 SQL 语句的一部分作为参数。
示例如下:ContentValues cv=new ContentValues();cv.put(Constants.TITLE, "example title");cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I);db.insert("mytable", getNullColumnHack(), cv);update()方法有四个参数,分别是表名,表示列名和值的 ContentValues 对象,可选的 WHERE 条件和可选的填充 WHERE 语句的字符串,这些字符串会替换WHERE 条件中的“?”标记。
update() 根据条件,更新指定列的值,所以用execSQL() 方法可以达到同样的目的。
WHERE 条件和其参数和用过的其他 SQL APIs 类似。
例如:String[] parms=new String[] {"this is a string"};db.update("widgets", replacements, "name=?", parms);delete() 方法的使用和 update() 类似,使用表名,可选的 WHERE 条件和相应的填充 WHERE 条件的字符串。
查询数据库类似 INSERT, UPDATE, DELETE,有两种方法使用 SELECT 从 SQLite 数据库检索数据。
1 .使用 rawQuery() 直接调用 SELECT 语句;使用 query() 方法构建一个查询。
∙Raw Queries正如 API 名字,rawQuery() 是最简单的解决方法。
通过这个方法你就可以调用 SQL SELECT 语句。
例如:Cursor c=db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' ANDname='mytable'", null);在上面例子中,我们查询 SQLite 系统表(sqlite_master)检查 table 表是否存在。
返回值是一个 cursor 对象,这个对象的方法可以迭代查询结果。
如果查询是动态的,使用这个方法就会非常复杂。
例如,当你需要查询的列在程序编译的时候不能确定,这时候使用 query() 方法会方便很多。
∙Regular Queriesquery() 方法用 SELECT 语句段构建查询。
SELECT 语句内容作为 query()方法的参数,比如:要查询的表名,要获取的字段名,WHERE 条件,包含可选的位置参数,去替代 WHERE 条件中位置参数的值,GROUP BY 条件,HAVING 条件。
除了表名,其他参数可以是 null。
所以,以前的代码段可以可写成:String[] columns={"ID", "inventory"};String[] parms={"snicklefritz"};Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);使用游标不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:通过使用 getCount() 方法得到结果集中有多少记录;通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;通过 getColumnNames() 得到字段名;通过 getColumnIndex() 转换成字段号;通过 getString(),getInt() 等方法得到给定字段当前记录的值;通过 requery() 方法重新执行查询得到游标;通过 close() 方法释放游标资源;例如,下面代码遍历 mytable 表Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable"); result.moveToFirst();while (!result.isAfterLast()) {int id=result.getInt(0);String name=result.getString(1);int inventory=result.getInt(2);// do something useful with theseresult.moveToNext();}图 2. SQLite Manager。