#JDBC がデータベースにアクセスするための基本的な手順は何ですか? (推奨学習: Java インタビューの質問 )
1、ドライバーをロードします
2、接続オブジェクト Connection
3 を取得します。 DriverManager オブジェクト、接続オブジェクトを介してセッションを取得します
#4、セッションを介してデータを追加、削除、変更、確認します、オブジェクトをカプセル化します#5、リソースを閉じます
preparedStatement と Statement の違いについて話しましょう
1. 効率: プリコンパイルされたセッションは、通常のセッション オブジェクトよりも優れています. データベース システムは、同じ SQL ステートメントを再度コンパイルしません。
2. セキュリティ: SQL は効果的に回避できます。インジェクション攻撃! SQL インジェクション攻撃は、サーバーが SQL ステートメントを構築するときに正しく構築できるように、クライアントからいくつかの不正な特殊文字を入力し、それによってプログラムとサーバーの情報とデータを収集することです。
例: "select * from t_user where userName = '" userName " ' and passwd ='" Password "'"
ユーザー名とパスワードが「1」または'1' ='1' ; 生成される SQL ステートメントは次のとおりです:
"select * from t_user where userName = '1' または '1' ='1' およびパスワード ='1' または '1'= '1 ' このステートメントの where 部分は、データ フィルターでは役割を果たしません。
トランザクションの概念と、JDBC プログラミングでトランザクションを処理する手順について説明します。1 トランザクションは、単一の論理的な作業単位として実行される一連の操作です。
2. 論理的な作業単位には、アトミック性、一貫性、分離性、耐久性 (ACID) と呼ばれる 4 つのプロパティが必要です。この方法でのみトランザクションになることができます
トランザクション処理手順:3, conn.setAutoComit(false);送信方法を手動送信に設定します
4、conn.commit() はトランザクションをコミットします。
5、例外が発生し、ロールバックします conn.rollback();
データベース接続プールの原理、なぜ接続プールを使用するのですか?1. データベース接続は時間のかかる操作です。接続プールを使用すると、複数の操作で接続を共有できるようになります。
2. の基本的な考え方データベース接続プールとは、データベース接続用の「バッファ」を確立するためのものです。「プール」。あらかじめ一定数の接続をバッファプールに入れておきます。データベース接続を確立する必要がある場合、1つだけ取得する必要があります。
システムがデータベースに無制限に接続するのを防ぐために、接続プール内の最大接続数を設定できます。さらに重要なのは、監視できることです。接続プール管理メカニズムを通じてデータベース接続の数と使用状況を把握し、システム開発、テスト、パフォーマンス調整の基礎を提供します。
3. 接続プールを使用する目的は、データベース接続リソースの管理を改善することです。 .
JDBC のダーティ リードとは何ですか?ダーティ リードを防止できるデータベース分離レベルはどれですか?
トランザクションを使用する場合、データの行が更新されたばかりで、同時に別のクエリが新しく更新された値を読み取ります。更新が永続化されていないため、ダーティ リーディングが発生し、このデータの行を更新したビジネスがロールバックされる可能性があります。
データベースの TRANSACTIONREADCOMMITTED、TRANSACTIONREPEATABLEREAD、および TRANSACTION_SERIALIZABLE 分離レベルにより、ダーティ リードを防ぐことができます。
ファントム読み取りとは何ですか?また、ファントム読み取りを防止できる分離レベルは何ですか?
ファントム読み取りとは、トランザクションがクエリを複数回実行しても、異なる値を返すことを意味します。トランザクションが特定の条件に基づいてデータ クエリを実行し、その後、別のトランザクションがクエリ条件を満たすデータの行を挿入するとします。
このトランザクションがこのクエリを再度実行すると、返される結果セットには、挿入されたばかりの新しいデータが含まれます。この新しいデータ行はファントム行と呼ばれ、この現象はファントム読み取りと呼ばれます。
ファントム読み取りを防止できるのは、TRANSACTION_SERIALIZABLE 分離レベルのみです。
JDBC の DriverManager は、データベース接続を作成するためのファクトリ クラスです。 JDBC Driver クラスがロードされると、それ自体が DriverManager クラスに登録されます。
次に、データベース構成情報を DriverManager.getConnection() メソッドに渡し、DriverManager はそこに登録されているドライバーを使用します。データベース接続を確立し、それを呼び出し側プログラムに返します。
execute、executeQuery、executeUpdate の違いは何ですか?1. ステートメントの use(String query) メソッドは、SQL クエリの実行に使用されます。クエリの結果が ResultSet の場合、このメソッドは true を返します。結果が挿入クエリや更新クエリなどの ResultSet ではない場合は、false を返します。
getResultSet メソッドを使用して ResultSet を取得したり、getUpdateCount() メソッドを使用して更新されたレコードの数を取得したりできます。
2. ステートメントのexecuteQuery (文字列クエリ) インターフェイスは、選択クエリを実行し、ResultSet を返すために使用されます。クエリでレコードが見つからない場合でも、返される ResultSet は null ではありません。
クエリ ステートメントの実行には通常、executeQuery を使用します。この場合、INSERT ステートメントまたは UPDATE ステートメントが渡されると、「executeQuery メソッドは更新に使用できません」というエラー メッセージとともに java.util.SQLException がスローされます。 ,
3. ステートメントのexecuteUpdate(String query)メソッドは、挿入または更新/削除(DML)ステートメントを実行するか、何も返しません。DDLステートメントの場合、戻り値はint型です。DMLの場合、戻り値はint型です。ステートメントの場合は更新回数、DDL の場合は 0 を返します。
execute() メソッドは、どのステートメントであるかわからない場合にのみ使用してください。それ以外の場合は、executeQuery メソッドまたはexecuteUpdate メソッドを使用する必要があります。
SQL クエリの結果をページに表示するにはどうすればよいですか?
Oracle:
select * from (select *,rownum as tempid from student ) t where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber
MySQL:
select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize; sql server: select top ” + pageSize + ” * from students where id not in + (select top ” + pageSize * (pageNumber-1) + id from students order by id) + “order by id;
JDBC の ResultSet とは何ですか?
データベースにクエリを実行すると、クエリ結果セットのデータ テーブルのような ResultSet が返されます。
ResultSet オブジェクトは、現在のデータ行を指すカーソルを保持します。最初に、カーソルは最初の行を指します。 ResultSet の next() メソッドを呼び出すとカーソルが 1 行下に移動し、データがなくなった場合は next() メソッドは false を返します。これを for ループで使用して、データ セットを反復処理できます。
デフォルトの ResultSet は更新できず、カーソルは下へのみ移動できます。つまり、最初の行から最後の行までしか移動できません。ただし、ロールバックまたは更新できる ResultSet を作成することもできます。
ResultSet を生成した Statement オブジェクトを閉じるか再実行する場合、または次の ResultSet を取得する場合、ResultSet オブジェクトも自動的に閉まります。
列名または 1 から始まるシリアル番号を渡すことにより、ResultSet の getter メソッドを通じて列データを取得できます。
以上がjavaweb 面接の質問 (2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。