Android(安卓)订餐APP(Sqlite数据库,完整的增删改查)
Android(安卓)订餐APP(Sqlite数据库,完整的增删改查)
一.背景
首先说说项目的背景,基于地铁口鸡蛋饼的一个小项目,APP中固定设置的鸡蛋饼搭配,顾客也可以自己搭配
二.开发环境
- AndroidStudio3.0.1
- JDK1.8
- 语言:JAVA
- 数据存储:Sqlite
三.功能
- 注册、登录、管理员、普通用户
- 首页:鸡蛋饼食材搭配
- 订单:购买订单展示
- 个人/管理:个人信息、用户信息、机器信息、订单管理、食材管理、退出登录等
- 技术知识:Sqlite增删改查、glide图片加载、Spinner、EventBus、butterknife等等
四.功能图
五.Sqlite数据库存储(增删改查)
字段值 | 数据类型 | 说明 |
id | text | 主键值 |
nickName | text | 用户名 |
password | text | 密码 |
path | text | 头像 |
qianming | text | 签名 |
phone | text | 手机号 |
birthday | text | 生日 |
sex | text | 性别 |
type | text | 用户类型 |
用户表
代码如下:
public class DbSqliteHelper extends SQLiteOpenHelper {public DbSqliteHelper(Context ctx) {super(ctx, "JianBin", null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {//用户数据表db.execSQL("CREATE TABLE if not exists user(id integer PRIMARY KEY autoincrement,"+ " nickName text, password text, path text, qianming text, phone text, birthday text, sex text, beizhu text,type text)");//鸡蛋饼订单信息数据表db.execSQL("CREATE TABLE if not exists jiqidingdan(id integer PRIMARY KEY autoincrement,"+ "dingdanbianhao text,userNmae text, binName text, lajiao text, salajiang text, fanqie text, zuoliao text, xiangcong text, bianhao text, price text, shuliang text, time text,zhuangtai text,huitui text,wanzi text,jidan text)");db.execSQL("CREATE TABLE if not exists jiqibin(id integer PRIMARY KEY autoincrement,"+ "jiqiname text, jiqiweizhi text)");//机器存储数据表db.execSQL("CREATE TABLE if not exists jiqi(id integer PRIMARY KEY autoincrement,"+ " title text,jiqitupian text, jiqiname text, jiqiweizhi text,lajiao text,salajiang text,fanqie text,xiangcong text)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}private static DbSqliteHelper dbManager;public static DbSqliteHelper getInstance(Context ctx) {if (dbManager == null) {synchronized (DbSqliteHelper.class) {if (dbManager == null) {dbManager = new DbSqliteHelper(ctx);}}}return dbManager;}public boolean saveUser(UserBean bean) {SQLiteDatabase db = getWritableDatabase();if (db != null) {//注册之前先查询是否重复注册Cursor cursor = db.rawQuery("SELECT * FROM user WHERE nickName = ?", new String[]{bean.getNickName()});boolean hasUser = false;if (cursor.moveToNext()) {hasUser = true;}cursor.close();if (hasUser) {return true;}//如果不重复则注册db.execSQL("INSERT INTO user(nickName , password , path , qianming , phone , birthday , sex , beizhu,type) " +"VALUES ('" + bean.getNickName()+ "', '" + bean.getPassword()+ "', '" + bean.getPath()+ "', '" + bean.getQianming()+ "', '" + bean.getPhone()+ "', '" + bean.getBirthday()+ "', '" + bean.getSex()+ "', '" + bean.getBeizhu()+ "', '" + bean.getType()+ "')");}return false;}/*** 查找用户(登录操作)** @return 用户*/public UserBean findUser(String[] args) {UserBean bean = new UserBean();SQLiteDatabase db = getWritableDatabase();if (db != null) {Cursor cursor = db.query("user", null, "nickName = ?", args, null, null, null);if (cursor.moveToNext()) {bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setNickName(cursor.getString(cursor.getColumnIndex("nickName")));bean.setPassword(cursor.getString(cursor.getColumnIndex("password")));bean.setPath(cursor.getString(cursor.getColumnIndex("path")));bean.setQianming(cursor.getString(cursor.getColumnIndex("qianming")));bean.setPhone(cursor.getString(cursor.getColumnIndex("phone")));bean.setBirthday(cursor.getString(cursor.getColumnIndex("birthday")));bean.setSex(cursor.getString(cursor.getColumnIndex("sex")));bean.setBeizhu(cursor.getString(cursor.getColumnIndex("beizhu")));bean.setType(cursor.getString(cursor.getColumnIndex("type")));}cursor.close();}return bean;}/*** 更新用户信息** @param record*/public void updateUser(UserBean record) {SQLiteDatabase db = getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("id", record.getId());contentValues.put("nickName", record.getNickName());contentValues.put("password", record.getPassword());contentValues.put("path", record.getPath());contentValues.put("qianming", record.getQianming());contentValues.put("phone", record.getPhone());contentValues.put("birthday", record.getBirthday());contentValues.put("sex", record.getSex());contentValues.put("beizhu", record.getBeizhu());contentValues.put("type", record.getType());if (db != null) {db.update("user", contentValues, "id = ?", new String[]{record.getId()+""});}}/*** 查询用户数据** @return*/public List<UserBean> getuser(String name) {List<UserBean> userBeanList = new ArrayList<UserBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {//查询记录String[] selectioinArgs = {"%"+name+"%"};//注意:这里没有单引号String sql = "SELECT * FROM user" + " where nickName like ? ";Cursor cursor = db.rawQuery(sql, selectioinArgs);while (cursor.moveToNext()) {UserBean bean = new UserBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setNickName(cursor.getString(cursor.getColumnIndex("nickName")));bean.setPassword(cursor.getString(cursor.getColumnIndex("password")));bean.setPath(cursor.getString(cursor.getColumnIndex("path")));bean.setQianming(cursor.getString(cursor.getColumnIndex("qianming")));bean.setPhone(cursor.getString(cursor.getColumnIndex("phone")));bean.setBirthday(cursor.getString(cursor.getColumnIndex("birthday")));bean.setSex(cursor.getString(cursor.getColumnIndex("sex")));bean.setBeizhu(cursor.getString(cursor.getColumnIndex("beizhu")));bean.setType(cursor.getString(cursor.getColumnIndex("type")));userBeanList.add(bean);}cursor.close();}return userBeanList;}/*** 获取所有用户* @return*/public List<UserBean> getAllUser() {List<UserBean> userBeanList = new ArrayList<UserBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {Cursor cursor = db.rawQuery("SELECT * FROM user ", null);while (cursor.moveToNext()) {UserBean bean = new UserBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setNickName(cursor.getString(cursor.getColumnIndex("nickName")));bean.setPassword(cursor.getString(cursor.getColumnIndex("password")));bean.setPath(cursor.getString(cursor.getColumnIndex("path")));bean.setQianming(cursor.getString(cursor.getColumnIndex("qianming")));bean.setPhone(cursor.getString(cursor.getColumnIndex("phone")));bean.setBirthday(cursor.getString(cursor.getColumnIndex("birthday")));bean.setSex(cursor.getString(cursor.getColumnIndex("sex")));bean.setBeizhu(cursor.getString(cursor.getColumnIndex("beizhu")));bean.setType(cursor.getString(cursor.getColumnIndex("type")));userBeanList.add(bean);}cursor.close();}return userBeanList;}/*** 删除用户** @param id*/public void deleteUser(int id) {SQLiteDatabase db = getWritableDatabase();if (db != null) {db.execSQL("DELETE FROM user WHERE id = " + id);}}//存储机器数据public void saveJiQi(JiQiBean bean) {SQLiteDatabase db = getWritableDatabase();db.execSQL("INSERT INTO jiqi(title,jiqitupian , jiqiname , jiqiweizhi,lajiao ,salajiang ,fanqie ,xiangcong ) " +"VALUES ('" + bean.getTitle()+ "', '" + bean.getJiqitupian()+ "', '" + bean.getJiqiname()+ "', '" + bean.getJiqiweizhi()+ "', '" + bean.getLajiao()+ "', '" + bean.getSalajiang()+ "', '" + bean.getFanqie()+ "', '" + bean.getXiangcong()+ "')");}/*** 获取所有jiq数据** @return*/public List<JiQiBean> getAllJiQi() {List<JiQiBean> records = new ArrayList<JiQiBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {Cursor cursor = db.rawQuery("SELECT * FROM jiqi ", null);while (cursor.moveToNext()) {JiQiBean bean = new JiQiBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setTitle(cursor.getString(cursor.getColumnIndex("title")));bean.setJiqitupian(cursor.getInt(cursor.getColumnIndex("jiqitupian")));bean.setJiqiname(cursor.getString(cursor.getColumnIndex("jiqiname")));bean.setJiqiweizhi(cursor.getString(cursor.getColumnIndex("jiqiweizhi")));bean.setLajiao(cursor.getString(cursor.getColumnIndex("lajiao")));bean.setSalajiang(cursor.getString(cursor.getColumnIndex("salajiang")));bean.setFanqie(cursor.getString(cursor.getColumnIndex("fanqie")));bean.setXiangcong(cursor.getString(cursor.getColumnIndex("xiangcong")));records.add(bean);}cursor.close();}return records;}/*** 查询鸡蛋饼数据** @return*/public List<JiQiBean> getJiQi(String name) {List<JiQiBean> jiQiBeanList = new ArrayList<JiQiBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {//查询记录String[] selectioinArgs = {"%"+name+"%"};//注意:这里没有单引号String sql = "SELECT * FROM jiqi" + " where jiqiname like ? ";Cursor cursor = db.rawQuery(sql, selectioinArgs);while (cursor.moveToNext()) {JiQiBean bean = new JiQiBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setTitle(cursor.getString(cursor.getColumnIndex("title")));bean.setJiqitupian(cursor.getInt(cursor.getColumnIndex("jiqitupian")));bean.setJiqiname(cursor.getString(cursor.getColumnIndex("jiqiname")));bean.setJiqiweizhi(cursor.getString(cursor.getColumnIndex("jiqiweizhi")));bean.setLajiao(cursor.getString(cursor.getColumnIndex("lajiao")));bean.setSalajiang(cursor.getString(cursor.getColumnIndex("salajiang")));bean.setFanqie(cursor.getString(cursor.getColumnIndex("fanqie")));bean.setXiangcong(cursor.getString(cursor.getColumnIndex("xiangcong")));jiQiBeanList.add(bean);}cursor.close();}return jiQiBeanList;}/*** 更新机器信息** @param jiQiBean*/public void updateQiji(JiQiBean jiQiBean) {SQLiteDatabase db = getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("id", jiQiBean.getId());contentValues.put("title", jiQiBean.getTitle());contentValues.put("jiqitupian", jiQiBean.getJiqitupian());contentValues.put("jiqiname", jiQiBean.getJiqiname());contentValues.put("jiqiweizhi", jiQiBean.getJiqiweizhi());contentValues.put("lajiao", jiQiBean.getLajiao());contentValues.put("salajiang", jiQiBean.getSalajiang());contentValues.put("fanqie", jiQiBean.getFanqie());contentValues.put("xiangcong", jiQiBean.getXiangcong());if (db != null) {db.update("jiqi", contentValues, "id = ?", new String[]{jiQiBean.getId()+""});}}/*** 删除机器信息** @param id*/public void deleteJiQi(int id) {SQLiteDatabase db = getWritableDatabase();if (db != null) {db.execSQL("DELETE FROM jiqi WHERE id = " + id);}}//存储鸡蛋饼信息数据public void saveJiQiBing(BingBean bean) {SQLiteDatabase db = getWritableDatabase();db.execSQL("INSERT INTO jiqibin(jiqiname , jiqiweizhi) " +"VALUES ('" + bean.getJiqiname()+ "', '" + bean.getJiqiweizhi()+ "')");}/*** 更新机器信息** @param jiQiBean*/public void updateJiQiBing(BingBean jiQiBean) {SQLiteDatabase db = getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("id", jiQiBean.getId());contentValues.put("jiqiname", jiQiBean.getJiqiname());contentValues.put("jiqiweizhi", jiQiBean.getJiqiweizhi());if (db != null) {db.update("jiqibin", contentValues, "id = ?", new String[]{jiQiBean.getId()+""});}}//模糊查询机器信息public List<BingBean> getJiQiBean(String name) {List<BingBean> jiQiBeanList = new ArrayList<BingBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {//查询记录String[] selectioinArgs = {"%"+name+"%"};//注意:这里没有单引号String sql = "SELECT * FROM jiqibin" + " where jiqiname like ? ";Cursor cursor = db.rawQuery(sql, selectioinArgs);while (cursor.moveToNext()) {BingBean bean = new BingBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setJiqiname(cursor.getString(cursor.getColumnIndex("jiqiname")));bean.setJiqiweizhi(cursor.getString(cursor.getColumnIndex("jiqiweizhi")));jiQiBeanList.add(bean);}cursor.close();}return jiQiBeanList;}/*** 获取所有鸡蛋饼数据** @return*/public List<BingBean> getAllJiQiBing() {List<BingBean> records = new ArrayList<BingBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {Cursor cursor = db.rawQuery("SELECT * FROM jiqibin ", null);while (cursor.moveToNext()) {BingBean bean = new BingBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setJiqiname(cursor.getString(cursor.getColumnIndex("jiqiname")));bean.setJiqiweizhi(cursor.getString(cursor.getColumnIndex("jiqiweizhi")));records.add(bean);}cursor.close();}return records;}/*** 删除机器信息** @param id*/public void deleteJiQiBean(int id) {SQLiteDatabase db = getWritableDatabase();if (db != null) {db.execSQL("DELETE FROM jiqibin WHERE id = " + id);}}//存储鸡蛋饼订单信息数据public void saveJiQiBingDingDan(DingDanBean bean) {SQLiteDatabase db = getWritableDatabase();db.execSQL("INSERT INTO jiqidingdan(dingdanbianhao,userNmae , binName , lajiao , salajiang , fanqie, zuoliao, xiangcong, bianhao, price, shuliang, time,zhuangtai,huitui,wanzi,jidan) " +"VALUES ('" + bean.getDingdanbianhao()+ "', '" + bean.getUserNmae()+ "', '" + bean.getBinName()+ "', '" + bean.getLajiao()+ "', '" + bean.getSalajiang()+ "', '" + bean.getFanqie()+ "', '" + bean.getZuoliao()+ "', '" + bean.getXiangcong()+ "', '" + bean.getBianhao()+ "', '" + bean.getPrice()+ "', '" + bean.getShuliang()+ "', '" + bean.getTime()+ "', '" + bean.getZhuangtai()+ "', '" + bean.getHuitui()+ "', '" + bean.getWanzi()+ "', '" + bean.getJidan()+ "')");}/*** 获取所有鸡蛋饼订单数据** @return*/public List<DingDanBean> getAllJiQiBingDingDan(String user) {List<DingDanBean> records = new ArrayList<DingDanBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {Cursor cursor=null;if (TextUtils.isEmpty(user)){cursor = db.rawQuery("SELECT * FROM jiqidingdan", null);}else {cursor = db.rawQuery("SELECT * FROM jiqidingdan WHERE userNmae = ?", new String[]{user});}while (cursor.moveToNext()) {DingDanBean bean = new DingDanBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setDingdanbianhao(cursor.getString(cursor.getColumnIndex("dingdanbianhao")));bean.setUserNmae(cursor.getString(cursor.getColumnIndex("userNmae")));bean.setBinName(cursor.getString(cursor.getColumnIndex("binName")));bean.setLajiao(cursor.getString(cursor.getColumnIndex("lajiao")));bean.setSalajiang(cursor.getString(cursor.getColumnIndex("salajiang")));bean.setFanqie(cursor.getString(cursor.getColumnIndex("fanqie")));bean.setZuoliao(cursor.getString(cursor.getColumnIndex("zuoliao")));bean.setXiangcong(cursor.getString(cursor.getColumnIndex("xiangcong")));bean.setBianhao(cursor.getString(cursor.getColumnIndex("bianhao")));bean.setPrice(cursor.getString(cursor.getColumnIndex("price")));bean.setShuliang(cursor.getString(cursor.getColumnIndex("shuliang")));bean.setTime(cursor.getString(cursor.getColumnIndex("time")));bean.setZhuangtai(cursor.getString(cursor.getColumnIndex("zhuangtai")));bean.setHuitui(cursor.getString(cursor.getColumnIndex("huitui")));bean.setWanzi(cursor.getString(cursor.getColumnIndex("wanzi")));bean.setJidan(cursor.getString(cursor.getColumnIndex("jidan")));records.add(bean);}cursor.close();}return records;}/*** 获取订单数据** @return*/public List<DingDanBean> getDingDan(String name) {List<DingDanBean> records = new ArrayList<DingDanBean>();SQLiteDatabase db = getWritableDatabase();if (db != null) {//查询记录String[] selectioinArgs = {"%"+name+"%"};//注意:这里没有单引号String sql = "SELECT * FROM jiqidingdan" + " where dingdanbianhao like ? ";Cursor cursor = db.rawQuery(sql, selectioinArgs); while (cursor.moveToNext()) {DingDanBean bean = new DingDanBean();bean.setId(cursor.getInt(cursor.getColumnIndex("id")));bean.setDingdanbianhao(cursor.getString(cursor.getColumnIndex("dingdanbianhao")));bean.setUserNmae(cursor.getString(cursor.getColumnIndex("userNmae")));bean.setBinName(cursor.getString(cursor.getColumnIndex("binName")));bean.setLajiao(cursor.getString(cursor.getColumnIndex("lajiao")));bean.setSalajiang(cursor.getString(cursor.getColumnIndex("salajiang")));bean.setFanqie(cursor.getString(cursor.getColumnIndex("fanqie")));bean.setZuoliao(cursor.getString(cursor.getColumnIndex("zuoliao")));bean.setXiangcong(cursor.getString(cursor.getColumnIndex("xiangcong")));bean.setBianhao(cursor.getString(cursor.getColumnIndex("bianhao")));bean.setPrice(cursor.getString(cursor.getColumnIndex("price")));bean.setShuliang(cursor.getString(cursor.getColumnIndex("shuliang")));bean.setTime(cursor.getString(cursor.getColumnIndex("time")));bean.setZhuangtai(cursor.getString(cursor.getColumnIndex("zhuangtai")));bean.setHuitui(cursor.getString(cursor.getColumnIndex("huitui")));bean.setWanzi(cursor.getString(cursor.getColumnIndex("wanzi")));bean.setJidan(cursor.getString(cursor.getColumnIndex("jidan")));records.add(bean);}cursor.close();}return records;}/*** 删除订单** @param id*/public void deleteDingDan(int id) {SQLiteDatabase db = getWritableDatabase();if (db != null) {db.execSQL("DELETE FROM jiqidingdan WHERE id = " + id);}}
}
本项目当毕业设计,如果需要定制开发可加QQ:2258629201
体验APK链接:链接:https://pan.baidu.com/s/1o0qNI04n7diqh9K1ZmREqw
提取码:in0n
成品源码 链接:https://m.tb.cn/h.3i6yhV2?sm=78a5f7
联系QQ:2258629201
Android(安卓)订餐APP(Sqlite数据库,完整的增删改查)相关推荐
- sqlite数据库的基本增删改查操作
2019独角兽企业重金招聘Python工程师标准>>> 效果图示例 1.在清单里添加相应的权限 <uses-permission android:name="andr ...
- IOS开发基础之SQLite3数据库的使用增删改查
IOS开发基础之SQLite3数据库的使用增删改查 ios开发我们可能会使用到数据库进行持久化存储.sqlite3 是轻量级的数据库. 今天我们来介绍sqlite3 数据库.此方法跟java的增删改查 ...
- thinkphp连mysql增删改查_ThinkPHP5.1框架数据库链接和增删改查操作示例
本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如 本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如下: 一. ...
- Flask框架——数据库操作命令(增删改查)
目录 创建数据表 添加数据 插入单条数据 插入多条数据 查询数据 全部查询 精确查询 模糊查询 主键查询 排序 修改数据 删除数据 删除数据表 上篇文章我们学习了Flask框架--数据库配置及迁移同步 ...
- java调用oracle删除,使用IDEA对Oracle数据库进行简单增删改查操作
1.1 java中的数据存储技术 在java中,数据库存取技术可分为如下几类: 1.jdbc直接访问数据库 2.jdo(java data object)是java对象持久化的新的规范,也是一个用于存 ...
- python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码
1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连 ...
- jaba窗体连接mysql增删改查_知识实现——Java使用jdbc连接MySql数据库,实现增删改查...
Java使用jdbc连接MySql数据库,实现增删改查 首先,导入MySql连接数据库的jar包,我用的是 mysql连接jar包 DB类,用于获得数据库连接 import java.sql.Driv ...
- 数据库的操作 增删改查 mysql
数据库的操作 增删改查 mysql 登陆数据库 查看全部的数据库 系统提供的库,除了 test 是给我们练手的 其它的不要碰 mysql库,保存了系统重要内容,比如帐户 root帐户的用户名,密码,就 ...
- mysql创建数据表列子,MySQL 创建数据库及简单增删改查
MySQL 创建数据库及简单增删改查 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 登入: Enter passwor ...
最新文章
- 英特尔成立物联网视频事业部,这届IESS还揭露了哪些信息?
- 用Python实现归并排序
- VMware与KVM全方面对比
- Angular 依赖注入的一个常见错误 NullInjectorError, No provider for XXX
- windows installer 3.2搞定
- 基于matlab的车牌定位算法设计与实现,matlab车牌定位系统设计(源码+文档)
- 软件公司为什么要加密源代码,而且是前前后后,反反复复
- linux中config文件怎么打开,linux-如何使用CoreOS的cloud-config文件启动Dock...
- Powershell 美化,FluentTerminal.Package_0.6.1.0_Test安装设置及卸载教程
- 鼎捷软件ERP,MES等系统构筑制造企业信息化系统
- 消息队列原理和应用场景总结
- 【Unity Shaders】ShadowGun系列之二——雾和体积光
- NOIP2016普及组复赛全国一等奖名单及排名(续表_919~1419名)
- 也谈谈内卷化、996和程序员的发展
- 修改MFC程序的图标
- 【密码学】七、密钥管理
- Gos —— 实现系统调用
- android高德地图关键字搜索,关键字搜索-POI搜索-示例中心-JS API 示例 | 高德地图API...
- 云服务器ECS(一)
- [仅ESP32] BT AT命令
热门文章
- flink worldcount
- tcping扫描所有端口_批量Tcping ip 加 端口
- java计算机毕业设计校园跳蚤市场源码+系统+mysql数据库+lw文档
- UG NX10.0安装教程
- lvds 屏点亮的过程记录
- Jquery简单实现2048小游戏
- 浅谈薄膜行业MES解决方案
- 关于卷积神经网络中(函数或变量 ‘vl_simplenn_tidy‘ 无法识别)与(尝试将 SCRIPT vl_nnconv 作为函数执行)等问题的远程在线调试解决方案
- 基于Django的租房数据展示系统设计与实现
- 油猴脚本改善浏览器字体显示效果(自用)