>  기사  >  Java  >  javaweb 인터뷰 질문 (2)

javaweb 인터뷰 질문 (2)

(*-*)浩
(*-*)浩원래의
2019-12-06 15:02:512113검색

javaweb 인터뷰 질문 (2)

JDBC가 데이터베이스에 액세스하는 기본 단계는 무엇입니까?                   (추천 학습: java 인터뷰 질문 )

1. 드라이버 로드

2 DriverManager 개체를 통해 연결 가져오기

4. 세션을 통해 데이터를 수정하고 확인합니다. 객체 캡슐화

5, 리소스 닫기

prepareStatement와 Statement의 차이점에 대해 이야기해 보세요.

1, 효율성: 미리 컴파일된 세션이 일반 세션 객체보다 낫습니다. 데이터베이스 시스템은 동일한 SQL 문을 다시

2, 보안: SQL 주입 공격을 효과적으로 피할 수 있습니다! SQL 인젝션 공격은 클라이언트로부터 일부 불법 특수 문자를 입력하여 서버가 SQL 문을 구성할 때 여전히 올바르게 SQL 문을 구성할 수 있도록 하여 프로그램 및 서버 정보와 데이터를 수집하는 것입니다.

예: "select * from t_user where userName = '" + userName + " ' 및 비밀번호 ='" + 비밀번호 + "'"

사용자 이름과 비밀번호를 '1' 또는 '1'='로 입력한 경우 1' ; 그러면 생성된 SQL 문은 다음과 같습니다.

"select * from t_user where userName = '1' 또는 '1' ='1' 및 비밀번호 ='1' 또는 '1'='1' Where 부분이 없습니다.

JDBC 프로그래밍에서 트랜잭션의 개념과 트랜잭션 처리 단계에 대해 이야기해 보겠습니다.

1 트랜잭션은 단일 논리적 작업 단위로 수행되는 일련의 작업입니다.

2, 논리적 작업 단위에는 ACID(원자성, 일관성, 격리성, 내구성) 속성이라는 네 가지 속성이 있어야 하며, 이를 통해서만 트랜잭션이 될 수 있습니다.

트랜잭션 처리 단계:

3, conn.setAutoComit(false); 제출 방법을 수동 제출로 설정

4, conn.commit()이 트랜잭션을 커밋

5, 예외가 발생하면 롤백 conn.rollback();

데이터베이스 연결의 원리 풀, 왜 연결 풀을 사용하나요?

1. 데이터베이스 연결은 시간이 많이 걸리는 작업입니다. 연결 풀을 사용하면 여러 작업에서 연결을 공유할 수 있습니다.

2. 데이터베이스 연결 풀의 기본 아이디어는 다음과 같습니다. 데이터베이스 연결을 위한 "버퍼 풀"을 미리 설정해두세요. 특정 개수의 연결에 대해서는 데이터베이스 연결을 설정해야 할 때 "버퍼 풀" 중 하나만 빼서 사용 후 다시 넣어두시면 됩니다. 연결 풀에서 최대 연결 수를 설정하여 시스템이 데이터베이스에 계속 연결되는 것을 방지할 수 있습니다. 더 중요한 것은 연결 풀 관리 메커니즘을 통해 데이터베이스 연결 수와 사용량을 모니터링할 수 있으며, 시스템 개발의 기반을 제공합니다.

3. 연결 풀을 사용하는 목적은 데이터베이스 연결 리소스의 사용을 개선하는 것입니다. 관리

JDBC에서 더티 읽기는 무엇인가요? 어떤 데이터베이스 격리 수준이 더티 읽기를 방지할 수 있나요? 트랜잭션을 사용하는 경우 한 데이터 행이 방금 업데이트되고 동시에 다른 데이터 행이 업데이트되는 상황이 있을 수 있습니다. 업데이트된 데이터 때문에 쿼리가 이 새로 업데이트된 값을 읽습니다. 지속되지 않았으며 이 데이터 행을 업데이트한 비즈니스가 롤백될 수 있으므로 데이터베이스의

TRANSACTIONREADCOMMITTED, TRANSACTIONREPEATABLEREAD 및 TRANSACTION_SERIALIZABLE 격리 수준이 더티 읽기를 방지할 수 있습니다. 읽기? 팬텀 읽기를 방지할 수 있는 격리 수준은 무엇입니까?


팬텀 읽기는 쿼리 값을 여러 번 실행할 때 트랜잭션이 다른 결과를 반환한다는 의미입니다. 어떤 트랜잭션이 특정 조건에 따라 데이터 쿼리를 수행하고 있고, 다른 트랜잭션이 쿼리 조건을 만족하는 데이터 행을 삽입한다고 가정해 보겠습니다.

이후에 이 트랜잭션은 이 쿼리를 다시 실행하고 반환된 결과 집합에는 방금 삽입된 새 데이터가 포함됩니다. 이 새로운 데이터 행을 팬텀 행(Phantom Row)이라고 하며, 이 현상을 팬텀 읽기(Phantom Read)라고 합니다.

TRANSACTION_SERIALIZABLE 격리 수준만이 팬텀 읽기를 방지할 수 있습니다.

JDBC DriverManager는 어떤 용도로 사용되나요?

JDBC의 DriverManager는 데이터베이스 연결을 생성하는 팩토리 클래스입니다. JDBC 드라이버 클래스가 로드되면 DriverManager 클래스에 등록됩니다. 그런 다음 DriverManager.getConnection() 메서드에 등록된 드라이버를 사용하여 데이터베이스 연결을 가져옵니다. 호출 프로그램에.

execute, ExecuteQuery, ExecuteUpdate의 차이점은 무엇인가요?

1. 쿼리의 결과가 ResultSet이면 이 메서드는 true를 반환하는 데 사용됩니다. 삽입 또는 업데이트 쿼리와 같이 결과가 ResultSet이 아닌 경우 false를 반환합니다. getResultSet 메소드를 통해 ResultSet을 가져오거나, getUpdateCount() 메소드를 통해 업데이트된 레코드 수를 가져올 수 있습니다.

2.Statement의 ExecuteQuery(문자열 쿼리) 인터페이스는 선택 쿼리를 실행하고 ResultSet을 반환하는 데 사용됩니다. 쿼리에서 레코드가 발견되지 않더라도 반환된 ResultSet은 null이 아닙니다.

우리는 일반적으로 쿼리 문을 실행하기 위해 ExecuteQuery를 사용합니다. 이 경우 insert 또는 update 문이 전달되면 "executeQuery 메서드를 업데이트에 사용할 수 없습니다"라는 오류 메시지와 함께 java.util.SQLException이 발생합니다. ,

3.Statement의 ExecutionUpdate(String query) 메소드는 insert 또는 update/delete(DML) 문을 실행하거나 아무것도 반환하지 않습니다. DDL 문인 경우 반환 값은 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() 메소드가 호출되면 커서는 한 행 아래로 이동합니다. 더 이상 데이터가 없으면 next() 메소드는 false를 반환합니다. for 루프에서 이를 사용하여 데이터 세트를 반복할 수 있습니다.

기본 ResultSet은 업데이트할 수 없으며 커서는 아래로만 이동할 수 있습니다. 즉, 첫 번째 줄부터 마지막 ​​줄까지만 이동할 수 있습니다. 그러나 롤백하거나 업데이트할 수 있는 ResultSet을 생성할 수도 있습니다. ResultSet을 생성한 State 개체를 닫거나 다시 실행하거나 다음 ResultSet을 가져오는 경우 ResultSet 개체도 자동으로 닫힙니다.

ResultSet의 getter 메소드를 통해 컬럼명이나 1부터 시작하는 일련번호를 전달하여 컬럼 데이터를 얻을 수 있습니다.

위 내용은 javaweb 인터뷰 질문 (2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.