有没有办法检查表格是否已经存在。它总是提示我
[SQLITE_ERROR] SQL错误或缺少数据库(table player_record已经存在)。
这就是我想做的事情
if(player_record is existing){
don't create table;
}else{
create table;
}
答案 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.");
}