使用手机本地sqlite数据库存一些类

前言

最近工作需要,把用户检测的一些数据存到本地,将数据保存到历史记录里,用户可以选择自己满意的数据上传云端,话不多说直接贴代码。


public class DBServices extends SQLiteOpenHelper{
	
	public final static int version = 1;
	public final static String dbName = "MonitorData"+     
AppContext.getInstance().getProperty("UsrName");//不同数据库名,根据当前登录用户账号做了区别
	
	public DBServices(Context context){
		super(context,dbName,null,version);
	}
	
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.beginTransaction();
		//创建邮件表
		String create_mail_sql = "CREATE TABLE if not exists [MonitorData]"+
				"(_id integer primary key autoincrement,object object)";
		db.execSQL(create_mail_sql);
		
		db.setTransactionSuccessful();
		db.endTransaction();
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		
	}
	//增
	public void insert(String table, String nullColumnHack, ContentValues values){
		SQLiteDatabase db = this.getWritableDatabase();
		db.beginTransaction();
		db.insert(table, nullColumnHack, values);
		db.setTransactionSuccessful();
		db.endTransaction();
	}
	//删
	public void delete(String table , String whereClause , String[] whereArgs){
		SQLiteDatabase db = this.getWritableDatabase();
		db.beginTransaction();
		db.delete(table, whereClause, whereArgs);
		db.setTransactionSuccessful();
		db.endTransaction();
	}
	//改
	public void update(String table, ContentValues values,
		String whereClause, String[] whereArgs){
		SQLiteDatabase db = this.getWritableDatabase();
		db.beginTransaction();
		db.update(table, values, whereClause, whereArgs);
		db.setTransactionSuccessful();
		db.endTransaction();
	}
	//查
	public Cursor read(String sql ,String[] args){
		SQLiteDatabase db = this.getReadableDatabase();
		db.beginTransaction();
		Cursor cursor = db.rawQuery(sql, args);
		db.setTransactionSuccessful();
		db.endTransaction();
		return cursor;
	}
	
}

在需要使用的activity或者fragment里初始化DBServices,然后直接保存Object

DBServices db = new DBServices(this.getContext());
db = new DBServices(this.getContext());
/**
 * 保存数据
 */
public void saveData(MonitorDataObject object) {
    ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
    try {
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
        objectOutputStream.writeObject(object);
        objectOutputStream.flush();
        byte data[] = arrayOutputStream.toByteArray();
        objectOutputStream.close();
        arrayOutputStream.close();
        SQLiteDatabase database = db.getWritableDatabase();
        database.execSQL("insert into MonitorData (object) values(?)", new Object[] { data });
        database.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

拿取数据

DBServices db = new DBServices(this);//定义变量
db = new DBServices(this);//初始化
//拿到主键_id的列表方便查询,通过object是查不到的
 public ArrayList<Integer> getAllInt() {
        ArrayList<Integer> persons = new ArrayList<Integer>();
        SQLiteDatabase database = db.getReadableDatabase();
        Cursor cursor = database.rawQuery("select * from MonitorData", null);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                //如果你代码中有用它从数据库中取一个整型值,需要注意:如果数据库中的这一个数据恰好是null,而null又不是int,此时并不会抛出NumberFormatException 异常,而是直接返回0!
                int person =cursor.getInt(0);
                persons.add(person);
            }
        }
        Log.d("Persons-Count",Integer.toString(persons.size()));
        return persons;
    }


//拿去数据
    public ArrayList<MonitorDataObject> getAllObject() {
        ArrayList<MonitorDataObject> persons = new ArrayList<MonitorDataObject>
                ();
        SQLiteDatabase database = db.getReadableDatabase();
        Cursor cursor = database.rawQuery("select * from MonitorData", null);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                Log.d("data-id",cursor.getString(0));
                byte data[] = cursor.getBlob(cursor.getColumnIndex("object"));
                ByteArrayInputStream arrayInputStream = new
                        ByteArrayInputStream(data);
                try {
                    ObjectInputStream inputStream = new ObjectInputStream
                            (arrayInputStream);
                    MonitorDataObject person = (MonitorDataObject)
                            inputStream.readObject();
                    persons.add(person);
                    inputStream.close();
                    arrayInputStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        Log.d("Persons-Count",Integer.toString(persons.size()));
        return persons;
    }

删除某个id的数据

DBServices db = new DBServices(this);
db = new DBServices(this);
//index需要删除的_id,上面代码有拿到id的列表
String[] args = {String.valueOf(index)};
db.delete("MonitorData","_id=?",args);

 

 

 

 

 

好的,我们可以使用 Python 的 Tkinter 模块来创建窗口,使用 SQLite 数据库来本地保数据。下面是一个简单的产品库管理系统的代码示例: ```python import tkinter as tk import sqlite3 # 连接到本地 SQLite 数据库 conn = sqlite3.connect('inventory.db') c = conn.cursor() # 创建产品表 c.execute('''CREATE TABLE IF NOT EXISTS products (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, price REAL NOT NULL, quantity INTEGER NOT NULL)''') # 创建主窗口 root = tk.Tk() root.title('产品库管理系统') # 创建标签和输入框 name_label = tk.Label(root, text='产品名称') name_label.grid(row=0, column=0) name_entry = tk.Entry(root) name_entry.grid(row=0, column=1) price_label = tk.Label(root, text='产品价格') price_label.grid(row=1, column=0) price_entry = tk.Entry(root) price_entry.grid(row=1, column=1) quantity_label = tk.Label(root, text='产品数量') quantity_label.grid(row=2, column=0) quantity_entry = tk.Entry(root) quantity_entry.grid(row=2, column=1) # 创建按钮和列表框 add_button = tk.Button(root, text='添加产品', command=lambda: add_product()) add_button.grid(row=3, column=0) delete_button = tk.Button(root, text='删除产品', command=lambda: delete_product()) delete_button.grid(row=3, column=1) listbox = tk.Listbox(root, width=50) listbox.grid(row=4, column=0, columnspan=2) # 定义添加产品函数 def add_product(): # 获取输入框中的数据 name = name_entry.get() price = float(price_entry.get()) quantity = int(quantity_entry.get()) # 在数据库中插入新数据 c.execute('INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)', (name, price, quantity)) conn.commit() # 清空输入框 name_entry.delete(0, tk.END) price_entry.delete(0, tk.END) quantity_entry.delete(0, tk.END) # 更新列表框中的数据 update_listbox() # 定义删除产品函数 def delete_product(): # 获取选中的产品 ID selected_id = listbox.get(listbox.curselection())[0] # 在数据库中删除对应的数据 c.execute('DELETE FROM products WHERE id = ?', (selected_id,)) conn.commit() # 更新列表框中的数据 update_listbox() # 定义更新列表框函数 def update_listbox(): # 清空列表框 listbox.delete(0, tk.END) # 查询数据库中的所有产品 c.execute('SELECT * FROM products') products = c.fetchall() # 将产品添加到列表框中 for product in products: listbox.insert(tk.END, f'{product[0]}. {product[1]} - ¥{product[2]} - 库:{product[3]}') # 初始化列表框 update_listbox() # 启动主循环 root.mainloop() # 关闭数据库连接 conn.close() ``` 在这个例子中,我们首先连接到本地 SQLite 数据库,并创建了一个名为 `products` 的表,该表有四个字段:`id`、`name`、`price` 和 `quantity`,分别表示产品 ID、名称、价格和数量。然后我们使用 Tkinter 模块创建了一个简单的窗口,并在窗口中添加了标签、输入框、按钮和列表框。我们还定义了三个函数来实现添加产品、删除产品和更新列表框的功能。最后,我们使用 `mainloop()` 函数启动了主循环,使窗口保持打开状态,直到用户关闭窗口为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值