为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Java程序跳过MySQL数据库中的前n行?

如何使用Java程序跳过MySQL数据库中的前n行?

撒科打诨 2023-11-01 17:09:42
我有个问题。我正在编写一个java应用程序,它将移动一些文件。由于性能问题,用户可以选择要移动的文件数量。如果文件被移动,我的数据库将使用新路径进行更新。我已经编写了该代码,但现在的问题是它仅适用于第一个文件,例如 10 个文件。然后应用程序终止。所以到目前为止,一切都按预期进行。现在我想再次启动应用程序,它将再次移动 10 个文件。现在的问题是,它再次从数据库顶部启动,并尝试移动前 10 个文件,这些文件在我的应用程序的第一次运行中已被移动。那么我怎样才能告诉我的程序它应该跳过前 10(n) 个文件呢?我的想法是用 1 和 0 向数据库生成一个新列。每个已移动的文件都会得到一个 1,并且默认设置为零。然后程序检查是否有 1 或 0,如果有 1,则继续处理下一行。但我没有找到如何使用 java 在数据库中创建列的方法。下一个问题是该列应在应用程序运行后删除。我尝试编写一个程序,结果发现:DELIMITER $$CREATE PROCEDURE Alter_Table()BEGIN  DECLARE _count INT;    SET _count =( SELECT COUNT(*)              FROM INFORMATION_SCHEMA.COLUMNS              WHERE TABLE_NAME = 'test_cm_documents' AND                    COLUMN_NAME='subscribe_all');  IF _count = 0 THEN    ALTER TABLE test_cm_documents    ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,        ADD COLUMN subscribe_category varchar(512) DEFAULT NULL;  END IF;END$$DELIMITER ;如果我将它粘贴到 MySQL 命令行中,它可以工作,但当我尝试使用 Java 程序执行它时,它不起作用。我还尝试将其保存为 *.sql 文件,但无法从 Java 程序中执行它。我有两个 Java 程序,我试图用它们来解决我的问题,但出现了一些错误。import java.io.*;public class CmdExec {public static void main(String[] args) {    try {        String line;        Process p = Runtime.getRuntime().exec(                "mysql -u myuser -p xxxx -d cm_database -h 3306 -f C://Users//****//Desktop//procedure.sql");        BufferedReader input =                new BufferedReader                    (new InputStreamReader(p.getInputStream()));        while ((line = input.readLine()) != null) {            System.out.println(line);        }        input.close();    }catch(Exception err) {        err.printStackTrace();    }}}
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

OFFSET 是您正在寻找的:

select * from table_name limit x offset y;-- 跳过 y 行

或者使用带有两个参数的 LIMIT。例如,要返回 30 行并跳过前 10 行(将返回 11 到 40),请使用:

select * from table_name limit 10, 30;


查看完整回答
反对 回复 2023-11-01
?
湖上湖

TA贡献2003条经验 获得超2个赞

使用 Cte 查询跳过前 10(n) 个文件并获取最近保存的同一行。例如


UID GID 中

1 1 1

2 1 2

3 1 2

4 1 2

5 2 1

6 2 2

7 2 2

8 2 3

9 2 4


with Demo as

(

select *, ROW_NUMBER() over (partition by GID, MID order by UID) as ROWNUMBER  from Table1

)

cte 创建一个表


UID     GID   MID   ROWNUMBER

1        1      1      1

2        1      2      1

3        1      2      2

4        1      2      3 

5        2      1      1

6        2      2      1

7        2      2      2

8        2      3      5

9        2      4      4


select  * from Demo ROWNUMBER  = 1


查看完整回答
反对 回复 2023-11-01
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信