SQLite delete返回多个记录,我想限制为只删除找到的第一条记录

问题描述 投票:0回答:1

我正在使用SQLite 3.15和Java 8。

String createTableQueryPK = "CREATE TABLE IF NOT EXISTS fileBlock (id not null,filename not null, PRIMARY KEY(id,filename))";

我的删除功能

    public void deleteRecord(String filename) {
    String deleteQuery = "delete from fileBlock where filename=(select * from fileBlock where filename=? order by id limit 1 offset 1)";
            //"delete from fileBlock where filename= (select id, filename from fileBlock where filename=? order by id LIMIT 1);";
    try {
        if(c != null) {
            PreparedStatement prep  = c.prepareStatement(deleteQuery);
            //prep.setInt(1, id);
            prep.setString(1, filename);
            prep.execute();
            System.out.println("record deleted ");
        }
    } catch(Exception e) {
        System.out.println("Error " + e.getMessage());

获取以下错误:错误[SQLITE_ERROR] SQL错误或缺少数据库(子选择返回2列-预期为1)我已经尝试过以下查询的任何想法:

delete from fileBlock where filename in (select Distinct filename from fileBlock where filename='test9.txt')

这将删除所有记录

该应用程序的想法是许多来自不同来源的文件,有些文件具有相同的文件名或相同的用户,试图加载相同的文件

该应用程序将如何工作,将文件名提交给删除功能,如果有,则在其中记录第一条记录并将其删除。是的,我知道这不是一个好的设计

问题是:如何删除在ressult集中找到的第一条记录,并保持所有其他记录不变

java sqlite delete-row
1个回答
0
投票

更改此查询以返回文件名而不是*

从文件名=的fileBlock删除((从文件名=的fileBlock删除*?按ID限制1偏移1的顺序排列)

从文件块中删除文件名=(从文件块中删除文件名,其中文件名=?按ID限制1偏移量1的顺序排序)

© www.soinside.com 2019 - 2024. All rights reserved.