m0_74474210 2024-05-14 08:41 采纳率: 93.8%
浏览 3
已结题

实现提交的信息不重复,重复就不添加到数据库,如果不完全一致就修改,怎么实现?

使用的sqlite,用的三个edittext获取的数据,是需要将这三个值去数据库比对吗?最简单快捷的方法是?
在最开始新建表,使用了id,给他设置为了主键,并且自动增加,删除数据后,id不会接着删除的编号,所以我把id删除了,没有再设主键,
因为创建了数据库,不会再创建,所以我把data的database给删除了,但是再运行的时候没有出现database数据库,但是在app in数据库还是原来的,ID仍为主键,也能增加删除和查询,只是少了ID,感觉改了和没改一样,怎么解决?
查询的过程中,怎么样让数据都显示在listview上,好像也是给listview添加适配器,看他们使用的simpleadapter给她添加的适配器,
我希望数据一行一行的显示,在xml布局里添加了三个text框,用来显示名字+数据,年龄+数据,重量+数据,三个应该够了把?怎么实现适配器以及显示?
问题有点多,感谢解答

  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-14 08:41
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是如何在使用SQLite数据库的Android应用中实现数据的唯一性检查,确保不重复添加数据到数据库中,并且如果新数据与数据库中已有的数据不完全一致时,能够更新数据库中的相应记录。同时,您还遇到了关于数据库结构变更、数据在ListView中显示的问题。

    【问题出现原因】:

    1. 数据库的唯一性检查:您需要确保添加到数据库的数据不会与现有数据重复,这通常涉及到对数据库中现有数据的查询和比较。
    2. 数据库结构变更:您提到删除了ID主键,这可能导致数据库结构没有按照您的预期变更,因为SQLite默认会保留原有的结构。
    3. 数据在ListView中显示:您希望将查询到的数据以行的形式显示在ListView中,需要一个合适的适配器来实现这一功能。

    【问题解决方案】:

    1. 数据唯一性检查:使用SELECT查询来检查数据库中是否已存在特定的数据组合。如果存在,执行更新操作;如果不存在,插入新数据。
    2. 数据库结构变更:要改变数据库结构,您需要创建一个新表,将旧表的数据迁移到新表,然后删除旧表。
    3. ListView数据展示:使用自定义的Adapter来填充ListView,您可以创建一个自定义的布局文件,每个条目包含三个TextView,用于显示名字、年龄和重量。

    【提供代码】: 以下是一些示例代码,用于解决您提出的问题:

    // 数据库帮助类
    public class DatabaseHelper extends SQLiteOpenHelper {
        // ... 其他代码
    
        // 更新数据的方法
        public void updateDataIfExist(String name, int age, float weight) {
            SQLiteDatabase db = this.getWritableDatabase();
            String query = "SELECT * FROM your_table_name WHERE name = ?";
            Cursor cursor = db.rawQuery(query, new String[]{name});
            if (cursor.getCount() > 0) {
                // 数据存在,更新数据
                String updateQuery = "UPDATE your_table_name SET age = ?, weight = ? WHERE name = ?";
                db.execSQL(updateQuery, new Object[]{age, weight, name});
            } else {
                // 数据不存在,插入新数据
                String insertQuery = "INSERT INTO your_table_name(name, age, weight) VALUES (?, ?, ?)";
                db.execSQL(insertQuery, new Object[]{name, age, weight});
            }
            cursor.close();
        }
    }
    
    // 自定义Adapter类
    public class CustomAdapter extends BaseAdapter {
        private Context context;
        private List<YourDataType> dataList;
    
        public CustomAdapter(Context context, List<YourDataType> dataList) {
            this.context = context;
            this.dataList = dataList;
        }
    
        @Override
        public int getCount() {
            return dataList.size();
        }
    
        @Override
        public Object getItem(int position) {
            return dataList.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.your_list_item_layout, parent, false);
            }
            TextView textViewName = convertView.findViewById(R.id.textViewName);
            TextView textViewAge = convertView.findViewById(R.id.textViewAge);
            TextView textViewWeight = convertView.findViewById(R.id.textViewWeight);
            
            YourDataType data = dataList.get(position);
            textViewName.setText(data.getName());
            textViewAge.setText(String.valueOf(data.getAge()));
            textViewWeight.setText(String.valueOf(data.getWeight()));
            
            return convertView;
        }
    }
    
    // ListView的设置
    ListView listView = findViewById(R.id.listView);
    CustomAdapter adapter = new CustomAdapter(this, dataList);
    listView.setAdapter(adapter);
    

    【代码运行方式】:将上述代码集成到您的Android项目中,确保您已经创建了相应的数据库表和数据模型。

    【代码预期运行结果】:当您尝试添加或更新数据时,应用将检查数据库中是否已存在该数据,然后相应地执行插入或更新操作。ListView将显示查询到的数据,每行包含三个TextView,分别显示名字、年龄和重量。

    【推荐相关链接】:

    请根据您的具体情况调整上述代码,并确保您的应用有适当的权限来操作数据库。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月14日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?