使用SQLite创建数据库并显示于用户界面


菜鸟刚接触SQLite,敲了一个小Demo。用于测试SQLite。具体的SQLite的相关简介在此不再赘述。


业务描述:
使用SQLite创建数据库,并插入相关数据。最终可以在avd用户界面读取并显示数据库内容。


实现分析及步骤。
首先创建一个数据库,通过SQLiteOpenHelper进行数据库的创建,数据库创建的具体过程见后面代码。

然后对创建的数据库,进行通过ContentValues来创建数据库并插入数据库内容。由于刚接触SQLite时在进行增删改查训练时,是在单元测试框架中进行的,所以在本次Demo中,扔选择在测试框架中进行插入。

由于本次Demo用到的变量较多,(3*50=150)。为了便于对属性的管理,考虑使用JavBean来对管理属性。

最后在MainActivity中进行对数据库的查询、读取、存储和显示。

创建数据库

package com.example.datashow;

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

public class mySQLite extends SQLiteOpenHelper {

    public mySQLite(Context context) {
        /**
         * 创建一个数据库,名字为“student.db”,版本为“2”
         */
        super(context, "student.db", null,2);
        // TODO Auto-generated constructor stub
    }

    //数据库创建时,调用此方法
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        /**
         * 创建数据库,一共有四列。分别为"_id", "name" , "phone" ,"salary"
         */
        db.execSQL("create table student (_id integer primary key autoincrement, name char(10) ,phone char(11) , salary double(20))");
    }

    //数据库升级时,调用此方法
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }
}

为数据库添加内容

package com.example.datashow;

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;


public class mySQLiteTest extends AndroidTestCase {


    private mySQLite ms;
    private SQLiteDatabase db;
    private ContentValues newValues;


    //在测试方法调用前调用此方法
    @Override
    protected void setUp() throws Exception {
        // TODO Auto-generated method stub
        super.setUp();
        ms = new mySQLite(getContext());
        db = ms.getWritableDatabase();
    }

    //测试方法结束后调用此方法
    @Override
    protected void tearDown() throws Exception {
        // TODO Auto-generated method stub
        super.tearDown();
        db.close();
    }
    /**
     * 通过ContentValues对数据库进行插入
     * 对数据库插入50组数据。分别为"name","phone","salary"进行赋值
     */
    public void insert() 
    {
        for (int i = 0; i <50; i++) {
            ContentValues values = new ContentValues();
            //values.put("name", "A"+i);
            values.put("name", "Android" + i);
            values.put("phone", "138" + i);
            values.put("salary", "200"+i);
            db.insert("student", null, values);
        }
    }
}

设置JavaBean

package com.example.datashow;

public class Student {
    private String name;
    private String phone;
    private String salary;

    public Student(String name, String phone, String salary) {
        super();
        this.name = name;
        this.phone = phone;
        this.salary = salary;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getSalary() {
        return salary;
    }
    public void setSalary(String salary) {
        this.salary = salary;
    }
    @Override
    public String toString() {
        return "name=" + name + ", phone=" + phone + ", salary="
                + salary ;
    }

}

MainActivity中实现

MainActivity代码实现
package com.example.datashow;

import java.util.ArrayList;
import java.util.List;
import com.example.datashow.R;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;


public class MainActivity extends Activity {

        //创建一个集合用来存储数据库中的数据
        List<Student> studentList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        studentList = new ArrayList<Student>();

        //通过SQLiteOpenHelper的继承类mySQLite来对数据库进行管理
        mySQLite ms = new mySQLite(this);       
        SQLiteDatabase db = ms.getWritableDatabase();

        //通过cursor来实现对数据库列表的遍历
        Cursor cursor = db.query("student", null, null, null, null, null,null , null);
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            String salary = cursor.getString(cursor.getColumnIndex("salary"));
            //通过调用JavaBean对象,对Student属性赋值
            Student stu = new Student(name, phone, salary);
            //将stu遍历的结果存储在studentList集合
            studentList.add(stu);
            //用于测试Demo,实验结果将会在Logcat中显示
            System.out.println(stu.toString());
        }

        //将数据显示至屏幕
        //每有一条数据,就创建一个TextView对象
        LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
        for (Student s : studentList) {
            TextView tv = new TextView(this);
            tv.setText(s.toString());
            tv.setTextSize(15);         
            //把TextView对象设置成线性布局的子节点
            ll.addView(tv);
        }
    }

}
布局文件main.xml代码实现
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout 
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>
</ScrollView>

实现结果

Logcat结果

由于数据库含有50组数据,单页无法显示。后面还有相应的若干数据。不再截屏,显示正常即可。

avd结果

同样,由于单页无法完整显示。下面的内容不再下拉截屏


至此,Demo结束。
SQLite相关内容,继续更新。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于Python和SQLite3数据库的简单界面设计方案: ```python import sqlite3 import tkinter as tk # 创建数据库连接 conn = sqlite3.connect('cal.db') c = conn.cursor() # 创建计算记录表 c.execute('''CREATE TABLE IF NOT EXISTS cal_records (id INTEGER PRIMARY KEY AUTOINCREMENT, num1 REAL, num2 REAL, op TEXT, result REAL)''') # 定义计算函数 def calculate(): num1 = float(entry1.get()) num2 = float(entry2.get()) op = listbox.get(listbox.curselection()) if op == '+': result = num1 + num2 elif op == '-': result = num1 - num2 elif op == '*': result = num1 * num2 elif op == '/': result = num1 / num2 else: result = 0.0 result_label.config(text=str(result)) # 存储计算结果到数据库 c.execute('INSERT INTO cal_records (num1, num2, op, result) VALUES (?, ?, ?, ?)', (num1, num2, op, result)) conn.commit() # 定义查询函数 def query(): num1 = float(entry1.get()) c.execute('SELECT * FROM cal_records WHERE num1=?', (num1,)) records = c.fetchall() result_str = '' for record in records: result_str += f'num1: {record[1]}, num2: {record[2]}, op: {record[3]}, result: {record[4]}\n' result_label.config(text=result_str) # 创建界面 root = tk.Tk() root.title('Calculator') label1 = tk.Label(root, text='Number 1:') label1.grid(row=0, column=0) entry1 = tk.Entry(root) entry1.grid(row=0, column=1) label2 = tk.Label(root, text='Number 2:') label2.grid(row=1, column=0) entry2 = tk.Entry(root) entry2.grid(row=1, column=1) listbox = tk.Listbox(root) listbox.grid(row=2, column=0, columnspan=2) listbox.insert(0, '+', '-', '*', '/') calculate_btn = tk.Button(root, text='Calculate', command=calculate) calculate_btn.grid(row=3, column=0) query_btn = tk.Button(root, text='Query', command=query) query_btn.grid(row=3, column=1) result_label = tk.Label(root, text='') result_label.grid(row=4, column=0, columnspan=2) root.mainloop() # 关闭数据库连接 c.close() conn.close() ``` 在上述界面中,我们使用了Python的Tkinter库来创建GUI界面界面中包含两个文本框用于输入两个数值,一个列表框用于选择运算方法,一个计算按钮和一个查询按钮。在点击计算按钮时,程序会根据用户的输入和选择进行相应的数学运算,并将结果显示界面上。同时,程序会将计算结果存入SQLite3数据库中。在点击查询按钮时,程序会根据用户输入的第一个数值从数据库中查询相应的计算结果,并将结果显示界面上。 需要注意的是,在使用SQLite3数据库时,我们需要首先建立数据库连接,然后再通过cursor对象执行SQL语句进行数据库操作。最后,务必在程序结束时关闭数据库连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值