我正在Netbeans 7上创建一个应用程序!我想我的应用程序有一个小代码在主,使它可以创建一个Java DB连接检查,看看是否存在数据库和关联表,如果不创建数据库和表在它。如果您能提供一个示例代码,那就太好了!我已经看过http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/,但我仍然不知道如何检查现有的数据库创建之前!
我想我的应用程序有一个小代码在主,使它可以创建一个Java DB连接检查,看看是否数据库和关联表存在,如果不创建数据库和表在它。
您可以在JDBC URL中添加create=true
属性。如果databaseName
指定的数据库在连接时不存在,那么将创建一个Derby数据库实例。如果数据库已经存在,则会发出警告,但据我所知,不会抛出SQLException
。
就表的创建而言,最好在应用程序启动时进行,然后再访问数据库进行典型的事务活动。您需要查询Derby/JavaDB中的SYSTABLES系统表,以确定您的表是否存在。
Connection conn;
try
{
String[] tableNames = {"tableA", "tableB"};
String[] createTableStmts = ... // read the CREATE TABLE SQL statements from a file into this String array. First statement is for the tableA, and so on.
conn = DriverManager.getConnection("jdbc:derby:sampleDB;create=true");
for(int ctr =0 ; ctr < tableNames.length; ctr++)
{
PreparedStatement pStmt = conn.prepareStatement("SELECT t.tablename FROM sys.systables t WHERE t.tablename = ?");
pStmt.setString(1, tableNames[ctr]);
ResultSet rs = pStmt.executeQuery();
if(!rs.next())
{
// Create the table
Statement stmt = conn.createStatement();
stmt.executeUpdate(createTableStmts[ctr]);
stmt.close();
}
rs.close();
pStmt.close();
}
}
catch (SQLException e)
{
throw new RuntimeException("Problem starting the app...", e);
}
任何不存在的表都可以创建。当然,如果您的应用程序有多个版本,并且模式因应用程序的不同版本而异,那么这不是一个好的做法。如果您必须处理这样的场景,您应该将应用程序的版本存储在一个不同的表中(通常不会在不同版本之间发生变化),然后应用特定于新版本的数据库增量脚本,从旧版本迁移数据库。建议使用DbDeploy或LiquiBase等数据库变更管理工具。在底层,这些工具通过将应用程序的版本号存储在一个表中来执行相同的操作,并执行版本大于数据库中版本的增量脚本。
最后要说明的是,JavaDB和Apache Derby之间没有明显的区别。
我不知道Oracle在重塑Derby之前改变了多少,但如果他们没有改变太多,那么删除Derby DB中的所有表可能会有所帮助。这个问题的答案列出了几种检查数据库中存在哪些表的方法。
创建数据库连接时指定数据库;否则将无法成功创建连接。(确切的语法取决于你是如何连接到你的数据库,但它的逻辑是相同的,在树的答案)
如果create=true
属性不存在,它将创建一个新的数据库。您可以使用DatabaseMetadata.getTables()
方法来检查Tables
是否存在。
Connection cn=DriverManager.getConnection("jdbc:derby://localhost:1527/testdb3;create=true", "testdb3", "testdb3");
ResultSet mrs=cn.getMetaData().getTables(null, null, null, new String[]{"TABLE"});
while(mrs.next())
{
if(!"EMP".equals(mrs.getString("TABLE_NAME")))
{
Statement st=cn.createStatement();
st.executeUpdate("create table emp (eno int primary key, ename varchar(30))");
st.close();;
}
}
mrs.close();
cn.close();
Connection conn = getMySqlConnection();
System.out.println("Got Connection.");
Statement st = conn.createStatement();
String tableName = ur table name ;
String query = ur query;
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
System.out.println("Exist");;
}
catch (Exception e ) {
// table does not exist or some other problem
//e.printStackTrace();
System.out.println("Not Exist");
}
st.close();
conn.close();