数据库的增,删,改,查,事务 *** 作---------
直接上项目:
--com.itheima.db
MainActivity------------这个类在里没什么用的
public class MainActivity extends Activity{
@OverrIDe
protected voID onCreate(Bundle savedInstanceState) {
// Todo auto-generated method stub
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.activity_main);
}
}
--com.itheima.db
PersonsqliteOPenHelper :
//public class PersonsqliteOPenHelper extends sqliteOpenHelper {
// public PersonsqliteOPenHelper(Context context,String name,
// CursorFactory factory,int version) {
// super(context,数据库创建在那个文件下
// name,数据库的名字
// factory,游标结果集 ---一般为null
// version);数据库的版本---不能小于1
// }
public class PersonsqliteOPenHelper extends sqliteOpenHelper {
private static final String TAG = "PersonsqliteOPenHelper";
/**
* 数据库的构造方法
* --用来定义数据库的名称
* --数据库查询的结果集
* --数据库的版本号-----
* @param context
* @param name
* @param factory
* @param version
*/
public PersonsqliteOPenHelper(Context context) {
//创建一个名字为person.db的数据库,版本为1
super(context,"person.db",null,1); // version 1版本号每次修改表结构是要改变数字2->3->4... 比如:插入一个字段或删除一个字段
}
/**
* 数据库第一次被创建时调用的方法
* @param db 被创建的数据库
*
*/
@OverrIDe
public voID onCreate(sqliteDatabase db) {
//初始化数据库的表结构
//db.execsql("create table person (ID integer primary//主键 key autoincrement//自增长,
// name varchar(20),
// number varchar(20))");
db.execsql("create table person(ID integer primary key autoincrement,name varchar(20),number varchar(20))");
}
/**
* 当数据库的版本号发生了变化的时候(增加的时候)调用
*/
@OverrIDe
//public voID onUpgrade(sqliteDatabase db,int oldVersion//旧数据库的版本,int newVersion//新数据库的版本)
public voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
Log.i(TAG,"数据库的版本变化了....");
//修改 ------ 改 表结构 人类(表) 加一个账户的字段------>上面的版本号version要改变(每次修改时)
db.execsql("alter table person add account varchar(20)");
}
}
--com.itheima.db.dao
PersonDao:
/// *** 作数据库的类---Dao
public class PersonDao {
//拿到数据库的实例
private PersonsqliteOPenHelper helper;
//在构造方法里面 完成helper的初始化
public PersonDao(Context context){
helper = new PersonsqliteOPenHelper(context);
}
/**
* 添加一条记录到数据库
* @param name 姓名
* @param number 电话
*/
public voID add(String name,String number){
//拿到数据库,让数据库具有可写的 *** 作
sqliteDatabase db = helper.getWritableDatabase();
//这样写容易出错---不推荐
//db.execsql("insert into person (name,number) values ('zhangsan','110')");
//推荐---用占位符的方式写
//db.execsql(sql //要执行的语句,bindArgs //数组)
db.execsql("insert into person (name,number) values ( ?,?)",new Object[]{name,number});
db.close();
}
/**
* 查询记录是否存在
* @param name 姓名
* @param true 存在 false 不存在
*/
public boolean find(String name){
//因为是查询,所以拿到数据库,然后让数据库具有可读的 *** 作
sqliteDatabase db= helper.getReadableDatabase();
//db.rawquery(sql,selectionArgs//字符串数组)
// 返回一个游标(用游标接收)
Cursor cursor=db.rawquery("select * from person where name= ?",new String[]{name});
// 指向下一个的时候才显示真实值(结果)
boolean result= cursor.movetoNext(); //指向下一个才显示真实值(结果)---用布尔值接收(有没有返回)
//关闭游标
cursor.close();
//关闭数据库
db.close();
return result;
}
/**
* 修改一条记录
* @param name 要修改的人的姓名
* @param newnumber 新的号码
*/
public voID update(String name,String newnumber){
//拿到数据库,让数据库具有可写的 *** 作
sqliteDatabase db = helper.getWritableDatabase();
db.execsql("update person set number=? where name=?",new Object[]{newnumber,name});
db.close();
}
/**
* 删除一条记录
* @param name
*/
public voID delete(String name){
sqliteDatabase db= helper.getWritableDatabase();
db.execsql(" delete from person where name=?",new Object[]{name});
db.close();
}
/**
* 返回全部的数据库的信息
* @return
*/
public List<Person> findAll(){
sqliteDatabase db=helper.getReadableDatabase();
List<Person> persons= new ArrayList<Person>();
Cursor cursor=db.rawquery("select name,ID,number from person",null);
while (cursor.movetoNext()) {
//如果指定查询的字段,就不灵活----所以不推荐
// int ID= cursor.getInt(0); //第一列
// String name=cursor.getString(1);//第二列
// String number=cursor.getString(2);//第三列
//----------------------------------------------------
//推荐这种----直接标示要取的列(的字段)
int ID=cursor.getInt(cursor.getColumnIndex("ID"));
String name=cursor.getString(cursor.getColumnIndex("name"));
String number=cursor.getString(cursor.getColumnIndex("number"));
Person p= new Person(ID,name,number);
persons.add(p);
} //---end 全部查询
cursor.close();
db.close();
return persons;
}
}
--com.itheima.db.dao
PersonDao2
/// *** 作数据库的类---Dao //--------用系统API *** 作数据库
public class PersonDao2 {
//拿到数据库的实例
private PersonsqliteOPenHelper helper;
//在构造方法里面 完成helper的初始化
public PersonDao2(Context context){
helper = new PersonsqliteOPenHelper(context);
}
/**
* 添加一条记录到数据库
* @param name 姓名
* @param number 电话
* @return
*/
public long add(String name,String number,int money){
//拿到数据库,让数据库具有可写的 *** 作
sqliteDatabase db = helper.getWritableDatabase();
//db.execsql("insert into person (name,number});
//有自增长的时候不用管它了,可以为null
//db.insert(table //表名,nullColumnHack//允许为空值,values)
ContentValues values= new ContentValues();
//values.put(key,value)
values.put("name",name);
values.put("number",number);
values.put("money",money);
long ID=db.insert("person",values);
db.close();
return ID; //如果返回-1,表示失败了
}
/**
* 查询记录是否存在
* @param name 姓名
* @param true 存在 false 不存在
*/
public boolean find(String name){
//因为是查询,然后让数据库具有可读的 *** 作
sqliteDatabase db= helper.getReadableDatabase();
//Cursor cursor=db.rawquery("select * from person where name= ?",new String[]{name});
//db.query(table//查询的表名,
// columns//查询的列,填null表示全部的列,
// selection//查询的条件的占位符,
// selectionArgs,//查询的条件对应的数组
// groupBy,//分组查询,这里没用到 ---null
// having,// 这里没用到 ---null
// orderBy)//排序,这里没用到 ---null
Cursor cursor =db.query("person","name=?",new String[]{name},null);
boolean result= cursor.movetoNext(); //指向下一个才显示真实值(结果)---用布尔值接收(有没有返回)
cursor.close();
db.close();
return result;
}
/**
* 修改一条记录
* @param name 要修改的人的姓名
* @param newnumber 新的号码
* @return
*/
public int update(String name,让数据库具有可写的 *** 作
sqliteDatabase db = helper.getWritableDatabase();
//db.execsql("update person set number=? where name=?",name});
//ContentValues: 是一个Map的集合
ContentValues values=new ContentValues();
values.put("number",newnumber);
//db.update(table,values,whereClause//要修改的条件,whereArgs//对应参数)
//返回行数
int number=db.update("person",new String[]{newnumber});
db.close();
return number;
}
/**
* 删除一条记录
* @param name
* @return
*/
public int delete(String name){
sqliteDatabase db= helper.getWritableDatabase();
//db.execsql(" delete from person where name=?",new Object[]{name});
//db.delete(table,whereClause,whereArgs)
int number=db.delete("person",new String[]{name});
db.close();
return number;
}
/**
* 返回全部的数据库的信息
* @return
*/
public List<Person> findAll(){
sqliteDatabase db=helper.getReadableDatabase();
List<Person> persons= new ArrayList<Person>();
//Cursor cursor=db.rawquery("select name,null);
//db.query(table,columns//所要查询的内容,selection,selectionArgs,groupBy//--null,having//--null,orderBy//--null);
Cursor cursor=db.query("person",new String[]{"name","ID","number"},null);
while (cursor.movetoNext()) {
//如果指定查询的字段,number);
persons.add(p);
} //---end 全部查询
cursor.close();
db.close();
return persons;
}
}
--com.itheima.db.domain
Person:
///人类
public class Person {
private int ID;
private String name;
private String number;
public Person() {
}
// 创建实例的时候调用
public Person(int ID,String number) {
this.ID = ID;
this.name = name;
this.number = number;
}
public int getID() {
return ID;
}
public voID setID(int ID) {
this.ID = ID;
}
public String getname() {
return name;
}
public voID setname(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public voID setNumber(String number) {
this.number = number;
}
@OverrIDe
public String toString() {
return "Person [ID=" + ID + ",name=" + name + ",number=" + number
+ "]";
}
}
--com.itheima.db.test
TestPersonDB
//--------------测试类--------------------------------
//-----------测试PersonDao2 时,直接把PersonDao该为PersonDao2
public class TestPersonDB extends AndroIDTestCase {
public voID testCreateDB() throws Exception{
PersonsqliteOPenHelper helper= new PersonsqliteOPenHelper(getContext());
//让数据库可写 *** 作
//helper.getWritableDatabase();
//拿到数据库
sqliteDatabase db = helper.getWritableDatabase();
}
///添加
public voID testAdd() throws Exception{
PersonDao2 dao= new PersonDao2(getContext());
dao.add("wangwu","123",5000);
dao.add("zhangsan","321",5000);
}
///查找-------如果还没添加 (wangwu)会报错!!!!
public voID testFind() throws Exception{
PersonDao2 dao= new PersonDao2(getContext());
boolean result=dao.find("wangwu");
//断言
//assertEquals(expected //预期的,actual//真实的);
assertEquals(true,result);
}
public voID testUpdate() throws Exception{
PersonDao2 dao= new PersonDao2(getContext());
dao.update("wangwu","321");
}
///删除
public voID testDelete() throws Exception{
PersonDao2 dao= new PersonDao2(getContext());
dao.delete("wangwu");
}
///查询全部
public voID findAll() throws Exception{
PersonDao2 dao= new PersonDao2(getContext());
List<Person> persons=dao.findAll();
for (Person p : persons) {
System.out.println(p.toString());
}
}
public voID testTransaction() throws Exception{
PersonsqliteOPenHelper helper= new PersonsqliteOPenHelper(getContext());
sqliteDatabase db= helper.getWritableDatabase();
//开始数据库的事务
db.beginTransaction();
try {
db.execsql("update person set account= account-1000 where name = ?",new Object[]{"zhangsan"});
db.execsql("update person set account= account+1000 where name = ?",new Object[]{"wangwu"});
//标记数据库事务执行成功
db.setTransactionSuccessful();
}catch(Exception e){
e.printstacktrace();
}
finally {
db.endTransaction();
db.close();
}
}
}
AndroIDManifest.xml
<?xml version="1.0" enCoding="utf-8"?>
<manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"
package="com.itheima.db"
androID:versionCode="1"
androID:versionname="1.0" >
<instrumentation
androID:name="androID.test.InstrumentationTestRunner"
androID:targetPackage="com.itheima.db" />
<uses-sdk
androID:minSdkVersion="8"
androID:targetSdkVersion="17" />
<application
androID:allowBackup="true"
androID:icon="@drawable/ic_launcher"
androID:label="@string/app_name"
androID:theme="@style/Apptheme" >
<uses-library androID:name="androID.test.runner" />
<activity
androID:name="com.itheima.db.MainActivity"
androID:label="@string/app_name" >
<intent-filter>
<action androID:name="androID.intent.action.MAIN" />
<category androID:name="androID.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
运行 在TestPersonDB类里面 光标放在增,查等方法名右键 逐个测试
生成的数据库在 data/data/ com.itheima.db下
总结
以上是内存溢出为你收集整理的SQList全部内容,希望文章能够帮你解决SQList所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)