Android中操作SQLite数据库
我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些功能就比较麻烦,比如EditText中的TextWatcher接口,一般查到的都是OnEditorActionListener接口。好了废话不多说,先割了他!!!!
------------------------咯咯---------------------咯咯------------------------------咯咯------------------------------
创建工程之后,建立一个包,主要是写SQLite的。
再来补充下背景,在这里,我在first这个包里写了两个类,这是因为我在弄两个activity的切换,不影响本实验,本实验是放在OtherActivity.java里面的进行的。
建立一个Sqlite.java的类,继承SQLiteOpenHelper。
public class Sqlite extends SQLiteOpenHelper{ private static final int VERSION = 1; public Sqlite(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO 自动生成的构造函数存根
}
public Sqlite(Context context,String name){
this(context,name,VERSION);
}
public Sqlite(Context context,String name,int version){
this(context, name,null,version);
} @Override
public void onCreate(SQLiteDatabase arg0) {
// TODO 自动生成的方法存根
System.out.println("create a Database");
//execSQL函数用于执行SQL语句
arg0.execSQL("create table user(id int,name varchar(20))");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 自动生成的方法存根
System.out.println("update a Database");
} }
在OtherActivity.java中加入这个包,
import com.yuyidong.db.Sqlite;
这里是布局,前面的TextView和Button(Call)请大家无视掉。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" > <TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test"
android:textSize="30sp" />
<Button
android:id="@+id/button_other"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Call"
/>
<Button
android:id="@+id/button_create"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Create"
/>
<Button
android:id="@+id/button_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Update"
/>
<Button
android:id="@+id/button_insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Insert"
/>
<Button
android:id="@+id/button_update_table"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Update_Table"
/>
<Button
android:id="@+id/button_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Query"
/> </LinearLayout>
接下来是申明已经添加到监听器中。
public class OtherActivity extends Activity{ private TextView text;
private Button button;
private Button createButton;
private Button insertButton;
private Button updateButton;
private Button updateRecordButton;
private Button queryButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other); Intent intenter = getIntent();
String value = intenter.getStringExtra("hello"); text = (TextView) findViewById(R.id.text);
text.setText(value);
button = (Button) findViewById(R.id.button_other);
buttonListener lisbtn = new buttonListener();
button.setOnClickListener(lisbtn); createButton = (Button) findViewById(R.id.button_create);
buttonListener createbtn = new buttonListener();
createButton.setOnClickListener(createbtn);
updateButton = (Button) findViewById(R.id.button_update);
buttonListener updatebtn = new buttonListener();
updateButton.setOnClickListener(updatebtn);
insertButton = (Button) findViewById(R.id.button_insert);
buttonListener insertbtn = new buttonListener();
insertButton.setOnClickListener(insertbtn);
updateRecordButton = (Button) findViewById(R.id.button_update_table);
buttonListener updatetablebtn = new buttonListener();
updateRecordButton.setOnClickListener(updatetablebtn);
queryButton = (Button) findViewById(R.id.button_query);
buttonListener querybtn = new buttonListener();
queryButton.setOnClickListener(querybtn); }
请大家继续无视掉Intent、text、button这三个对象。
接下来讲一讲Button的监听器里面发生的故事。红色的注释是主要的说明。
class buttonListener implements OnClickListener
{
private Button button_check;
private int version = 1;;
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
//将View的对象v转换成Button的
button_check = (Button) v;
//请无视掉这里,这个是转跳到发短信的Activity的Button的操作
if(button_check==button)
{
Uri uri = Uri.parse("smsto:10086");
Intent intenter = new Intent(Intent.ACTION_SENDTO,uri);
intenter.putExtra("sms_body", "Test good!");
startActivity(intenter);
}
//如果是按下的创建数据库的那个Button的话,执行
else if(button_check == createButton)
{
//创建一个Sqlite对象
Sqlite dbHelper = new Sqlite(OtherActivity.this,"yyd_test_db");
//只有调用了Sqlite对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
SQLiteDatabase db = dbHelper.getReadableDatabase();
//Toast显示调试
Toast.makeText(OtherActivity.this, "Create", Toast.LENGTH_SHORT).show();
}
else if(button_check == updateButton)
{
//每次更新后,数据库版本加1
version++;
Sqlite dbHelper = new Sqlite(OtherActivity.this,"yyd_test_db",version);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Toast.makeText(OtherActivity.this, "Update", Toast.LENGTH_SHORT).show();
}
else if(button_check == insertButton)
{
//生成ContentValues对象
ContentValues values = new ContentValues();
//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
values.put("id", 1);
values.put("name","zhangsan");
Sqlite dbHelper = new Sqlite(OtherActivity.this, "yyd_test_db", version);
SQLiteDatabase db = dbHelper.getWritableDatabase();
//调用insert方法,就可以将数据插入到数据库当中
db.insert("user", null, values);
Toast.makeText(OtherActivity.this, "Insert", Toast.LENGTH_SHORT).show();
}
else if(button_check == updateRecordButton)
{
//得到一个可写的SQLiteDatabase对象
Sqlite dbHelper = new Sqlite(OtherActivity.this, "yyd_test_db", version);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "zhangsanfeng");
//第一个参数是要更新的表名、第二个参数是一个ContentValeus对象、第三个参数是where子句
db.update("user", values, "id=?", new String[]{"1"});
Toast.makeText(OtherActivity.this, "Update_Table", Toast.LENGTH_SHORT).show();
}
else if(button_check == queryButton)
{
Sqlite dbHelper = new Sqlite(OtherActivity.this,"yyd_test_db");
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
//用cursor.moveToNext()判断是否还存在下一个,若存在返回真,不存在返回假。
while(cursor.moveToNext())
{
String name = cursor.getString(cursor.getColumnIndex("name"));
System.out.println("Get--->" + name);
}
}
}
}
不仅可以写程序操作SQLite,还可以用shell操作SQLite数据库。
在App程序里面创建了数据库之后才有了databases,登进去数据库,还是与一般关系型数据库还是有差别的。
总结一下,简短不割,SQLite在App中不提倡使用,因为他有时候会无缘无故的报错,因为我在测试的时候就经常发生,第一次把程序烧进去的时候,可以N次创建数据库同哟个数据库不报错,这就不说了,第二次打开的时候,无论点哪个Button都会直接程序崩溃,包括Insert,第一次的时候就不会,而且还可以查到数据表里面的信息,第二次就不行了,query也query不起了。很蛋疼。
转载请注明出处:http://www.cnblogs.com/yydcdut/p/3651977.html
Android中操作SQLite数据库的更多相关文章
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- android中与SQLite数据库相关的类
为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...
- android中滑动SQLite数据库分页加载
今天用到了android中滑动SQlit数据库分页加载技术,写了个测试工程,将代码贴出来和大家交流一下: MainActivity package com.example.testscrollsqli ...
- android中的SQLite数据库
SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法 SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQ ...
- Android实例-操作sqlite数据库之Grid显示图片(XE8+小米2)
结果: 1.数据库文件,记得打包到程序中(assets\internal\). 操作方法: 1.新建firemonkey mobile application①菜单->File->New- ...
- android Api操作SQLite数据库的示例代码
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.databa ...
- android中操作SQLite注意事项
调用rawQuery()后,需要调用Cursor的movToFirst(); public Cursor query(String sql, String[] args){ SQLiteDatabas ...
- 在项目中使用SQLite数据库小结
------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...
- JDBC访问及操作SQLite数据库
SQLite 是一个开源的嵌入式关系数据库,其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保SQLite的二进 ...
随机推荐
- 课下测试ch17&ch18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- python开发_tkinter_单选按钮
这篇blog主要是描述python中tkinter的单选按钮操作 下面是我做的demo 运行效果: ====================================== 代码部分: ===== ...
- Codeforces Round #298 (Div. 2) A. Exam 构造
A. Exam Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/534/problem/A Des ...
- hdoj 1753 大明A+B 高精度/java
大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Android 性能监控系列一(原理篇)
欢迎关注微信公众号:BaronTalk,获取更多精彩好文! 一. 前言 性能问题是导致 App 用户流失的罪魁祸首之一,如果用户在使用我们 App 的时候遇到诸如页面卡顿.响应速度慢.发热严重.流量电 ...
- MacBook pro new 触控板手势及快捷键
MacBook pro new 触控板手势: 显示桌面: 拇指+三指 向外张开 launchpad: 拇指+三指 向中间集中 正在运行的窗口:三指向上 应用浏览: 三指向下 窗口信息: 三指点 ...
- 最小生成树-普利姆算法lazy实现
算法描述 lazy普利姆算法的步骤: 1.从源点s出发,遍历它的邻接表s.Adj,将所有邻接的边(crossing edges)加入优先队列Q: 2.从Q出队最轻边,将此边加入MST. 3.考察此边的 ...
- 伟大的通信使者——JSON(JavaScript版本)
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表 ...
- 使用Chrome快速实现数据的抓取(二)——协议
在前面的文章简单的介绍了一下Chrome调试模式的启动方式,但前面的API只能做到简单的打开,关闭标签操作,当我们需要对某个标签页进行详细的操作时,则需要用到页面管理API.首先我们还是来回顾下获取页 ...
- mklink让网盘同步不同文件夹
mklink简介 Linux 下有一个叫符号链接的东东,是 ln 这个链接命令,mklink 和 ln 的功能几乎一样.在xp系统下,junction命令要用微软开发的小程序 junction.exe ...