//MainActivity的类
package com.hq.method2;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UserDao dao=new UserDao(this);
// dao.add();
// dao.delete(1);
// dao.update(2);
dao.quary(4);

}

}
//数据库的连接类
package com.hq.method2;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MySQli extends SQLiteOpenHelper{

public MySQli(Context context) {
//super继承了父类的构造方法,其中数据库的名字要.db结尾
super(context, "person.db",null, 1);

}
//此方法只调用一次,当person.db的数据库创建了,就不会调用此方法了,所有要修改表的结构,那就要设置版本号,把创建表的方法写到update方法中
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user(id integer primary key autoincrement,name text,num text,qq text,Emile text)");

}
//此方法,只有当创建表的版本号改变时才调用此方法,所有可以用来更新表的结构
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//db.execSQL("create table user2(id integer primary key autoincrement,name text,num text,qq text,Emile text)");
}

}
//数据库得到操作类

package com.hq.method2;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class UserDao {
MySQli my;
UserDao(Context context){
my=new MySQli(context);

}
public void add(){
SQLiteDatabase base=my.getWritableDatabase();
/**
* insert(table, nullColumnHack, values)的方法的参数:
* 1 table参数表示的是表名
* 2 nullColumnHack参数表示的是:如果没有字段eg:insert into user()values(),那就设置一个默认的字段
* 3 values参数:是ContentValues的类型,其中类似于HashMap,put(key,value)存放的是名值对,key值表示的是存放的是表的字段名
* value值是表中的字段名的值
*
*/
ContentValues values=new ContentValues();
values.put("name", "huangqin");
values.put("num", "123");
values.put("qq", "1234");
values.put("Emile", "@");
base.insert("user", null, values);
}
public void delete(int id){
/**
*
这里的my.getWritableDatabase()的方法不会重新得到,在其方法中实现了,如果已经实现了SQLiteDatabas的对象了,就不
*会创建新的对象,而是使用创建好的,如果没有,就会创建新的SQLiteDatabase的对象
*delete from user where id=1;
*delete(table, whereClause, whereArgs);此方法的参数:
*第一个参数表示的是:表名
*whereClause:表示的是where后面的条件(不要where),eg,id
*whereAys参数表示的是:where条件后面的值(?的值)eg:1
* ""+id 表示的是id拼接成字符串,跟字符串相加的,都装换字符串
*/
SQLiteDatabase base=my.getWritableDatabase();
base.delete("user", "id=?", new String[]{id+""});
System.out.println("删掉成功");

}
//更新
public void update(int id){
SQLiteDatabase data=my.getReadableDatabase();
/**
* update user set name=? where id=?
* 参数1:表名
* 参数2:名值对,set后面的语句,把字段(key)设置什么值(value)eg,name=?
* 参数3:表示的是条件where后面的(不要where)eg,id=?
* 参数4:表示的是?的值
*/
ContentValues values=new ContentValues();
values.put("name", "haung大大");
data.update("user", values, "id=?", new String[]{String.valueOf(id)});
}
//查询
public void quary(int id){
SQLiteDatabase base=my.getReadableDatabase();
String[] columns={"name","num"};
String selection="id=?";
String[] selectionArgs={String.valueOf(id)};
/*select * from user where id=?
* *参数1:表名
* 参数2:要查询的列,如果写null值表示是查询所有的列*
* 参数3:查询的条件,eg.id=?
* 参数4:查询条件的值:id=3;
* 参数5:分组查询的字段
* 参数6;分组查询的条件
* 参数7:排序
*/
Cursor cr=base.query("user", columns, selection, selectionArgs, null, null, "id desc");
//要进行判断,才能执行下一次的语句(cr.moveToNext()),否则,就执行一条语句
if(cr.moveToNext()){
//+cr.getString(cr.getColumnIndex("name") 表示的意思是通过列名得到所在是索引cr.getColumnIndex("name"),然后通过索引得到值
System.out.println("查询我没有:"+cr.getString(cr.getColumnIndex("name")));
}else{
System.out.println("没有此记录!!!!!!");
}

//在查询中,要关闭
base.close();
cr.close();

}

}

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. mybatisplus的坑 insert标签insert into select无参数问题的解决
  3. Python技巧匿名函数、回调函数和高阶函数
  4. Python list sort方法的具体使用
  5. python list.sort()根据多个关键字排序的方法实现
  6. android上一些方法的区别和用法的注意事项
  7. android实现字体闪烁动画的方法
  8. Android中dispatchDraw分析
  9. Android四大基本组件介绍与生命周期

随机推荐

  1. Android: 判断网络连接状态及连接类型
  2. [置顶] Android GridView
  3. android webview显示HTML代码
  4. Android -- 跳转应用市场评分
  5. Aosp build mini_emulator_x86_64-userde
  6. 【Android】Vibrator(震动模式)设置长短
  7. Android(安卓)Dex:com.android.dex.DexEx
  8. android8.0 反射Application 启动过程
  9. Android 6.0、7.0、8.0、9.0适配
  10. 【Android实战】Android中处理崩溃异常