我正在Netbeans 7上创建一个应用程序!我希望我的应用程序在main中有一些代码,以便它可以创建一个Java DB连接检查以查看数据库和关联表是否存在,如果没有创建数据库及其中的表。如果你能提供一个示例代码,那就太棒了!我已经查看了http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/但是我仍然不确定如何在创建之前检查现有数据库!
答案 0 :(得分:4)
我希望我的应用程序在main中有一些代码,以便它可以创建一个Java DB连接检查以查看数据库和关联表是否存在,如果没有创建数据库及其中的表。
您可以在JDBC URL中添加create=true
property。如果在连接时databaseName
指定的数据库不存在,则会创建Derby数据库实例。如果数据库已经存在,则会发出警告,但据我所知,不会抛出SQLException
。
就创建表而言,在访问典型事务活动的数据库之前,最好在应用程序启动时完成。您需要查询Derby / JavaDB中的SYSTABLES system table以确定您的表是否存在。
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等数据库更改管理工具。这些工具通过在表中存储应用程序的版本号来执行相同的操作,并执行版本大于数据库版本的delta脚本。
最后一点,JavaDB and Apache Derby之间没有显着差异。
答案 1 :(得分:0)
我不知道Oracle在重新命名之前改变了多少德比,但如果他们没有改变太多,那么Delete all tables in Derby DB可能会帮助你。该问题的答案列出了几种检查数据库中存在哪些表的方法。
您将在创建数据库连接时指定数据库;否则将无法成功创建连接。 (确切的语法取决于你如何连接到你的数据库,但它的逻辑与shree的答案相同。)
答案 2 :(得分:0)
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();
答案 3 :(得分:-3)
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();