-1

これは少し奇妙に聞こえるかもしれませんPreparedStatement
が、Statement. これは、私のプロジェクトがほぼ 50% であり、今までStatement.

私の Database クラスには、Mysql サーバーを使用する必要があるたびに mysql に接続するコンストラクターがあります。

public class Database 
{
    private Statement m_statement = null;
    private Connection m_connection = null;
    private PreparedStatement m_prepared = null;  // that one was added just now 

    private static final String ACCOUNTS_TABLE = "CheckingAccountsTable";
    private static final String PERSONNEL_TABLE = "PersonnelTable";
    // private static final String 


    public Database() throws ClassNotFoundException
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            this.m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");
            this.m_statement = this.m_connection.createStatement();

        }

        catch (SQLException s)
        {
            System.out.println("SQL statement is not executed! 2!");
        }

    }


}




// from here I have something like 20 methods that are based on the Statement

すべてを変更するには、私が持っていない多くの時間が必要です。だから、私の質問は:

で作成したステートメントを使用できますPreparedStatementか? または PreparedStatementに基づいて作成しStatementますか?

ありがとう

4

1 に答える 1

1

これは不可能です。Statementと、PreparedStatementさまざまなものを表します。

  • Statementを使用してさまざまな SQL クエリを呼び出す場合、使用するStatementSQL クエリを知らなくてもインスタンスを作成できます。
  • PreparedStatement作成時に SQL クエリが与えられ、可能であればドライバーはクエリのプリコンパイルを試みます。さまざまなパラメーターを入力して繰り返し使用できますが、クエリを変更することはできません。作成時に指定されたものが常に使用されます。

したがって、コードをリファクタリングする必要があると思いますが、これら 2 つを切り替える簡単な方法はありません。

ほとんどの場合、SQL インジェクションPreparedStatementの危険を冒すことなく安全な方法でパラメーターを SQL クエリに渡すことができるため、 を使用することをお勧めします。

于 2012-08-08T16:41:10.403 に答える