我有个问题。我正在编写一个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();
}
}
}
慕工程0101907
湖上湖
相关分类