Java 检查数据库是否存在

Java 检查数据库是否存在,java,database,file,jdbc,parameters,Java,Database,File,Jdbc,Parameters,在下面的代码中,我解析了所有的文件名,然后用它来检查 查看数据库中是否存在。下面我做错了什么?如果是,你能告诉我吗 同样在execute命令中,我得到一个错误,说listofFiles不能解析为变量 public class FileGetName { public String fileName; public static void main(String[] args) { File folder = new File("C"); File[] li

在下面的代码中,我解析了所有的文件名,然后用它来检查 查看数据库中是否存在。下面我做错了什么?如果是,你能告诉我吗

同样在execute命令中,我得到一个错误,说listofFiles不能解析为变量

public class FileGetName {
public String fileName;
    public static void main(String[] args) {
        File folder = new File("C");
        File[] listOfFiles = folder.listFiles();

            for (int i = 0; i < listOfFiles.length; i++) {
              if (listOfFiles[i].isFile()) {
                System.out.println(listOfFiles[i].getName());
              } else if (listOfFiles[i].isDirectory()) {
                System.out.println("Directory " + listOfFiles[i].getName());
              }
            }
    }

    public void doesFileExistinDB(String fileName) {
        PreparedStatement pst = null;
        Connection conn = null;
        ResultSet rs= null;
        try {
            conn = DBConnect.getInstance().dbOracleConnect();    
            String sql= "select * from PO_Parent_List where" +
            " po_number in (fileName)";
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
        }
        catch (Exception e) {
            System.out.println(e);
            }
        }



    public void execute() {
        if (listOfFiles[i].isFile())
        {
            String fileName = listOfFiles[i].getName();
            System.out.println(fileName);
            doesFileExistInDb(fileName);
        }
    }
公共类FileGetName{
公共字符串文件名;
公共静态void main(字符串[]args){
文件夹=新文件(“C”);
File[]listOfFiles=folder.listFiles();
for(int i=0;i
您需要在
public void execute()
方法中传递文件列表,如:

public void execute(File[] listOfFiles){

}
这就是编译错误的原因,因为无法将
listOfFiles
解析为变量

public class FileGetName {
public String fileName;
    public static void main(String[] args) {
        File folder = new File("C");
        File[] listOfFiles = folder.listFiles();

            for (int i = 0; i < listOfFiles.length; i++) {
              if (listOfFiles[i].isFile()) {
                System.out.println(listOfFiles[i].getName());
              } else if (listOfFiles[i].isDirectory()) {
                System.out.println("Directory " + listOfFiles[i].getName());
              }
            }
    }

    public void doesFileExistinDB(String fileName) {
        PreparedStatement pst = null;
        Connection conn = null;
        ResultSet rs= null;
        try {
            conn = DBConnect.getInstance().dbOracleConnect();    
            String sql= "select * from PO_Parent_List where" +
            " po_number in (fileName)";
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
        }
        catch (Exception e) {
            System.out.println(e);
            }
        }



    public void execute() {
        if (listOfFiles[i].isFile())
        {
            String fileName = listOfFiles[i].getName();
            System.out.println(fileName);
            doesFileExistInDb(fileName);
        }
    }
或者您需要将变量
listOfFiles
声明到类级别

编辑:(无法理解从何处调用execute)


listOfFiles
特定于
main()
方法。若要使其对类的其他部分可见,必须将其声明为实例变量,例如:

public class FileGetName {
    public String fileName;
    public File[] listOfFiles;
您的方法
doesFileExistinDB()
应该返回
boolean
,并测试
rs
是否返回多个结果,以确保找到文件名。请参阅示例。

2件事:

  • 您的文件名没有在查询中传递。您基本上是在硬编码字符串“fileName”,而不是您的文件名

  • 考虑返回布尔值以显示文件是否存在(如果结果集至少有1个条目,则文件存在):

  • 因此,您的方法变成:

    public boolean doesFileExistinDB(String fileName) {
        PreparedStatement pst = null;
        Connection conn = null;
        ResultSet rs= null;
        try {
            conn = DBConnect.getInstance().dbOracleConnect();    
            String sql= "select * from PO_Parent_List where" +
            " po_number in (?)";
            pst = conn.prepareStatement(sql);
            pst.setString(1, fileName); 
            rs = pst.executeQuery();
            if (rs.next) {
                //You have data!
                return true;
            }
        }
        catch (Exception e) {
            System.out.println(e);
        }
        return false;
    }
    

    listofFiles
    是在
    main
    中声明的,而不是在函数
    execute()
    中声明的。您可以通过向函数添加一个参数来传递
    listofFiles

    public void execute(File[] listOfFiles){
    
    }
    
    但您将遇到其他问题。在您的
    execute()
    中。当您执行以下操作时:

    if (listOfFiles[i].isFile())
    
    变量“i”未初始化,但我认为您指的是:

    for (int i = 0; i < listOfFiles.length; i++)
    

    <>编辑:一定要查看所有的答案,你的代码需要更多的修改,很多人指出你应该改变的东西。

    你没有对查询返回的<代码>结果集< />进行任何操作。考虑在“代码”上返回一个布尔值。数据库。
    新文件(“C”)
    注意:这是问题的后续内容,我假设OP将答案中的代码放在了错误的位置……什么时候调用了
    执行
    ?我该如何处理第2个问题?我将它附加到我的答案中。因此,它应该是公共布尔doesFileExistinDB(字符串文件名)?这是您的选择,但我建议您这样做。通过这种方式,您可以在方法外部告诉express是否找到了该文件。我再次更新了我的答案。因为您没有在execute方法内部声明I,也没有在类级别声明两者。
    public void execute(File[] listOfFiles, int i){
    
    }