数据库

本文详细介绍如何使用SQLite数据库进行基本操作,包括创建数据库、表格及执行增删改查等操作。并提供具体代码示例,帮助读者理解SQLite数据库的使用方法。

创建数据库

>sqlite数据库 轻量级嵌入式的数据库

//1.声明数据库的文件类
		MyDBOpenHelper helper = new MyDBOpenHelper(this);
		//2.关键代码,必须通过帮助类 获取一个数据库文件  数据库文件才被创建出来
		helper.getWritableDatabase();
/**
 * 数据库创建的帮助类 类似文件File类
 */
public class MyDBOpenHelper extends SQLiteOpenHelper {
	
	
	public MyDBOpenHelper(Context context) {
		//第二个参数:数据库文件的名称
		//第三个参数: null 代表的是默认的游标(索引)工厂(控制索引)
		//第四个参数:是数据库的版本号  数据库只能升级,不能降级,版本号只能变大不能变小
		super(context, "test.db", null, 1); 
	}

	//Called when the database is created for the first time.
	//当数据库第一次被创建的时候调用的方法,适合在这个方法里面把数据库的表结构定义出来.
	@Override
	public void onCreate(SQLiteDatabase db) { //db:当前的数据库
		System.out.println("oncreate 数据库被创建了------------");
		//执行sql语句
		db.execSQL("create table contactinfo (id integer primary key autoincrement, name varchar(20), phone varchar(20))");
		//创建联系人的信息表,表名contactinfo 
		//id:integer 整型 primary key 主键 autoincrement 自增长
		//name:varchar(20)长度为20的字符串
	}

	//Called when the database needs to be upgraded.
	//当数据库更新的时候调用的方法  如果旧的数据库表结构定义的不是特别合理,修改数据库的表结构
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		System.out.println("onUpgrade 数据库被更新了. oldVersion:"+oldVersion+"----newVersion:"+newVersion+"----");
		db.execSQL("alter table contactinfo add account varchar(20)");
		//修改表  增加一列
	}
}

增删改查的sql语句
1.增
	insert into contactinfo (name,phone) values(‘zhangsan’,‘110’)
	//添加一条记录  姓名zhangsan 电话110
2.删
	delete from contactinfo where id=‘1’
3.改
	update contactinfo set phone=‘119’where name=‘zhangsan’
	//修改zhangsan的电话号码为119
4.查
	select phone from contactinfo where name=‘zhangsan’
	//查询zhangsna的电话号码

/**
 * 联系人数据库表的访问类  Dao 数据的访问存储
 */
public class ContactInfoDao {
	/**
	 * 数据库打开的帮助类
	 */
	private MyDBOpenHelper helper;
	
	/**
	 * 在构造方法里面完成 必须要用的类的初始化
	 * @param context
	 */
	public ContactInfoDao(Context context) {
		helper = new MyDBOpenHelper(context);
	}

	/**
	 * 添加一条记录
	 * @param name 联系人姓名
	 * @param phone 联系人电话
	 */
	public void add(String name, String phone){
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("insert into contactinfo (name,phone) values (?,?)", new Object[]{name,phone});
		// ? 占位符
		//记得释放数据库资源
		db.close();
	}

	/**
	 * 根据姓名删除一条记录
	 * @param name 要删除的联系人的姓名
	 */
	public void delete(String name){
		//判断这个数据是否存在.
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("delete from contactinfo where name=?", new Object[]{name});
		db.close();
		//再从数据库里面查询一遍,看name是否还在
	}
	/**
	 * 修改联系人电话号码
	 * @param newphone 新的电话号码
	 * @param name 要修改的联系人姓名
	 */
	public void update(String newphone , String name){
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("update contactinfo set phone =? where name=?", new Object[]{newphone,name});
		db.close();
	}
	/**
	 * 查询联系人的电话号码
	 * @param name 要查询的联系人
	 * @return 电话号码
	 */
	public String getPhoneNumber(String name){
		String phone = null;
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor  cursor = db.rawQuery("select phone from contactinfo where name=?", new String[]{name});
		//cursor 指向数据库的第0行 id name phone 等头
		if(cursor.moveToNext()){//如果光标可以移动到下一位,代表就是查询到了数据
			phone = cursor.getString(0); //假如第0列是phone
		}
		cursor.close();//关闭掉游标,释放资源
		db.close();//关闭数据库,释放资源
		return phone;
	}
}

private ContactInfoDao dao;

dao = new ContactInfoDao(this);

//添加一条联系人的信息
dao.add("aaa", "123");

//删除一条记录
dao.delete("aaa");

//修改联系人的号码
dao.update("bbb", "321");

//查询
String phone = dao.getPhoneNumber("bbb");
--------------------------------------------------------------------
/**
 * 联系人数据库表的访问类  Dao 数据的访问存储
 */
public class ContactInfoDao {
	/**
	 * 数据库打开的帮助类
	 */
	private MyDBOpenHelper helper;
	
	/**
	 * 在构造方法里面完成 必须要用的类的初始化
	 * @param context
	 */
	public ContactInfoDao(Context context) {
		helper = new MyDBOpenHelper(context);
	}

	/**
	 * 添加一条记录
	 * @param name 联系人姓名
	 * @param phone 联系人电话
	 * @return 返回的是添加后在数据库的行号  返回-1代表添加失败
	 */
	public long add(String name, String phone){
		SQLiteDatabase db = helper.getWritableDatabase();
		/**db.execSQL("insert into contactinfo (name,phone) values (?,?)", new Object[]{name,phone});
		// ? 占位符*/
		ContentValues values = new ContentValues();
		values.put("name",name);
		values.put("phone",phone);
		//第一个参数:表名   values:要添加的数据     内部是通过组拼sql语句实现的
		long rowid = db.insert("contactinfo",null,values);
		//记得释放数据库资源
		db.close();
		return rowid;
	}

	/**
	 * 根据姓名删除一条记录
	 * @param name 要删除的联系人的姓名
	 * @return 返回0代表的是没有删除任何的记录  返回正数int值代表删除了几条数据
	 */
	public int delete(String name){
		//判断这个数据是否存在.
		SQLiteDatabase db = helper.getWritableDatabase();
		/**db.execSQL("delete from contactinfo where name=?", new Object[]{name});*/
		//第一个参数:表名   第二个参数:条件 第三个参数:具体的条件
		int rowcount= db.delete("contactinfo","name=?",new String[]{name});
		db.close();
		return rowcount;
	}
	/**
	 * 修改联系人电话号码
	 * @param newphone 新的电话号码
	 * @param name 要修改的联系人姓名
	 * @return 返回0代表的是一行也没有更新成功  返回正数int值代表更新了几行记录
	 */
	public int update(String newphone , String name){
		SQLiteDatabase db = helper.getWritableDatabase();
		/**db.execSQL("update contactinfo set phone =? where name=?", new Object[]{newphone,name});*/
		//第二个参数:要修改的数据
		ContentValues values = new ContentValues();
		values.put("phone",newphone);
		db.update("contactinfo",values,"name=?",new String[]{name});
		db.close();
		return rowcount;
	}
	/**
	 * 查询联系人的电话号码
	 * @param name 要查询的联系人
	 * @return 电话号码
	 */
	public String getPhoneNumber(String name){
		String phone = null;
		SQLiteDatabase db = helper.getReadableDatabase();
		/**Cursor  cursor = db.rawQuery("select phone from contactinfo where name=?", new String[]{name});
		//cursor 指向数据库的第0行 id name phone 等头*/
		//第二个参数:想获取的哪列的内容
		Cursor  cursor = db.query("contactinfo", new String[]{"phone"},"name=?",new String[]{name},null,null,null);
		if(cursor.moveToNext()){//如果光标可以移动到下一位,代表就是查询到了数据
			phone = cursor.getString(0); //假如第0列是phone
		}
		cursor.close();//关闭掉游标,释放资源
		db.close();//关闭数据库,释放资源
		return phone;
	}
}

private ContactInfoDao dao;

dao = new ContactInfoDao(this);

//添加一条联系人的信息
long id = dao.add("aaa", "123");
if(id==-1){
	//添加失败
}else{
	//添加成功 id为添加成功后在数据库中的行号
}

//删除一条记录
int count = dao.delete("aaa");//count==0删除失败   否则删除成功 删除了count行

//修改联系人的号码
int count = dao.update("bbb", "321");//count==0更新失败   否则更新成功 更新了count行记录

//查询
String phone = dao.getPhoneNumber("bbb");

/**
	 * 查询的逻辑
	 * 
	 * @param position
	 *            数据在数据库表里面的位置
	 * @return Map<数据库的列名,值>
	 */
	public Map<String, String> getStudentInfo(int position) {
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.query("info", new String[] { "studentid", "name",
				"phone" }, null, null, null, null, null);
		cursor.moveToPosition(position);
		String studentid = cursor.getString(0);//第0列是studentid
		String name = cursor.getString(1);//第1列是name
		String phone = cursor.getString(2);//第二列是phone
		cursor.close();
		db.close();
		Map<String, String> result = new HashMap<String, String>();
		result.put("studentid", studentid);
		result.put("name", name);
		result.put("phone", phone);
		return result;
	}

	/**
	 * 查询数据库里面一共有多少条记录

	 */
	public int getTotalCount() {
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.query("info", null, null, null, null, null, null);
		int count = cursor.getCount();
		cursor.close();
		db.close();
		return count;
	}



命令行中
sqlite3 aaa.db
select * from contactinfo;//列出contactinfo表中信息


修改cmd的默认编码
chcp 65001 改成utf-8的编码
chcp 936 改成gbk的编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值