猿问

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

我有个问题。我正在编写一个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();

    }

}


}


撒科打诨
浏览 103回答 2
2回答

慕工程0101907

OFFSET 是您正在寻找的:select * from table_name limit x offset y;-- 跳过 y 行或者使用带有两个参数的 LIMIT。例如,要返回 30 行并跳过前 10 行(将返回 11 到 40),请使用:select * from table_name limit 10, 30;

湖上湖

使用 Cte 查询跳过前 10(n) 个文件并获取最近保存的同一行。例如UID GID 中1 1 12 1 23 1 24 1 25 2 16 2 27 2 28 2 39 2 4with Demo as(select *, ROW_NUMBER() over (partition by GID, MID order by UID) as ROWNUMBER  from Table1)cte 创建一个表UID     GID   MID   ROWNUMBER1        1      1      12        1      2      13        1      2      24        1      2      3 5        2      1      16        2      2      17        2      2      28        2      3      59        2      4      4select  * from Demo ROWNUMBER  = 1
随时随地看视频慕课网APP

相关分类

Java
我要回答