1. JDBC가 데이터베이스에 액세스하는 기본 단계는 무엇입니까?
(추가 면접 질문 추천: java 면접 질문 및 답변)
드라이버 로드
연결 개체 가져오기 DriverManager 개체를 통해 연결
연결 개체를 통해 세션 가져오기
추가, 삭제, 수정 및 확인
자원 닫기
2. prepareStatement와 State의 차이점에 대해 이야기해 보겠습니다
효율성: 미리 컴파일된 세션이 일반 세션 개체보다 낫습니다. 데이터베이스 시스템은 동일한 SQL 문을 다시 컴파일하지 않습니다.
안전성: 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(원자성, 일관성, 격리성, 내구성) 속성이라는 네 가지 속성이 있어야 합니다. 그래야만 트랜잭션이 될 수 있습니다.
트랜잭션 처리 단계:
conn.setAutoComit(false ; 연결 풀링을 사용하는 이유
데이터베이스 연결은 시간이 많이 걸리는 작업이며 연결 풀을 사용하면 여러 작업에서 연결을 공유할 수 있습니다.
데이터베이스 연결 풀의 기본 아이디어는 데이터베이스 연결을 위한 "버퍼 풀"을 구축하는 것입니다. 미리 버퍼 풀에 일정한 수의 연결을 넣어두세요. 데이터베이스 연결을 설정해야 할 때 "버퍼 풀"에서 하나만 꺼내어 사용 후 다시 넣어두면 됩니다. 연결 풀에서 최대 연결 수를 설정하여 시스템이 데이터베이스에 계속 연결되는 것을 방지할 수 있습니다. 더 중요한 것은 연결 풀 관리 메커니즘을 통해 데이터베이스 연결 수와 사용량을 모니터링하여 시스템 개발, 테스트 및 성능 조정을 위한 기반을 제공할 수 있다는 것입니다.
커넥션 풀을 사용하는 목적은 데이터베이스 연결 리소스 관리를 향상시키는 것입니다
(관련 권장 사항:
Java 입문 튜토리얼)
5. JDBC에서 더티 리딩(dirty reading)이란 무엇입니까? 더티 읽기를 방지하는 데이터베이스 격리 수준은 무엇입니까?
트랜잭션을 사용할 때 데이터 행이 방금 업데이트되고 동시에 다른 쿼리가 새로 업데이트된 값을 읽는 상황이 있을 수 있습니다. 이로 인해 업데이트된 데이터가 유지되지 않고 이 데이터 행을 업데이트한 비즈니스가 롤백되어 데이터가 유효하지 않기 때문에 더티 읽기가 발생합니다. 데이터베이스의 TRANSACTIONREADCOMMITTED, TRANSACTIONREPEATABLEREAD 및 TRANSACTION_SERIALIZABLE 격리 수준은 더티 읽기를 방지할 수 있습니다. 6. 팬텀 리딩을 방지할 수 있는 격리 수준은 무엇인가요?
팬텀 읽기는 트랜잭션이 쿼리를 여러 번 실행하지만 다른 값을 반환한다는 의미입니다. 어떤 트랜잭션이 특정 조건에 따라 데이터 쿼리를 수행하고 있고, 다른 트랜잭션이 쿼리 조건을 만족하는 데이터 행을 삽입한다고 가정해 보겠습니다. 이후에 이 트랜잭션은 이 쿼리를 다시 실행하고 반환된 결과 집합에는 방금 삽입된 새 데이터가 포함됩니다. 이 새로운 데이터 행을 팬텀 행(Phantom Row)이라고 하며, 이 현상을 팬텀 읽기(Phantom Read)라고 합니다.
TRANSACTION_SERIALIZABLE 격리 수준만이 팬텀 읽기를 방지할 수 있습니다.
7. JDBC DriverManager는 어떤 용도로 사용되나요?
JDBC의 DriverManager는 데이터베이스 연결을 생성하는 팩토리 클래스입니다. JDBC 드라이버 클래스가 로드되면 DriverManager 클래스에 등록됩니다. 그런 다음 DriverManager.getConnection() 메서드에 등록된 드라이버를 사용하여 데이터베이스 연결을 가져옵니다. 호출 프로그램에.
8. Execute, ExecuteQuery, ExecuteUpdate의 차이점은 무엇인가요?
Statement의 실행(문자열 쿼리) 메서드는 쿼리 결과가 ResultSet인 경우 true를 반환하는 데 사용됩니다. 삽입 또는 업데이트 쿼리와 같이 결과가 ResultSet이 아닌 경우 false를 반환합니다. getResultSet 메소드를 통해 ResultSet을 가져오거나, getUpdateCount() 메소드를 통해 업데이트된 레코드 수를 가져올 수 있습니다.
Statement의 ExecuteQuery(문자열 쿼리) 인터페이스는 선택 쿼리를 실행하고 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开始的序号来获取列数据。
위 내용은 자바 고주파 기본 면접 질문——(5)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!