HDU-安卓程序开发之读写资源文件/SQLite数据库

本文介绍了一个Android应用程序如何实现资源文件的读写功能及简单的SQL数据库操作,包括使用XML解析器读取XML文件、从raw文件夹读取文件内容、通过ContentValues插入和更新数据、执行查询和删除操作等。

前言

这次为了做更好看的界面,更新了一下android studio到4.1.1
踩了很多坑,最后还是手机热点+梯子下载安装包,在线更新gradle弄好的,然后新建一个工程又出问题
(我和我的室友的问题不一样,这里阐述一下我遇到的问题和解决方案https://blog.youkuaiyun.com/cshoney/article/details/90142447)
不多说了,开搞!

界面

读写资源文件
在这里插入图片描述
SQL数据库的简单操作
在这里插入图片描述

Java源码

读写资源文件

package fourvolt69.homework;

import androidx.appcompat.app.AppCompatActivity;

import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.xmlpull.v1.XmlPullParser;

import java.io.IOException;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button)findViewById(R.id.button);
        Button button2 = (Button)findViewById(R.id.button2);
        Button button3 = (Button)findViewById(R.id.button3);
        TextView textView = (TextView)findViewById(R.id.textView);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Resources resources = getResources();
                InputStream inputStream = resources.openRawResource(R.raw.raw_file);
                try {
                    byte[] reader = new byte[inputStream.available()];
                    while (inputStream.read(reader)!= -1){

                    }
                    textView.setText(new String(reader));
                }catch (IOException e){
                    e.printStackTrace();
                }finally {
                    try {
                        inputStream.close();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                }
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Resources resources = getResources();
                XmlResourceParser parser=resources.getXml(R.xml.people);
                String msg="";
                try {
                    while(parser.next()!= XmlPullParser.END_DOCUMENT){
                        String people=parser.getName();
                        String name = null;
                        String age = null;
                        String height = null;
                        if((people!=null)&&people.equals("person")){
                            int count = parser.getAttributeCount();
                            for (int i=0;i<count;i++){
                                String attrName=parser.getAttributeName(i);
                                String attrValue=parser.getAttributeValue(i);
                                if ((attrName!=null)&&attrName.equals("name")){
                                    name=attrValue;
                                }else if((attrName!=null)&&attrName.equals("age")){
                                    age=attrValue;
                                }else if((attrName!=null)&&attrName.equals("height")){
                                    height=attrValue;
                                }
                            }
                            if((name!=null)&&(age!=null)&&(height!=null)){
                                msg+="姓名:"+name+",年龄:"+age+",身高:"+height+"\n";
                            }
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
                textView.setText(msg);
            }
        });
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText("清除显示");
            }
        });
    }
}

SQL数据库的简单操作

package fourvolt69.homework;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    SQLiteDatabase db_read,db_write;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button insertButton = (Button)findViewById(R.id.button);
        Button updateButton = (Button)findViewById(R.id.button2);
        Button deleteButton = (Button)findViewById(R.id.button3);
        Button queryButton = (Button)findViewById(R.id.button4);
        TextView textView = (TextView)findViewById(R.id.textView);
        SQLiteOpenHelper helper=new SQLiteOpenHelper(MainActivity.this, "my.db",null,1) {
            @Override
            public void onCreate(SQLiteDatabase sqLiteDatabase) {
                sqLiteDatabase.execSQL("create table people(id int, name String)");
            }

            @Override
            public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

            }
        };
        db_read=helper.getReadableDatabase();
        db_write=helper.getWritableDatabase();
        insertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentValues contentValues=new ContentValues();
                contentValues.put("id",3);
                contentValues.put("name","张三");
                db_write.insert("people",null,contentValues);
            }
        });
        updateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentValues contentValues=new ContentValues();
                contentValues.put("id",2);
                contentValues.put("name","李二");
                //db_write.update("people",contentValues,"id=?",new String[]{"3"});
                db_write.update("people",contentValues,"id=3",null);
            }
        });
        deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                db_write.delete("people","id=2",null);
            }
        });
        queryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String msg="";
                Cursor cursor=db_read.query("people",new String[]{"id","name"},"id=2",null,null,null,null);
                while (cursor.moveToNext()){
                    String name=cursor.getString(cursor.getColumnIndex("name"));
                    msg+=name;
                }
                textView.setText(msg);
                cursor.close();
            }
        });
    }
}

SQLite的终端命令行操作

  1. 找到platform-tools文件夹 在android studio中打开安卓模拟机,在命令提示符中,cd到platform-tools目录
    在Android studio的设置中可以找到sdk的位置,platform-tools在其下

在这里插入图片描述

  1. 在命令提示符中进入项目的包的位置 输入adb shell,输入su,进入该虚拟机的Linux系统权限模式
    (ls可以显示当前路径下的文件列表)
    进入data/data/项目文件夹

在这里插入图片描述

  1. 手工建库操作
    如果你没有databases文件夹,则需要创建一个,mkdir databases
    进入databases文件夹,cd databases
    输入sqlite3 “数据库名字”.db进入数据库交互模式(自己取,下文以friends.db为例)
    输入create table peopleinfo(_id integer primary key autoincrement, name text not null, age integer, height float);
    这里是在friends.db下创建了一张叫peopleinfo的表,数据有 id name age height几种
    输入.table可以查看数据库内全部的表

不想再手工建一次了,图片大家自己脑补吧

  1. 添加、修改、删除、显示
    输入insert into peopleinfo values(null,“Tom”,22,1.78); 这是添加操作
    输入update peopleinfo set name=“Jack” where name=“Tom”; 这是把tom的名字改成jack
    输入delete from peopleinfo where name=“Jack”; 这是把名字叫jack的一组数据删掉
    输入select from * peopleinfo; 这是展示peopleinfo这张表
    如果把 * 号换成属性名如 _id 则只列出 _id栏的值,如果在显示语句之前添加.mode column语句,则以表格的形式列出
    输入.quit退出sqlite3

同上,请自行脑补配图

结语

没什么好说的,给大家劈个叉吧

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值