设为首页 收藏本站
查看: 1165|回复: 0

[经验分享] sqlite两种方式实现增删改查

[复制链接]

尚未签到

发表于 2016-11-30 11:24:03 | 显示全部楼层 |阅读模式
  sqlite有两种方式操作数据库:
  第一种就是像oracle一样直接写sql语句
  第二种就是借助工具,只写关键代码
  下面将对这两种方式进行演示:
  
DSC0000.jpeg
 
  1,在xml中创建按钮,进行 查询和 固定的删除,修改,添加, 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="130dp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginLeft="18dp"
android:layout_marginTop="44dp"
android:
android:text="添加" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button1"
android:layout_marginLeft="46dp"
android:layout_toRightOf="@+id/button1"
android:
android:text="删除" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="22dp"
android:
android:text="修改" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button3"
android:layout_alignBottom="@+id/button3"
android:layout_alignLeft="@+id/button2"
android:
android:text="查询" />
</RelativeLayout>
  
  2,创建数据库的表的类

public class HelperDemo extends SQLiteOpenHelper{
public HelperDemo(Context context, String name, CursorFactory factory,
int version) {
//参数一:上下文
//参数二:数据库的名字
//参数三:游标 没有游标就为null
//参数四:数据库的版本号 版本号不能小于当前的版本号
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
String sql="create table user(_id integer primary key autoincrement,userphone txet,username text)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}

  
  分析:
  创建数据库 需要继承SQLiteOpenHelper 并重写里面的onCreate()和onUpgrade()方法;
  onCreate()方法;创建表   回调函数  在程序执行时需要操作该表时,如发现没有该表就会回调onCreate方法创建表;该方法只会执行一次
  onUpgrade();当版本号更新时,会回调该函数
  3,实现增删改查的操作(两种方式);

/**
*
* @author Administrator 数据库的操作
*/
public class DemoDB extends Activity {
//v1显示查询的结果
//t1,t2,t3,t4分别是增删改查按钮
private TextView v1;
private Button t1;
private Button t2;
private Button t3;
private Button t4;
private HelperDemo demo; 获取数据库对象
private SQLiteDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_db);
//实例化数据库对象
demo = new HelperDemo(this, "user_contacts", null, 1);
//获得xml的组件
v1 = (TextView) this.findViewById(R.id.textView1);
t1 = (Button) this.findViewById(R.id.button1);
t2 = (Button) this.findViewById(R.id.button2);
t3 = (Button) this.findViewById(R.id.button3);
t4 = (Button) this.findViewById(R.id.button4);
}
// 数据库的操作
public void optionuser(View v) {
switch (v.getId()) {
case R.id.button1:// 添加数据
database = demo.getWritableDatabase(); //获得写数据的对象
//判断是否可以写数据等操作
if (database == null) {
Toast.makeText(this, "不能添加数据", Toast.LENGTH_SHORT).show();
} else {
// 第一个方式
String sql = "insert into user values(null,'12345','长沙')";
database.execSQL(sql);
// 第二种方式
// 参数一:表名
// 参数二:null
// 参数三:使用ContentValues赋值
// ContentValues values = new ContentValues();
// values.put("userphone", "123");
// values.put("username", "value");
//
// database.insert("user", null, values);
selectuser();
}
break;
case R.id.button2:// 删除
database = demo.getWritableDatabase();
if (database == null) {
Toast.makeText(this, "不能删除数据数据", Toast.LENGTH_SHORT).show();
} else {
// //第一种方式
// String sql ="delete from user where _id=?";
// String[] str= {"1"};
// database.execSQL(sql, str);
// 第二种方式
// 参数一:表名
// 参数二:条件
// 参数三:条件的值
String whereClause = "_id=?";
String[] whereArgs = { "2" };
database.delete("user", whereClause, whereArgs);
}
selectuser();
break;
case R.id.button3:// 修改
database = demo.getWritableDatabase();
if (database == null) {
Toast.makeText(this, "不能修改数据", Toast.LENGTH_SHORT).show();
} else {
// 第一种方式
// String sql="update user set username='武汉' where _id=6";
// database.execSQL(sql);
// 参数一:表名
// 参数二:更新的值
// 参数三:?的字段名
// 参数四:?字段名的值
ContentValues values = new ContentValues();
values.put("username", "北京");
String whereClause = "_id=?";
String[] whereArgs = { "5" };
database.update("user", values, whereClause, whereArgs);
}
selectuser();
break;
case R.id.button4:// 查询
selectuser();
break;
}
}
// 查询
public void selectuser() {
SQLiteDatabase database2 = demo.getReadableDatabase();
//// 第一种方式
//String sql = "select * from user order by _id desc";
//Cursor c = database2.rawQuery(sql, null);
//StringBuffer buffer = new StringBuffer();
//while (c.moveToNext()) {
//int id = c.getInt(c.getColumnIndex("_id"));
//String phone = c.getString(c.getColumnIndex("userphone"));
//String name = c.getString(c.getColumnIndex("username"));
//buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n");
//}
//v1.setText(buffer);
//第二种方式
//参数一:表名
//查询数据会返回一个游标对象,遍历游标对象就得到值
Cursor c=database2.query("user", null, null, null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (c.moveToNext()) {
int id = c.getInt(c.getColumnIndex("_id"));
String phone = c.getString(c.getColumnIndex("userphone"));
String name = c.getString(c.getColumnIndex("username"));
buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n");
}
v1.setText(buffer);
}
}

  
  分析:
  增删改;需要判断数据库的表是否可以进行写的操作;
  database = demo.getWritableDatabase();
  if (database == null) {
  Toast.makeText(this, "不能修改数据", Toast.LENGTH_SHORT).show();
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307690-1-1.html 上篇帖子: 使用OrmLite持久化SQLite(续) 下篇帖子: 边学边做ROR(查看sqlite表结构方法)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表