1. JDBC がデータベースにアクセスするための基本的な手順は何ですか?
(その他のインタビュー質問の推奨事項:Java インタビューの質問と回答)
ドライバーの読み込み
接続オブジェクトの取得 DriverManager オブジェクトを介した接続
接続オブジェクトを介してセッションを取得します
#セッションを介してデータを追加、削除、変更、確認し、オブジェクトをカプセル化します#リソースを閉じる
2. について話します。 prepareStatement と Statement の違い
効率性: プリコンパイルされたセッションは通常のセッション オブジェクトよりも優れています。データベース システムは同じ SQL ステートメントを再度コンパイルしません。
セキュリティ: SQL インジェクション攻撃を効果的に回避できます。 ! SQL インジェクション攻撃は、サーバーが SQL ステートメントを構築するときに正しく構築できるように、クライアントからいくつかの不正な特殊文字を入力し、それによってプログラムとサーバーの情報とデータを収集することです。
例:
“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”
ユーザー名とパスワードが '1' または '1'='1' として入力された場合、生成される SQL ステートメントは次のようになります:
“select * from t_user where userName = ‘1’ or ‘1’ =’1’ and password =’1’ or ‘1’=’1’
3. トランザクションの概念と、JDBC プログラミングにおけるトランザクションの処理手順について話しましょう。
トランザクションとは、単一の論理的な作業単位として実行される一連の操作です。
論理作業単位には、アトミック性、一貫性、分離性、耐久性 (ACID) プロパティと呼ばれる 4 つのプロパティが必要です。この方法でのみトランザクションになります
トランザクション処理手順 :
conn.setAutoComit(false);送信方法を手動送信に設定します
conn.commit() はトランザクションをコミットします
例外が発生し、ロールバックします conn.rollback();
4. データベース接続プールの原理。接続プーリングを使用する理由。
データベース接続は時間のかかる操作ですが、接続プールを使用すると、複数の操作で接続を共有できます。
データベース接続プールの基本的な考え方は、データベース接続用の「バッファ プール」を確立することです。あらかじめ一定数のコネクションをバッファプールに入れておくと、データベースコネクションを確立する必要があるときに「バッファプール」から1つだけ取り出し、使用後に元に戻すだけで済みます。接続プール内の最大接続数を設定することで、システムがデータベースに際限なく接続するのを防ぐことができます。さらに重要なのは、接続プール管理メカニズムを通じてデータベース接続の数と使用状況を監視でき、システム開発、テスト、パフォーマンス調整の基礎を提供できることです。
接続プールを使用する目的は、データベース接続リソースの管理を改善することです
(関連する推奨事項:
Java 入門チュートリアル)5。 JDBC のダーティ リーディングとは何ですか?ダーティ リードを防止するデータベース分離レベルはどれですか?
トランザクションを使用する場合、データ行が更新されたばかりで、同時に別のクエリが新しく更新された値を読み取る状況が発生することがあります。これにより、更新されたデータが永続化されておらず、このデータ行を更新したビジネスがロールバックされる可能性があるため、ダーティ読み取りが発生し、データが無効になります。データベースの TRANSACTIONREADCOMMITTED、TRANSACTIONREPEATABLEREAD、および TRANSACTION_SERIALIZABLE 分離レベルにより、ダーティ リードを防止できます。
6. ファントム リーディングとは何ですか? ファントム リーディングを防止できる分離レベルはどれですか?
ファントム読み取りとは、トランザクションがクエリを複数回実行しても、異なる値を返すことを意味します。トランザクションが特定の条件に基づいてデータ クエリを実行し、その後、別のトランザクションがクエリ条件を満たすデータの行を挿入するとします。その後、このトランザクションはこのクエリを再度実行し、返された結果セットには挿入されたばかりの新しいデータが含まれます。この新しいデータ行はファントム行と呼ばれ、この現象はファントム読み取りと呼ばれます。
ファントム読み取りを防止できるのは、TRANSACTION_SERIALIZABLE 分離レベルのみです。
7. JDBC DriverManager は何に使用されますか?
JDBC の DriverManager は、データベース接続を作成するためのファクトリ クラスです。 JDBC Driver クラスがロードされると、それ自体が DriverManager クラスに登録されます。
次に、データベース構成情報を DriverManager.getConnection() メソッドに渡し、DriverManager はそこに登録されているドライバーを使用します。データベース接続を確立し、それを呼び出し側プログラムに返します。
8.execute、executeQuery、executeUpdate の違いは何ですか?
Statement のexecute(String query) メソッドは、SQL クエリを実行するために使用されます。クエリの結果が ResultSet の場合、このメソッドは true を返します。結果が挿入クエリや更新クエリなどの ResultSet でない場合は、false を返します。 getResultSet メソッドを通じて ResultSet を取得したり、getUpdateCount() メソッドを通じて更新されたレコードの数を取得したりできます。
Statement のexecuteQuery(String query) インターフェイスは、選択クエリを実行し、ResultSet を返すために使用されます。クエリでレコードが見つからない場合でも、返される ResultSet は null ではありません。通常、クエリ ステートメントを実行するには、executeQuery を使用しますが、この場合、INSERT ステートメントまたは UPDATE ステートメントが渡されると、「executeQuery メソッドは更新に使用できません」というエラー メッセージとともに java.util.SQLException がスローされます。
Statement的executeUpdate(String query)方法用来执行insert或者update/delete(DML)语句,或者 什么也不返回,对于DDL语句,返回值是int类型,如果是DML语句的话,它就是更新的条数,如果是DDL的话,就返回0。
只有当你不确定是什么语句的时候才应该使用execute()方法,否则应该使用executeQuery或者executeUpdate方法。
9、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;
(视频教程推荐:java课程)
10、JDBC的ResultSet是什么?
在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。
ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。
默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet。
当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。
可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。
以上がJava で頻繁に聞かれる基本的な面接の質問—(5)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。