Android手持机扫码出入库的开发详解-7.SQLite CRUD操作

Android手持机扫码出入库的开发详解-7.SQLite CRUD操作

SQLite CRUD操作

SQLite CRUD程序图

flowchart TD subgraph SQLite数据交互架构 subgraph 实体层 InStorage["InStorage.java\n入库实体类"] end subgraph DAO接口层 InStorageDAO["InStorageDAO.java\nCRUD操作接口"] end subgraph DAO实现层 InStorageDAOSqliteImpl["InStorageDAOSqliteImpl.java\nSQLite具体实现"] TableCreation["表创建与管理"] Transaction["事务处理"] InStorageDAOSqliteImpl --> TableCreation InStorageDAOSqliteImpl --> Transaction end subgraph 控制器层 InStorageScanCode["InStorageScanCode.java\n入库扫码控制器"] ScanReceiver["扫码广播接收器"] AsyncTask["异步任务处理"] DataList["数据列表展示"] InStorageScanCode --> ScanReceiver InStorageScanCode --> AsyncTask InStorageScanCode --> DataList end subgraph 工具类 DAOFactory["DAOFactory.java\nDAO工厂"] SqliteDBConnection["SqliteDBConnection.java\nSQLite连接管理"] ConnectionPool["连接池管理"] CloseResources["资源关闭机制"] SqliteDBConnection --> ConnectionPool SqliteDBConnection --> CloseResources end subgraph 数据流向 ScanReceiver --> |扫码数据| SaveData["SaveDataToSqlite"] SaveData --> |创建实体| InStorage InStorage --> |批量插入| InStorageDAO AsyncTask --> |删除/上传| InStorageDAO DataList --> |查询| InStorageDAO end %% 模块间关系 InStorageScanCode --> |获取实例| DAOFactory DAOFactory --> |创建| InStorageDAOSqliteImpl InStorageDAOSqliteImpl --> |实现| InStorageDAO InStorageScanCode --> |数据库连接| SqliteDBConnection InStorageDAOSqliteImpl --> |操作数据库| SqliteDBConnection end %% 整体流程 User[用户操作] --> |扫码| ScanReceiver User --> |查询| InStorageScanCode User --> |删除| InStorageScanCode User --> |上传| InStorageScanCode DataList --> |更新UI| UI[界面展示] AsyncTask --> |操作结果| UI

SQLite CRUD源代码

1. 实体类 (entity/InStorage.java)
java 复制代码
package cbw.materials.entity;

import java.io.Serializable;

/**
 * 入库实体类
 */
public class InStorage implements Serializable {
    private String str_货位号;
    private String str_材料名称;
    private String str_材料规格;
    private String str_颜色;
    private String str_库管员;
    private String str_厂家缩写;
    private String str_CBW对照号;
    private String str_单位;
    private String str_材料条码;
    private String str_厂家代码;
    private String str_生产日期;
    private String str_批号;
    private int int_数量;
    private String str_库管编码;
    private String str_码文;
    private String str_扫码人;
    private String str_扫码时间;
    private String str_扫码仓库;
    private int int_上传标记;
    private long Long_ID;

    /**
     * 创建默认实例
     */
    public static InStorage newInstance() {
        InStorage inStorage = new InStorage();
        inStorage.setStr_货位号("");
        inStorage.setStr_材料名称("");
        inStorage.setStr_材料规格("");
        inStorage.setStr_颜色("");
        inStorage.setStr_库管员("");
        inStorage.setStr_厂家缩写("");
        inStorage.setStr_CBW对照号("");
        inStorage.setStr_单位("");
        inStorage.setStr_材料条码("");
        inStorage.setStr_厂家代码("");
        inStorage.setStr_生产日期("");
        inStorage.setStr_批号("");
        inStorage.setInt_数量(0);
        inStorage.setStr_库管编码("");
        inStorage.setStr_码文("");
        inStorage.setStr_扫码人("");
        inStorage.setStr_扫码时间("");
        inStorage.setStr_扫码仓库("");
        inStorage.setInt_上传标记(0);
        inStorage.setLong_ID(0);
        return inStorage;
    }

    // 省略getter和setter方法...
}
2. DAO接口 (dao/InStorageDAO.java)
java 复制代码
package cbw.materials.dao;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.List;

import cbw.materials.entity.InStorage;

/**
 * 入库数据访问接口
 */
public interface InStorageDAO {
    /**
     * 插入单条数据
     */
    Cursor insertData(SQLiteDatabase db, InStorage inStorage) throws Exception;

    /**
     * 插入多条数据
     */
    Cursor insertDatas(SQLiteDatabase db, List<InStorage> inStorages) throws Exception;

    /**
     * 删除单条数据
     */
    Cursor deleteData(SQLiteDatabase db, long Id) throws Exception;

    /**
     * 删除所有数据
     */
    Cursor deleteAllData(SQLiteDatabase db) throws Exception;

    /**
     * 根据条件删除数据
     */
    Cursor deleteCriteriaData(SQLiteDatabase db, String Criteria) throws Exception;

    /**
     * 查询所有数据
     */
    Cursor queryAll(SQLiteDatabase db) throws Exception;

    /**
     * 根据ID查询数据
     */
    InStorage findById(SQLiteDatabase db, long Id) throws Exception;

    /**
     * 分页查询数据
     */
    List<InStorage> findAll(int page, int rowsPerPage) throws Exception;

    /**
     * 检查并创建表
     */
    String checkCreateTable(SQLiteDatabase db) throws Exception;

    /**
     * 更新数据
     */
    Cursor updateData(SQLiteDatabase db, InStorage inStorage) throws Exception;
}
3. DAO实现类 (dao/impl/InStorageDAOSqliteImpl.java)
java 复制代码
package cbw.materials.dao.impl;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.sql.SQLException;
import java.util.List;
import cbw.materials.entity.InStorage;
import cbw.materials.dao.InStorageDAO;
import cbw.materials.util.SqliteQueryData;

public class InStorageDAOSqliteImpl implements InStorageDAO {
    static final String KEY_ROWID = "_ID";
    static final String KEY_货位号="货位号";
    static final String KEY_材料名称="材料名称";
    static final String KEY_材料规格="材料规格";
    static final String KEY_颜色="颜色";
    static final String KEY_库管员="库管员";
    static final String KEY_厂家缩写="厂家缩写";
    static final String KEY_CBW对照号="CBW对照号";
    static final String KEY_单位="单位";
    static final String KEY_材料条码="材料条码";
    static final String KEY_厂家代码="厂家代码";
    static final String KEY_生产日期="生产日期";
    static final String KEY_批号="批号";
    static final String KEY_数量="数量";
    static final String KEY_库管编码="库管编码";
    static final String KEY_码文="码文";
    static final String KEY_扫码人="扫码人";
    static final String KEY_扫码时间="扫码时间";
    static final String KEY_扫码仓库="扫码仓库";
    static final String KEY_上传标记="上传标记";
    static final String message="";
    static final String TAG = "SqliteDBConnection";
    static final String DATABASE_TABLE = "InStorageScanCodes";
    private SqliteQueryData sqliteQueryData=new SqliteQueryData();
    @Override
    public Cursor insertData(SQLiteDatabase db, InStorage inStorage) throws Exception {

        ContentValues initialValues;
        Cursor cursor=null;
        db.beginTransaction();
        try {
            initialValues = new ContentValues();
            initialValues.put(KEY_货位号,inStorage.getStr_货位号());
            initialValues.put(KEY_材料名称,inStorage.getStr_材料名称());
            initialValues.put(KEY_材料规格,inStorage.getStr_材料规格());
            initialValues.put(KEY_颜色,inStorage.getStr_颜色());
            initialValues.put(KEY_库管员,inStorage.getStr_库管员());
            initialValues.put(KEY_厂家缩写,inStorage.getStr_厂家缩写());
            initialValues.put(KEY_CBW对照号,inStorage.getStr_CBW对照号());
            initialValues.put(KEY_单位,inStorage.getStr_单位());
            initialValues.put(KEY_材料条码,inStorage.getStr_材料条码());
            initialValues.put(KEY_厂家代码,inStorage.getStr_厂家代码());
            initialValues.put( KEY_生产日期,inStorage.getStr_生产日期());
            initialValues.put(KEY_批号,inStorage.getStr_批号());
            initialValues.put(KEY_数量,inStorage.getInt_数量());
            initialValues.put(KEY_库管编码,inStorage.getStr_库管编码());
            initialValues.put(KEY_码文,inStorage.getStr_码文());
            initialValues.put(KEY_扫码人,inStorage.getStr_扫码人());
            initialValues.put(KEY_扫码时间,inStorage.getStr_扫码时间());
            initialValues.put(KEY_扫码仓库,inStorage.getStr_扫码仓库());
            initialValues.put(KEY_上传标记,inStorage.getInt_上传标记());
           long l=db.insert(DATABASE_TABLE, null,initialValues);

            // 设置事务标志为成功,当结束事务时就会提交事务
            db.setTransactionSuccessful();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 结束事务
            db.endTransaction();

        }
        String str_Sql="select top 1  _id,";
        str_Sql = str_Sql + "货位号,";
        str_Sql = str_Sql + "材料名称,";
        str_Sql = str_Sql + "材料规格,";
        str_Sql = str_Sql + "颜色,";
        str_Sql = str_Sql + "库管员,";
        str_Sql = str_Sql + "厂家缩写,";
        str_Sql = str_Sql + "CBW对照号,";
        str_Sql = str_Sql + "单位,";
        str_Sql = str_Sql + "材料条码,";
        str_Sql = str_Sql + "厂家代码,";
        str_Sql = str_Sql + "生产日期,";
        str_Sql = str_Sql + "批号,";
        str_Sql = str_Sql + "数量,";
        str_Sql = str_Sql + "库管编码,";
        str_Sql = str_Sql + "码文,";
        str_Sql = str_Sql + "扫码人,";
        str_Sql = str_Sql + "扫码时间,";
        str_Sql = str_Sql + "扫码仓库,";
        str_Sql = str_Sql + "上传标记";
        str_Sql = str_Sql + " from instoragescancodes order by _id desc";
        cursor=sqliteQueryData.RowsCols(db,str_Sql);
        return cursor;
    }

    @Override
    public Cursor insertDatas(SQLiteDatabase db, List<InStorage>  inStorages) throws Exception {
        ContentValues initialValues;
        Cursor cursor=null;
        db.beginTransaction();
        try {
            for(InStorage inStorage:inStorages){
                initialValues = new ContentValues();
                initialValues.put(KEY_货位号,inStorage.getStr_货位号());
                initialValues.put(KEY_材料名称,inStorage.getStr_材料名称());
                initialValues.put(KEY_材料规格,inStorage.getStr_材料规格());
                initialValues.put(KEY_颜色,inStorage.getStr_颜色());
                initialValues.put(KEY_库管员,inStorage.getStr_库管员());
                initialValues.put(KEY_厂家缩写,inStorage.getStr_厂家缩写());
                initialValues.put(KEY_CBW对照号,inStorage.getStr_CBW对照号());
                initialValues.put(KEY_单位,inStorage.getStr_单位());
                initialValues.put(KEY_材料条码,inStorage.getStr_材料条码());
                initialValues.put(KEY_厂家代码,inStorage.getStr_厂家代码());
                initialValues.put( KEY_生产日期,inStorage.getStr_生产日期());
                initialValues.put(KEY_批号,inStorage.getStr_批号());
                initialValues.put(KEY_数量,inStorage.getInt_数量());
                initialValues.put(KEY_库管编码,inStorage.getStr_库管编码());
                initialValues.put(KEY_码文,inStorage.getStr_码文());
                initialValues.put(KEY_扫码人,inStorage.getStr_扫码人());
                initialValues.put(KEY_扫码时间,inStorage.getStr_扫码时间());
                initialValues.put(KEY_扫码仓库,inStorage.getStr_扫码仓库());
                initialValues.put(KEY_上传标记,inStorage.getInt_上传标记());
                long l=db.insert(DATABASE_TABLE, null,initialValues);
            }
            // 设置事务标志为成功,当结束事务时就会提交事务
            db.setTransactionSuccessful();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 结束事务
            db.endTransaction();

        }
        String str_Sql="select  _id,";
        str_Sql = str_Sql + "货位号,";
        str_Sql = str_Sql + "材料名称,";
        str_Sql = str_Sql + "材料规格,";
        str_Sql = str_Sql + "颜色,";
        str_Sql = str_Sql + "库管员,";
        str_Sql = str_Sql + "厂家缩写,";
        str_Sql = str_Sql + "CBW对照号,";
        str_Sql = str_Sql + "单位,";
        str_Sql = str_Sql + "材料条码,";
        str_Sql = str_Sql + "厂家代码,";
        str_Sql = str_Sql + "生产日期,";
        str_Sql = str_Sql + "批号,";
        str_Sql = str_Sql + "数量,";
        str_Sql = str_Sql + "库管编码,";
        str_Sql = str_Sql + "码文,";
        str_Sql = str_Sql + "扫码人,";
        str_Sql = str_Sql + "扫码时间,";
        str_Sql = str_Sql + "扫码仓库,";
        str_Sql = str_Sql + "上传标记";
        str_Sql = str_Sql + " from instoragescancodes order by _id desc";
        cursor=sqliteQueryData.RowsCols(db,str_Sql);
        return cursor;

    }

    @Override
    public Cursor updateData(SQLiteDatabase db, InStorage inStorage, long Id) throws Exception {
        return null;
    }

    @Override
    public Cursor deleteData(SQLiteDatabase db, long Id) throws Exception {
        Cursor cursor=null;
        int bol=db.delete(DATABASE_TABLE, KEY_ROWID + "=" +Id, null);
        if( bol>0){
            String str_Sql="select  _id,";
            str_Sql = str_Sql + "货位号,";
            str_Sql = str_Sql + "材料名称,";
            str_Sql = str_Sql + "材料规格,";
            str_Sql = str_Sql + "颜色,";
            str_Sql = str_Sql + "库管员,";
            str_Sql = str_Sql + "厂家缩写,";
            str_Sql = str_Sql + "CBW对照号,";
            str_Sql = str_Sql + "单位,";
            str_Sql = str_Sql + "材料条码,";
            str_Sql = str_Sql + "厂家代码,";
            str_Sql = str_Sql + "生产日期,";
            str_Sql = str_Sql + "批号,";
            str_Sql = str_Sql + "数量,";
            str_Sql = str_Sql + "库管编码,";
            str_Sql = str_Sql + "码文,";
            str_Sql = str_Sql + "扫码人,";
            str_Sql = str_Sql + "扫码时间,";
            str_Sql = str_Sql + "扫码仓库,";
            str_Sql = str_Sql + "上传标记";
            str_Sql = str_Sql + " from instoragescancodes order by _id desc";
            cursor=sqliteQueryData.RowsCols(db,str_Sql);
        }
        return cursor;
    }

    @Override
    public Cursor deleteAllData(SQLiteDatabase db) throws Exception {
        Cursor cursor=null;
        db.execSQL("delete from instoragescancodes");
        //下面执行的SQL语句将数据表的ID归零,因为在创建表后ID列的值会在sqlite_sequence表中进行记录
        db.execSQL("UPDATE sqlite_sequence SET seq = 0 WHERE name ='instoragescancodes'");
        String str_Sql="select _id,货位号,材料条码,扫码人,编码,时间 from instoragescancodes order by _id desc";
        cursor=sqliteQueryData.RowsCols(db,str_Sql);
        return cursor;
    }

    @Override
    public String deleteCriteriaData(SQLiteDatabase db, String str_Sql) throws Exception {
        String strInfo="";
        db.execSQL(str_Sql.toString());
        strInfo="根据条件删除数据完毕!";
        Log.d("debug","根据条件删除数据完毕!\n"+str_Sql);
        return strInfo;
    }

    @Override
    public String checkCreateTable(SQLiteDatabase db) throws Exception {
        String strCreateTableInfo="";
        //执行DDL创建数据表
        Cursor cursor = null;
        String oSql = "select count(*) as c from sqlite_master where type ='table' and name ='instoragescancodes' ";
        try {
            int count = sqliteQueryData.getCount(db, oSql);
            if (count == 0) {
                strCreateTableInfo = "数据表InStorageScanCodes不存在?";
                Log.d("debug", "数据表InStorageScanCodes不存在?");
                String str_Sql = "create table instoragescancodes(";
                str_Sql = str_Sql + "_id INTEGER primary key autoincrement,";
                str_Sql = str_Sql + "货位号 text not null,";
                str_Sql = str_Sql + "材料名称 text null,";
                str_Sql = str_Sql + "材料规格 text null,";
                str_Sql = str_Sql + "颜色 text null,";
                str_Sql = str_Sql + "库管员 text  null,";
                str_Sql = str_Sql + "厂家缩写 text  null,";
                str_Sql = str_Sql + "CBW对照号 text  null,";
                str_Sql = str_Sql + "单位 text  null,";
                str_Sql = str_Sql + "材料条码 text null,";
                str_Sql = str_Sql + "厂家代码 text null,";
                str_Sql = str_Sql + "生产日期 text null,";
                str_Sql = str_Sql + "批号 text null,";
                str_Sql = str_Sql + "数量 int null,";
                str_Sql = str_Sql + "库管编码 text null,";
                str_Sql = str_Sql + "码文 text not null,";
                str_Sql = str_Sql + "扫码人 text not null,";
                str_Sql = str_Sql + "扫码时间 text not null,";
                str_Sql = str_Sql + "扫码仓库 text not null,";
                str_Sql = str_Sql + "上传标记 int null";
                str_Sql = str_Sql + ")";
                db.execSQL(str_Sql.toString());
                //提示信息
                strCreateTableInfo = "数据表InStorageScanCodes创建完毕!";
                Log.d("debug", "数据表InStorageScanCodes创建完毕!");
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return strCreateTableInfo;

    }

    @Override
    public String  createTable(SQLiteDatabase db) throws Exception {
        String strCreateTableInfo="";
        //执行DDL创建数据表
        Cursor cursor = null;
        String oSql = "select count(*) as c from sqlite_master where type ='table' and name ='instoragescancodes' ";

        try {
            int count = sqliteQueryData.getCount(db, oSql);
            if (count > 0) {
                strCreateTableInfo="数据表InStorageScanCodes已存在?";
                db.execSQL("drop table instoragescancodes");
                Log.d("debug", "数据表InStorageScanCodes删除完毕!");
            }
            String str_Sql = "create table instoragescancodes(";
            str_Sql = str_Sql + "_id INTEGER primary key autoincrement,";
            str_Sql = str_Sql + "货位号 text not null,";
            str_Sql = str_Sql + "材料名称 text null,";
            str_Sql = str_Sql + "材料规格 text null,";
            str_Sql = str_Sql + "颜色 text null,";
            str_Sql = str_Sql + "库管员 text  null,";
            str_Sql = str_Sql + "厂家缩写 text  null,";
            str_Sql = str_Sql + "CBW对照号 text  null,";
            str_Sql = str_Sql + "单位 text  null,";
            str_Sql = str_Sql + "材料条码 text null,";
            str_Sql = str_Sql + "厂家代码 text null,";
            str_Sql = str_Sql + "生产日期 text null,";
            str_Sql = str_Sql + "批号 text null,";
            str_Sql = str_Sql + "数量 int null,";
            str_Sql = str_Sql + "库管编码 text null,";
            str_Sql = str_Sql + "码文 text not null,";
            str_Sql = str_Sql + "扫码人 text not null,";
            str_Sql = str_Sql + "扫码时间 text not null,";
            str_Sql = str_Sql + "扫码仓库 text not null,";
            str_Sql = str_Sql + "上传标记 int null";
            str_Sql = str_Sql + ")";
            db.execSQL(str_Sql.toString());
            //提示信息
            strCreateTableInfo = "手持机【入库扫码表】数据清理完毕!";
            Log.d("debug", "数据表InStorageScanCodes创建完毕");


        } catch (SQLException e) {
            e.printStackTrace();
        }
        return strCreateTableInfo;
    }

    @Override
    public InStorage findById(SQLiteDatabase db, long Id) throws Exception {
        return null;
    }

    @Override
    public List<InStorage> findAll(SQLiteDatabase db) throws Exception {
        return null;
    }

    @Override
    public List<InStorage> findAll(SQLiteDatabase db, String queryBuilder) throws Exception {
        return null;
    }

    @Override
    public List<InStorage> findAll(SQLiteDatabase db, int page, int rowsPerPage) throws Exception {
        return null;
    }

    @Override
    public List<InStorage> findAll(SQLiteDatabase db, String queryBuilder, int page, int rowsPerPage) throws Exception {
        return null;
    }

    @Override
    public int getTotalPages(SQLiteDatabase db, int rowsPerPage) throws Exception {
        return 0;
    }

    @Override
    public int getTotalPages(SQLiteDatabase db, String customQuery, int rowsPerPage) throws Exception {
        return 0;
    }

    @Override
    public Cursor queryAll(SQLiteDatabase db) throws Exception {
        String str_Sql="select _id,";
        str_Sql = str_Sql + "货位号,";
        str_Sql = str_Sql + "材料名称,";
        str_Sql = str_Sql + "材料规格,";
        str_Sql = str_Sql + "颜色,";
        str_Sql = str_Sql + "库管员,";
        str_Sql = str_Sql + "厂家缩写,";
        str_Sql = str_Sql + "CBW对照号,";
        str_Sql = str_Sql + "单位,";
        str_Sql = str_Sql + "材料条码,";
        str_Sql = str_Sql + "厂家代码,";
        str_Sql = str_Sql + "生产日期,";
        str_Sql = str_Sql + "批号,";
        str_Sql = str_Sql + "数量,";
        str_Sql = str_Sql + "库管编码,";
        str_Sql = str_Sql + "码文,";
        str_Sql = str_Sql + "扫码人,";
        str_Sql = str_Sql + "扫码时间,";
        str_Sql = str_Sql + "扫码仓库,";
        str_Sql = str_Sql + "上传标记";
        str_Sql = str_Sql + " from instoragescancodes";
        //String oSql="select * from contacts";
        //Cursor cursor= db.rawQuery(oSql,null);
        Cursor cursor=sqliteQueryData.RowsCols(db,str_Sql);
        return cursor;
    }




}
4. 工具类
4.1 DAO工厂 (util/DAOFactory.java)
java 复制代码
package cbw.materials.util;

import cbw.materials.dao.BillOfMaterialDAO;
import cbw.materials.dao.InStorageDAO;
import cbw.materials.dao.ManufacturerDAO;
import cbw.materials.dao.StoreKeeperDAO;
import cbw.materials.dao.impl.BillOfMaterialDAOSqliteImpl;
import cbw.materials.dao.impl.InStorageDAOSqliteImpl;
import cbw.materials.dao.impl.ManufacturerDAOSqliteImpl;
import cbw.materials.dao.impl.StoreKeeperDAOSqliteImpl;

/**
 * DAO工厂类
 */
public class DAOFactory {
    public static Object getInstance(String type) {
        if (type.equals("InStorageDAO")) {
            return new InStorageDAOSqliteImpl();
        } else if (type.equals("BillOfMaterialDAO")) {
            return new BillOfMaterialDAOSqliteImpl();
        } else if (type.equals("ManufacturerDAO")) {
            return new ManufacturerDAOSqliteImpl();
        } else if (type.equals("StoreKeeperDAO")) {
            return new StoreKeeperDAOSqliteImpl();
        }
        return null;
    }
}
4.2 SQLite数据库连接 (util/SqliteDBConnection.java)
java 复制代码
package cbw.materials.util;

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

/**
 * SQLite数据库连接管理
 */
public class SqliteDBConnection {
    static final String DATABASE_NAME = "IMDB";
    static final int DATABASE_VERSION = 1;
    private SQLiteDatabase db;
    private DatabaseHelper DBHelper;

    /**
     * 构造函数
     */
    public SqliteDBConnection(Context ctx) {
        this.DBHelper = new DatabaseHelper(ctx);
    }

    /**
     * 打开数据库连接
     */
    public SqliteDBConnection open() throws SQLException {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    /**
     * 获取数据库实例
     */
    public SQLiteDatabase getDb() {
        return db;
    }

    /**
     * 关闭数据库连接
     */
    public void close() {
        DBHelper.close();
    }

    /**
     * 数据库帮助类
     */
    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // 数据库创建时执行
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // 数据库升级时执行
        }
    }
}
5. 控制器 (controller/InStorageScanCode.java)
java 复制代码
package cbw.materials.controller;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import cbw.materials.dao.InStorageDAO;
import cbw.materials.entity.InStorage;
import cbw.materials.util.DAOFactory;
import cbw.materials.util.SqliteDBConnection;

/**
 * 入库扫码控制器
 */
public class InStorageScanCode extends AppCompatActivity {
    private SQLiteDatabase db;
    private InStorageDAO dao = (InStorageDAO) DAOFactory.getInstance("InStorageDAO");
    private SqliteDBConnection sda;
    private static String userName;

    // 扫码广播接收器
    private BroadcastReceiver mScanReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            byte[] barocode = intent.getByteArrayExtra("barocode");
            int barocodelen = intent.getIntExtra("length", 0);
            String barcodeStr = new String(barocode, 0, barocodelen);

            // 解析扫码数据并保存到SQLite
            if (strCode != null && strHwh != null) {
                String[] codes = strCode.split(",");
                SaveDataToSqlite(codes, strHwh);
            }
        }
    };

    // 保存数据到SQLite
    private void SaveDataToSqlite(String[] Codes, String Hwh) {
        List<InStorage> inStorages = new ArrayList<>();
        for (int i = 0; i < Codes.length; i++) {
            InStorage inStorage = InStorage.newInstance();
            inStorage.setStr_货位号(Hwh);
            inStorage.setStr_码文(Codes[i]);
            inStorage.setStr_扫码人(userName);
            inStorage.setStr_扫码时间(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            
            // 解析条码信息
            String str_code = Codes[i] + " ";
            inStorage.setStr_材料条码(str_code.substring(0, 5));
            inStorage.setStr_厂家代码(str_code.substring(5, 7));
            inStorage.setStr_生产日期(ConvertDate(str_code.substring(7, 13)));
            inStorage.setStr_批号(str_code.substring(13, 14));
            inStorage.setInt_数量(Integer.parseInt(str_code.substring(14, 20)));
            inStorage.setStr_库管编码(str_code.substring(20, 21));
            
            inStorages.add(inStorage);
        }

        try {
            if (sda == null) {
                OpenOrCreateDatabase();
            }
            String str_CreateTableInfo = dao.checkCreateTable(db);
            Cursor cursor = dao.insertDatas(db, inStorages);
            Refresh_ListView(cursor);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 删除数据异步任务
    private class DeleteDataOnClickListenerImpl implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            // 确认对话框
            Dialog dialog = dialogTool.dialog(InStorageScanCode.this, "提示信息?", R.drawable.user, "你确定要删除ID为<<" + P_Id + ">>的记录吗?");
            dialog.show();
            executeFunctionName = "DeleteData";
            new QueryAddressTask().execute("DeleteData");
        }
    }

    // 异步任务类
    class QueryAddressTask extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... params) {
            // 处理后台任务
        }

        @Override
        protected void onPostExecute(String result) {
            if (executeFunctionName.equals("DeleteData")) {
                try {
                    Cursor cursor = dao.deleteData(db, Long.parseLong(P_Id));
                    Toast.makeText(InStorageScanCode.this, "数据删除完毕!", Toast.LENGTH_LONG).show();
                    Refresh_ListView(cursor);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 创建或打开数据库
    private void OpenOrCreateDatabase() {
        sda = new SqliteDBConnection(this);
        sda.open();
        db = sda.getDb();
    }

    // 关闭数据库
    private void CloseDatabase() {
        if (db != null && db.isOpen()) {
            db.close();
            sda.close();
            db = null;
            sda = null;
        }
    }

    // 刷新列表
    private void Refresh_ListView(Cursor cursor) {
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                this,
                R.layout.activity_in_storage_scan_code_listview,
                cursor,
                new String[]{"_id", "货位号", "材料名称", "材料规格", "颜色", "库管员", "厂家缩写", "CBW对照号", "单位", 
                        "材料条码", "厂家代码", "生产日期", "批号", "数量", "库管编码", "码文", "扫码人", "扫码时间", "扫码仓库"},
                new int[]{R.id.textView_listView_InStorageScanCode_DataList_ID, ...});
        listView_InStorageScanCode_DataList.setAdapter(adapter);
    }

    // 其他方法...
}
相关推荐
键来大师2 小时前
Android16 设置壁纸出现APK重启问题和悬浮控件等图标变成黑色图框
android·framework·rk3576
_李小白2 小时前
【Android FrameWork】第四十二天:PMS main函数
android
BoomHe3 小时前
Android LMK(Low Memory Killer)机制
android
时光呀时光慢慢走3 小时前
MAUI 开发安卓 MQTT 客户端:实现远程控制 (完整源码 + 避坑指南)
android·物联网·mqtt·c#
成都大菠萝4 小时前
2-2-44 快速掌握Kotlin-函数类型操作
android
有位神秘人4 小时前
Android中获取设备里面的音频文件
android
2501_915918415 小时前
使用 HBuilder 上架 iOS 应用时常见的问题与应对方式
android·ios·小程序·https·uni-app·iphone·webview
farewell-Calm6 小时前
01_Android快速入门
android
helloCat6 小时前
记录CI/CD自动化上传AppGallery遇到的坑
android·前端·api