Android中操作SQLite数据库

简介:

我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些功能就比较麻烦,比如EditText中的TextWatcher接口,一般查到的都是OnEditorActionListener接口。好了废话不多说,先割了他!!!!

------------------------咯咯---------------------咯咯------------------------------咯咯------------------------------

创建工程之后,建立一个包,主要是写SQLite的。

image

再来补充下背景,在这里,我在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;

image

这里是布局,前面的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"}, nullnullnull);

            //用cursor.moveToNext()判断是否还存在下一个,若存在返回真,不存在返回假。
                
while(cursor.moveToNext())
                {
                    String name 
= cursor.getString(cursor.getColumnIndex("name"));
                    System.out.println(
"Get--->" + name);                    
                }
            }
        }
        
    }

复制代码

不仅可以写程序操作SQLite,还可以用shell操作SQLite数据库。

image

在App程序里面创建了数据库之后才有了databases,登进去数据库,还是与一般关系型数据库还是有差别的。

image

 

总结一下,简短不割,SQLite在App中不提倡使用,因为他有时候会无缘无故的报错,因为我在测试的时候就经常发生,第一次把程序烧进去的时候,可以N次创建数据库同哟个数据库不报错,这就不说了,第二次打开的时候,无论点哪个Button都会直接程序崩溃,包括Insert,第一次的时候就不会,而且还可以查到数据表里面的信息,第二次就不行了,query也query不起了。很蛋疼。

 

 




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3651977.html,如需转载请自行联系原作者

相关文章
|
8月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
733 0
|
XML 数据库 Android开发
Android数据库的使用(增删改查)
本文介绍了一个简单的数据库操作Demo,包含创建数据库、增删改查功能。通过5个按钮分别实现创建数据库、插入数据、删除数据、更新数据和查询数据的操作。代码结构清晰,适合初学者学习Android SQLite数据库基础操作。
365 5
|
数据库 Android开发
Android外部数据库的引用
简介:本文介绍了在Android项目中引用外部数据库的方法。首先,将现成的数据库文件放入项目的`assets`文件夹中(需手动创建)。其次,在APP引导界面通过代码将数据库拷贝至App目录下,确保数据库可用。最后,对数据库进行增删改查等操作。关键步骤包括判断数据库是否存在、使用`AssetManager`读取数据库文件并写入App私有目录,实现外部数据库的顺利集成与使用。
167 2
|
数据库 Android开发 开发者
Android常用的room增删改查语句(外部数据库)
本文分享了将一个原生数据库驱动的单词APP重构为使用Room库的过程及遇到的问题,重点解决了Room中增删改查的常用语句实现。文章通过具体示例(以“forget”表为例),详细展示了如何定义实体类、Dao接口、Database类以及Repository和ViewModel的设计与实现。同时,提供了插入、删除、更新和查询数据的代码示例,包括模糊查询、分页加载等功能。此外,针对外部数据库导入问题,作者建议可通过公众号“计蒙不吃鱼”获取更多支持。此内容适合有一定Room基础的开发者深入学习。
345 0
Android常用的room增删改查语句(外部数据库)
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
841 14
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
1385 15
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
485 8
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
482 4
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
591 3
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
532 2