SQList

SQList,第1张

概述   数据库的增,删,改,查,  事务 *** 作---------           直接上项目: --com.itheima.db       MainActivity------------这个类在里没什么用的 public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInst

数据库的增,删,改,查,事务 *** 作---------

直接上项目:



--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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1171068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存