Java setNull(int parameterIndex, int sqlType)

2023. 2. 20. 12:04Java

프로젝트 내 src 내 javabasic 패키지 내 InsertNull.java

package javabasic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Types;

public class InsertNull {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		String sql = "insert into person values(?,?,?,?)";
		Connection conn = null;
		PreparedStatement pst = null;
		Class.forName("oracle.jdbc.driver.OracleDriver");
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		System.out.println("접속 완료!!!");
		
		conn = DriverManager.getConnection(url, "scott", "a1234");
		pst = conn.prepareStatement(sql);
		//preparedStatement setNull(pindex, Types.INTEGER)
		//정수형 타입을 null로 설정:java.sql.Types.INTEGER
		//실수형 타입을 null로 설정:java.sql.Types.DOUBLE
		//숫자형 타입을 null로 설정:java.sql.Types.NUMERIC
		//문자형 타입을 null로 설정:java.sql.Types.VARCHAR / setString(pindex, null)
		
		pst.setNull(1, Types.INTEGER);
		pst.setString(2, null); //pst.setNull(2, Types.VARCHAR)
		pst.setNull(3, Types.DOUBLE);
		pst.setNull(4, Types.DATE);
		pst.executeUpdate();
		
		if(pst != null) pst.close();
		if(conn != null) conn.close();
	}

}
//Scrollable ResultSet 양방향 여태까지 ResultSet은 단방향이었다
//양방향으로 ResultSet을 활용한다면 효율적으로 데이타에 접근할 수 있다. JDBC 2.0부터
//포함된 기능인 Scrollable ResultSet은 그동안 Forward Only만 제공했던
//ResultSet에 전후 이동이 가능한 기능을 제공하여 Cursor이동의 편리함을 줄 수 있으며
//행의 갱신도 가능
//ResultSet Type 과련 상수
//TYPE_FORWARD_ONLY: 커서 이동시 next()만 사용가능.스크롤이 불가능한 Forward
//Only형
//TYPE_SCROLL_INSENSITIVE : 스크롤은 가능하나 변경된 사항은 적용되지
//않는다.
//TYPE_SCROLL_SENSITIVE : 스크롤이 가능하며 변경된 사항이 적용된다.
//테이블에서도 수정된 사항을 변경하려면 UPDATE해야 하고 아니면 그냥 ResultSet만
//변경되고 DB에 테이블은 전혀 변경되지 않는다.
//Concurrency Type 관련 상수
//CONCUR_READ_ONLY : 읽기 전용. 커서의 위치에서 ResultSet오브젝트의 변경
//이 불가능
//CONCUR_UPDATEABLE : 데이터 동적 갱신 가능. 커서의 위치에서 ResultSet
//오브젝트의 변경이 가능0

실행 결과

접속 완료!!!

 


SQL> SELECT * FROM person;

        NO NAME           WEIGHT BIRTHDAY
---------- ---------- ---------- ---------------------------------------------------------------------------
         1 장비             96.5 22/02/21 12:12:24.000000

         2 유비             96.5 22/02/23 10:15:22.000000
         3 김관우           96.5 22/02/23 10:15:30.000000
         4 장관우           96.5 22/02/23 10:15:40.000000
         2 김관우           90.9 23/02/19 16:03:07.808000


7 개의 행이 선택되었습니다.

레코드에 모두 NULL 값을 넣어서 확인해 보려고 한줄을 더 삽입한다.

 

SQL> INSERT INTO PERSON VALUES(5,"김말똥", 100.23, sysdate);
INSERT INTO PERSON VALUES(5,"김말똥", 100.23, sysdate)
                            *
1행에 오류:
ORA-00984: 열을 사용할 수 없습니다

ORA-00984 오류가 발생하는 경우로는

insert 문에서 문자열에 작은따옴표(') 를 사용하지 않을 경우

작은 따옴표 대신에 큰따옴표를 사용할 경우

내장 함수 등의 이름이 오타로 잘못된 경우가

있겠다.

 

SQL> INSERT INTO PERSON VALUES(5, '김말똥', 100.23, SYSDATE);

1 개의 행이 만들어졌습니다.

SQL> SELECT * FROM PERSON;

        NO NAME           WEIGHT BIRTHDAY
---------- ---------- ---------- ---------------------------------------------------------------------------
         1 장비             96.5 22/02/21 12:12:24.000000

         2 유비             96.5 22/02/23 10:15:22.000000
         3 김관우           96.5 22/02/23 10:15:30.000000
         4 장관우           96.5 22/02/23 10:15:40.000000
         2 김관우           90.9 23/02/19 16:03:07.808000

         5 김말똥          100.2 23/02/20 11:52:25.000000

8 개의 행이 선택되었습니다.

김말똥 바로 윗줄에 레코드에는 모두 NULL 값이 대입되어 있다.

 

void java.sql.PerparedStatement.setNull(int parameterIndex, int sqlType) throws SQLException

setNull(int parameterIndex, int sqlType) 메서드는

지정된 파라메터를 SQL NULL 로 설정한다.

 

int parameterIndex 에서 첫번째 파라메터는 1, 두 번째는 2, ... 이렇게 간다.

int sqlType 파라메터는 java.sql.Types 클래스에 정의된 SQL 형(타입) 코드 이다.

 

 

'Java' 카테고리의 다른 글

Java while 문 무한 loop 종료  (0) 2023.02.20
Java createStatement()  (1) 2023.02.20
Java getBufferSize()  (0) 2023.02.20
Java executeBatch()  (0) 2023.02.20
Java setDriverClassName(String driverClassName)  (0) 2023.02.20