java - 检查表存在于sqlite中

时间:2014-11-19 02:30:52

标签: java sqlite

有没有办法检查表格是否已经存在。它总是提示我

[SQLITE_ERROR] SQL错误或缺少数据库(table player_record已经存在)。

这就是我想做的事情

if(player_record is existing){
  don't create table;
}else{
  create table;
}

4 个答案:

答案 0 :(得分:3)

对于我的项目,我创建了一个看起来像这样的方法。它不使用查询,而是使用数据库的元数据。

    public boolean tableExists(String tableName){
        connect();
        try{
            DatabaseMetaData md = conn.getMetaData();
            ResultSet rs = md.getTables(null, null, tableName, null);
            rs.last();
             return rs.getRow() > 0;
        }catch(SQLException ex){
            Logger.getLogger(SQLite.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

这是一个与之相关的课程:

public class SQL{

    protected Connection conn = null;
    protected String dbName = "mydatabase.db";

    public void connect(){
        if(conn != null){
            return;
        }
        try{
            Class.forName("org.sqlite.JDBC");
            conn = DriverManager.getConnection("jdbc:sqlite:" + dbName);
        }catch(ClassNotFoundException | SQLException e){
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
        }
    }

    public boolean tableExists(String tableName){
        connect();
        try{
            DatabaseMetaData md = conn.getMetaData();
            ResultSet rs = md.getTables(null, null, tableName, null);
            rs.last();
            return rs.getRow() > 0;
        }catch(SQLException ex){
            Logger.getLogger(SQLite.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
}

然后我就这样使用它:

SQL sql = new SQL();
if(sql.tableExists("myTableName")){
    // Table Exists!
}else{
    // Table doesn't exist.
}

答案 1 :(得分:2)

要查找表是否存在使用查询

SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';

执行此操作,然后检查名称是否为空

答案 2 :(得分:1)

SQLite的CREATE TABLE statement具有IF NOT EXISTS子句:

CREATE TABLE IF NOT EXISTS player_record (
    [...]
);

答案 3 :(得分:0)

如果不存在则创建表-对我不起作用。 如果表不存在,sqlite_master的语句也会出错,因此请尝试使用catch块解决问题:

try {
String tableExists = "SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';";        
Statement statement = connection.createStatement();
ResultSet ex = statement.executeQuery(tableExists);
String exS = ex.getString(1);       
System.out.println("Table " + exS + " exists.");        
}catch (SQLException e){
System.out.println("Table NOT exists.");        
}