我正在编写一套基于Eclipse控制台的文字游戏,并集成了一个嵌入式Derby DB驱动程序,用于存储用户结果历史记录。
我的问题是关于Derby表的初始化。
Derby数据库连接本身有一个条件检查器: “jdbc:derby:dbName; create = true” 因此,如果数据库存在,则连接,如果不存在则创建。
我被困在如何使用数据库中的TBL执行此操作。即使有这个类似问题的帮助:how to create table if it doesn't exist using Derby Db
我在下面提供了我的代码。我的代码在表'RPS'的查询中抛出了一个sql异常。 (我的dbName是'RPSdb',TBL名称是'RPS'。)
此异常由我的catch块捕获并传递给另一个类中的静态方法('DerbyHelper')。此静态方法现在设置为始终返回true。
我的问题是如何编写catch块和相应的helper类,以便我可以实现上面提到的TBL功能?
Connection conn = null;
ArrayList<Statement> statements = new ArrayList<Statement>(); // list of Statements, PreparedStatements
Statement s;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(protocol + dbName + ";create=true");
conn.setAutoCommit(false);
s = conn.createStatement();
statements.add(s);
rs = s.executeQuery("select * from RPS");
rs.next();
int cG = rs.getInt(1) + corGuess;
int iCG = rs.getInt(2) + inCorGuess;
s.executeUpdate("UPDATE RPS SET corGuesses = " + cG
+ ", inCorGuesses= " + iCG);
conn.commit();
}
catch( SQLException e ) {
if( DerbyHelper.tableAlreadyExists( e ) ) {
// what do I do here??
}
}
答案 0 :(得分:2)
接口java.sql.Connection
的方法getMetaData()
返回java.sql.DatabaseMetaData
,该接口包含方法getTables()
,它将告诉您数据库表是否存在。