1

テーブルにデータを挿入する必要があります。プログラムを実行して挿入すると、テーブルを作成していないため、エラーが発生する場合があります。そのテーブルをcatchブロックに作成し、tryブロックに戻りたいと思います。したがって、テーブルが削除されるか、たまたま削除されるたびに、trycatchがテーブルを作成します。

私はそれのためにいくつかのコードを書きました、しかしそれは失敗します。

import java.sql.*;

/**
 *
 * @author JOJO
 */
public class ConnectDB {
  static Connection conn;
   static String driver = "org.apache.derby.jdbc.ClientDriver";
   static String connectionURL = "jdbc:derby://localhost:1527/Libraryprj;user=scott;password=tiger";

  public void AddBookDB(String bookName) throws SQLException {

    String createString = "CREATE TABLE BOOKLEDGER (BOOKNAME VARCHAR(50) NOT NULL)";
    try {
      Class.forName(driver);
    } catch (java.lang.ClassNotFoundException e) {
      e.printStackTrace();
    }
    try
        {
            conn = DriverManager.getConnection(connectionURL);
            Statement stmt = conn.createStatement();
            boolean execute = stmt.execute("insert into BOOKLEDGER values ('" + bookName + "')");
            stmt.close();
        }
        catch (SQLException sqlExcept)
        {
            Statement stmt = (Statement) conn.createStatement();
            stmt.executeUpdate(createString);

            sqlExcept.printStackTrace();
        }
  }
}
4

3 に答える 3

3

私の観点からは、別の方法で進める方が良いので(try-catchの代わりに制御構造を使用)、テーブルがこのように存在するかどうかを前にテストできます。

DatabaseMetaData md = conn.getMetaData();
ResultSet rs = md.getTables(null, null, "table_name", null);
if (!rs.next()) {
  //Table not Exist, let's create it 
}
//Insert data into the table ...

同様のケースでtry-catchを使用することは悪い習慣です。trycatch構造は、制御構造の代わりではなく、例外的な状況をキャッチするためにのみ使用する必要があります...

于 2012-07-28T08:43:37.143 に答える
1

これは余分なクエリですが、私は常にこのソリューションを使用します:

Connection connection = DriverManager.getConnection(...) // create the connection
Statement statement = connection.createStatement(...)

そして、このクエリを使用して、テーブルが存在することを確認します。次のJavaコードの実行中に誰かがテーブルを削除した場合にのみ、失敗する可能性があります...

statement.execute("CREATE TABLE IF NOT EXISTS yourtable(...Your schema...)");

この時点以降、seroiusの問題を予期せずに、テーブルが存在すると想定して操作できます。

于 2012-07-28T08:57:55.467 に答える
1

あなたのアプローチの主な問題はSQLException、非常にさまざまな理由で発生した可能性のあるジェネリックをキャッチしていることです。想定される理由はそのうちの1つにすぎません。そのため、テーブルを作成する前に、テーブルが存在しないという条件を明示的にテストする方がはるかに適切です。

于 2012-07-28T09:21:38.960 に答える