检查数据库是否存在

时间:2013-06-10 16:35:45

标签: java database file jdbc parameters

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

同样在执行命令中,我收到一条错误,说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);
        }
    }

4 个答案:

答案 0 :(得分:2)

需要在listOfFiles方法中传递 public void execute(),如:

public void execute(File[] listOfFiles){

}

这就是为什么你得到编译错误,因为listOfFiles无法解析为变量。

您需要将变量listOfFiles声明为班级

编辑(无法理解您调用执行的位置)

int i = 0;//Declare i to class level.
public void execute(File[] listOfFiles) {
        if (listOfFiles[i].isFile())
        {
            String fileName = listOfFiles[i].getName();
            System.out.println(fileName);
            doesFileExistInDb(fileName);
            i++;
        }
    }

答案 1 :(得分:0)

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

public class FileGetName {
    public String fileName;
    public File[] listOfFiles;

您的方法doesFileExistinDB()应该返回boolean并测试rs是否还会返回一个结果,以确保找到文件名。有关示例,请参阅Java ResultSet how to check if there are any results

答案 2 :(得分:0)

2件事:

  1. 您的fileName未在查询中传递。你基本上硬编码String&#34; fileName&#34;而不是你的fileName。

  2. 考虑返回一个布尔值,以显示文件是否存在(如果resultSet至少有一个条目,您的文件存在):

  3. 因此,您的方法变为:

    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;
    }
    

答案 3 :(得分:0)

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

public void execute(File[] listOfFiles){

}

但你会遇到别人的问题。在execute()中。当你在做的时候:

if (listOfFiles[i].isFile())

变量'i'未初始化,但我认为您正在参考:

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

如果您想访问i,则需要在execute中致电for。您的方法执行应该如下所示:

public void execute(File[] listOfFiles, int i){

}

编辑:请务必查看所有答案,您的代码需要进行更多修改,而且很多人都指出了您应该更改的内容。

相关问题