我正在使用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集中找到的第一条记录,并保持所有其他记录不变
更改此查询以返回文件名而不是*
从文件名=的fileBlock删除((从文件名=的fileBlock删除*?按ID限制1偏移1的顺序排列)
到
从文件块中删除文件名=(从文件块中删除文件名,其中文件名=?按ID限制1偏移量1的顺序排序)