如何使用Java检查SQLite数据库文件是否存在?

时间:2011-08-17 23:05:54

标签: java sqlite database-connection

我从用户那里得到数据库文件的名称,我想检查该文件是否已经存在。如果确实存在,我想向用户显示错误消息,但我不知道如何检查该文件是否存在。

public static void databaseConnect(String dbName) throws Exception
{
  if (/*same name exists*/) // How do I check this?
  {
    System.out.print("This database name already exists");
  }
  else
  {
    Class.forName("SQLite.JDBCDriver").newInstance();           
    conn = DriverManager.getConnection("jdbc:sqlite:/"+ dbName);
    stat = conn.createStatement(); 
  } 
}

6 个答案:

答案 0 :(得分:13)

public static void databaseConnect(String dbName) throws Exception {

   File file = new File (dbName);

  if(file.exists()) //here's how to check
     {
         System.out.print("This database name already exists");
     }
     else{

           Class.forName("SQLite.JDBCDriver").newInstance();            
           conn = DriverManager.getConnection("jdbc:sqlite:/"+ dbName);
           stat = conn.createStatement(); 

     }

答案 1 :(得分:3)

假设您的dbName参数指示了SQLite文件的路径(尽管有“-wal”和“-shm”伴随文件),您可以使用Java java.io.File类和{{3} }:

final File f = new File(dbName);
if (f.exists())
{
  if (f.isDirectory())
  {
    // Warn about the designated name being a directory.
  }
  else
  {
    // Warn about the designated name already existing as a file.
  }
}

其他检查也是合理的,例如流程是否有权创建文件,尽管最终SQLite会做得更好its exists() predicate

答案 2 :(得分:1)

我发现执行此操作的最佳方法是检查文件的大小。如果你执行:

return new File(DB_NAME).exists()应该等于True。

你应该得到真正的回报,因为它会创造它。而是检查以确保文件大小大于0.至少在这种情况下,您知道文件中的数据而没有附加和查询结果。

取而代之的是:

return new File(DB_NAME).length() > 0

答案 3 :(得分:1)

您可以执行以下操作,我猜您认为您在执行“ new File(name)”时正在目录中创建一个新文件,对于我来说这是红色的,但事实并非如此

    public static void databaseConnect(String dbName) throws Exception {

      // new File(filename) does not create a new 
      // file in your file system
      File file = new File (dbName);

      if (file.exists()) 
      { // the file already existed and the program will enter this block
        System.out.print("Do something");
      }
      else 
      { //the file did not exist and you can send your error msg
        System.out.print("Do something else"); 
      } 
    }

我好几次误解了你的问题,但我认为就是这样。

答案 4 :(得分:0)

这样的东西?

public boolean databaseExist()
{
    File dbFile = new File(DB_PATH + DB_NAME);
    return dbFile.exists();
}

答案 5 :(得分:0)

最近,可能会有所帮助:

public boolean didPackageCreate() {

    File dbfile = this.getDatabasePath("app.db");
    if(dbfile.exists()){
        // db exist
    }else{
       // db doesn't exist
    }
}