创建数据库与完成数据增删改查(二)

创建数据库与完成数据增删改查(二)

数据增删改查

SQLite完成数据增删改查

A.使用SQLiteOpenHelper里的.getReadableDatabase()方法或.getWriteableDatabase()方法完成数据的增删改查

区别: 当数据库的磁盘空间满了,getWriteableDatabase()就不能用了,不能写数据,但可以读,就用getReadableDatabase()来读数据

用一个实例来说明SQLite的增删改查:
<span style="white-space:pre">	</span>package com.example.dao;


	import java.util.ArrayList;
	import java.util.List;
	import android.content.Context;
	import android.database.Cursor;
	import android.database.sqlite.SQLiteDatabase;
	import com.example.bean.Person;


	public class PersonDao {
		//DBOpenHelper这个类是创建数据库的类,在《创建数据库与完成数据添删改查(一)》中有
		private DBOpenHelper dbOpenHelper;
		
		public PersonDao(Context context) {
			super();
			this.dbOpenHelper = new DBOpenHelper(context);
		}
		
		/**
		 * 添加记录
		 * @param person
		 */
		public void save(Person person){
			//有一个缓存的特点
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			db.execSQL("insert into person(name, phone, amount) values(?,?,?)",
					new Object[]{person.getName(),person.getPhone(),person.getAmount()});
			
		}
		
		/**
		 * 删除记录
		 * @param id 记录id
		 */
		public void delete(Integer id){
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			db.execSQL("delete from person where personid=?",
					new Object[]{id});
			
		}
		
		/**
		 * 更新记录
		 * @param person
		 */
		public void update(Person person){
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			db.execSQL("update person set name=?,phone=?,amount=? where personid=?", 
					new Object[]{person.getName(),person.getPhone(), person.getAmount(),person.getId()});
		}
		
		/**
		 * 查询记录
		 * @param id 记录Id
		 * @return
		 */
		public Person find(Integer id){
			SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
			//Cursor游标对象,专门对返回的结果集进行随机访问
			Cursor cursor = db.rawQuery("select * from person where personid=?", 
					new String[]{id.toString()});
			
			if(cursor.moveToFirst()){ //若有数据,就返回true,否则false
				//cursor.getInt(字段在结果集中的索引号)
				//索引号 cursor.getColumnIndex(columnName)根据字段名得到字段索引
				int personid = cursor.getInt(cursor.getColumnIndex("personid"));
				int amount = cursor.getInt(cursor.getColumnIndex("amount"));
				
				String name = cursor.getString(cursor.getColumnIndex("name"));
				String phone = cursor.getString(cursor.getColumnIndex("phone"));
			
				return new Person(personid,name,phone,amount);
			}
			//
			cursor.close();
			return null;
		}
		
		/**
		 * 进行分页 (分页获取记录)
		 * @param offset 跳过前面多少条记录
		 * @param maxResult 每页获取多少条记录
		 * @return
		 */
		
		public List<Person> getScrollData(int offset,int maxResult){
			List<Person> personList = new ArrayList<Person>();
			
			SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
			Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?", 
					new String[]{String.valueOf(offset),String.valueOf(maxResult)});
			
			while(cursor.moveToNext()){
				int personid = cursor.getInt(cursor.getColumnIndex("personid"));
				int amount = cursor.getInt(cursor.getColumnIndex("amount"));
				
				String name = cursor.getString(cursor.getColumnIndex("name"));
				String phone = cursor.getString(cursor.getColumnIndex("phone"));
				
				personList.add(new Person(personid, name, phone, amount));
			}
			
			cursor.close();
			return personList;
		}
		
		/**
		 * 取得记录总数
		 * @return
		 */
		public long getCount(){
			SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
			Cursor cursor = db.rawQuery("select count(*) from person", null);
			cursor.moveToFirst();
			long result = cursor.getLong(0);
			cursor.close();
			return result;
		}
		
		
		/**
		 * 实现事务   :转账
		 */
		public void payment(){
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			//要创建一个事务
			db.beginTransaction(); //开启事务
			//确保endTransaction会执行
			try{
				db.execSQL("update person set amount=amount-10 where personid=29");
				db.execSQL("update person set amount=amount+10 where personid=30");
				db.setTransactionSuccessful(); //设置事务的标志为true
			}finally{
				db.endTransaction();  //结束事务,有两种情况:commit,rollback,
			}
			//事务的提交或回滚是由事务的标志决定的,
			//true:事务就会提交,false:回滚(默认)
		}
	}


除了前面介绍的execSQL()和rawQuery方法,SQLiteDatabase还专门提供了对应添加,删除,更新,查询的操作方法:insert(),delete(),update(),query()这些方法是给菜鸟使用的,对熟悉sql的程序员来说,就只要用execSQL()和rawQuery()方法就行了,当然还是用一下看看:
B.使用insert(),delete(),update(),query()方法完成数据的增删改查
<span style="white-space:pre">	</span>package com.example.dao;


	import java.util.ArrayList;
	import java.util.List;


	import android.R.id;
	import android.content.ContentValues;
	import android.content.Context;
	import android.database.Cursor;
	import android.database.sqlite.SQLiteDatabase;


	import com.example.bean.Person;


	public class OtherPersonDao {
		private DBOpenHelper dbOpenHelper;
		
		public OtherPersonDao(Context context) {
			super();
			this.dbOpenHelper = new DBOpenHelper(context);
		}


		/**
		 * 使用insert添加记录
		 * @param person
		 */
		public void save(Person person){
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			//insert(String table, String nullColumnHack, ContentValues values)
			//insert(表的名称,空值字段,值集合)
			//如何用户传入的值为null或者为空集合,就会用到第二个参数了,填入字段(也可以是主键)
			ContentValues values = new ContentValues();
			values.put("name", person.getName());
			values.put("phone", person.getPhone());
			values.put("amount", person.getAmount());
			db.insert("person", null, values);
		}
		
		/**
		 * 使用delete删除记录
		 * @param id 记录id
		 */
		public void delete(Integer id){
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			//delete(表的名称, where关键字后的内容, ?参数)
			db.delete("person", "personid=?", new String[]{id.toString()});
		}
		
		/**
		 * 使用update更新记录
		 * @param person
		 */
		public void update(Person person){
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			//update(String table, ContentValues values, String whereClause, String[] whereArgs)
			//update(表的名称, ContentValues值集合, where关键字后的内容, ?参数)
			ContentValues values = new ContentValues();
			values.put("name", person.getName());
			values.put("phone", person.getPhone());
			values.put("amount", person.getAmount());
			db.update("person", values, "personid=?", new String[]{person.getId().toString()});
		}
		
		/**
		 * 使用select查询记录
		 * @param id 记录Id
		 * @return
		 */
		public Person find(Integer id){
			SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
			//db.query(表的名称, 要查询的字段列表 如果为null就相当于*,
			// where关键字后的内容, ?参数, groupBy后的语句, having后的语句, orderBy后的语句)
			Cursor cursor = db.query("person", new String[]{"personid","name","phone"},
					"personid=?", new String[]{id.toString()}, null, null, null);
			
			if(cursor.moveToFirst()){
				int personid = cursor.getInt(cursor.getColumnIndex("personid"));
				int amount = cursor.getInt(cursor.getColumnIndex("amount"));
				String name = cursor.getString(cursor.getColumnIndex("name"));
				String phone = cursor.getString(cursor.getColumnIndex("phone"));
			
				return new Person(personid,name,phone,amount);
			}
			cursor.close();
			return null;
		}
		
		/**
		 * 进行分页 (分页获取记录)
		 * @param offset 跳过前面多少条记录
		 * @param maxResult 每页获取多少条记录
		 * @return
		 */
		
		public List<Person> getScrollData(int offset,int maxResult){
			List<Person> personList = new ArrayList<Person>();
			
			SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
			Cursor cursor = db.query("person", null, null, null, null, null, "personid", offset+","+maxResult);
			
			while(cursor.moveToNext()){
				int personid = cursor.getInt(cursor.getColumnIndex("personid"));
				int amount = cursor.getInt(cursor.getColumnIndex("amount"));
				String name = cursor.getString(cursor.getColumnIndex("name"));
				String phone = cursor.getString(cursor.getColumnIndex("phone"));
				
				personList.add(new Person(personid, name, phone,amount));
			}
			
			cursor.close();
			return personList;
		}
		
		/**
		 * 取得记录总数
		 * @return
		 */
		public long getCount(){
			SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
			Cursor cursor = db.query("person", new String[]{"count(*)"}, null, null, null, null, null);
			
			cursor.moveToFirst();
			long result = cursor.getLong(0);
			cursor.close();
			return result;
		}
		
	}


以上两个方法都可以实现数据的增删改查











































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt提供了一套功能强大的数据库模块用于对数据进行增删改查操作。通过Qt的数据库模块,我们可以方便地连接和操作各种类型的数据库,如MySQLSQLite、Oracle等。 在Qt中,我们首先需要使用QSqlDatabase类来创建数据库连接。可以通过给定数据库类型、主机名、端口号、数据库名称、用户名和密码等信息来获取一个数据库连接对象。 接下来,我们需要使用QSqlQuery类来执行数据库操作语句,如增加(插入)、删除、修改(更新)和查询操作。QSqlQuery除了可以执行SQL语句,还可以获取查询结果集等操作。通过调用exec()函数可以执行SQL语句,并通过lastError()函数可以获取执行过程中的错误信息。 对于增加操作,我们可以使用INSERT INTO语句将数据插入到数据库表中。可以通过setValuse()函数来绑定参数的值,然后通过调用exec()函数执行INSERT语句。 对于删除操作,我们可以使用DELETE FROM语句来删除数据库表中的数据。可以通过WHERE子句来指定删除条件,通过调用exec()函数执行DELETE语句。 对于修改操作,我们可以使用UPDATE语句来更新数据库表中的数据。可以通过SET子句来设置更新的字段和值,通过WHERE子句来指定更新条件。同样,通过调用exec()函数执行UPDATE语句。 对于查询操作,我们可以使用SELECT语句来从数据库表中检索数据。通过调用exec()函数执行SELECT语句后,可以通过next()函数依次访问查询结果集,并通过value()函数获取相应字段的值。 除了以上常用的操作,Qt还提供了各种其他数据库操作函数和类,如事务处理、预处理语句等,以满足不同需求。在操作完数据库后,我们需要关闭数据库连接,通过调用close()函数实现。 总之,Qt数据库模块提供了简单易用的接口,使得我们可以方便地对数据进行增删改查操作,有效地管理和操作数据库。 ### 回答2: Qt是一款跨平台的开源C++开发框架,提供了丰富的数据库操作功能,可以方便地对数据进行增删改查操作。 首先,连接数据库。使用Qt提供的QSqlDatabase类,可以连接多种类型的数据库,如MySQLSQLite等。通过设置数据库的连接参数,如主机名、用户名、密码等,可以连接到数据库服务器。 接下来,进行数据的增加。通过执行SQL INSERT语句,可以将新的记录插入到数据库表中。首先,创建QSqlQuery对象,然后调用exec()方法执行INSERT语句,即可将数据插入到数据库中。 然后,进行数据的查询。使用SELECT语句可以从数据库中检索出所需的数据。同样,通过创建QSqlQuery对象,调用exec()方法执行SELECT语句,可以获取查询结果。通过遍历结果集,可以获取到每一条记录的数据。 进行数据的修改。使用UPDATE语句可以修改数据库中的记录。同样,通过创建QSqlQuery对象,调用exec()方法执行UPDATE语句,即可对数据库进行修改。 最后,进行数据的删除。使用DELETE语句可以从数据库中删除记录。同样,通过创建QSqlQuery对象,调用exec()方法执行DELETE语句,即可删除数据库中的数据。 总之,Qt提供了方便易用的数据库操作功能,可以通过简单的代码实现数据增删改查。开发者只需了解基本的SQL语句和Qt的数据库操作接口,就可以轻松处理各种数据库操作需求。 ### 回答3: Qt是一个强大的跨平台开发框架,它提供了Qt Sql模块,用于对数据库进行增删改查操作。 1. 增加数据:可以通过Qt提供的QSqlQuery类来执行SQL语句实现数据的插入操作。首先,创建一个QSqlQuery对象,然后使用exec()方法执行插入数据SQL语句。 2. 删除数据:同样可以使用QSqlQuery类来执行SQL语句实现数据的删除操作。创建QSqlQuery对象,然后使用exec()方法执行删除数据SQL语句。 3. 修改数据:通过QSqlQuery类,可以执行SQL语句实现数据的修改操作。创建一个QSqlQuery对象,然后使用exec()方法执行修改数据SQL语句。 4. 查询数据:Qt提供了QSqlQuery类来执行SQL语句实现数据的查询操作。首先,创建一个QSqlQuery对象,然后使用exec()方法执行查询数据SQL语句。可以通过next()方法迭代获取查询结果集中的各条数据,并可以通过value()方法获取具体的字段值。 在进行数据库操作前,需要先建立数据库连接。Qt提供了QSqlDatabase类来管理数据库连接,可以使用addDatabase()方法创建一个数据库连接对象,然后使用setHostName()、setDatabaseName()、setUserName()、setPassword()等方法设置连接信息,最后使用open()方法打开数据库连接。 同样,数据增删改查操作完成后,需要及时关闭数据库连接,以释放资源。可以使用QSqlDatabase类的close()方法关闭数据库连接。 总结:Qt提供了丰富的类和方法,用于对数据库进行增删改查操作。开发者可以根据具体的需求,利用Qt的数据库模块灵活地操作数据库,实现各种数据处理功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值