와 같은 SQL 데이터베이스에서
java.time.localdate 를 삽입하고 검색합니다. 질문:
H2 데이터베이스 엔진과 같은 SQL 데이터베이스에서
java.time 유형 (예 :
localDate
답변:
메소드 1 : JDBC 4.2와 호환되는 드라이버
JDBC 4.2 사양을 준수하는 JDBC 드라이버의 경우
setObject 및
getObject 메소드를 직접 사용할 수 있습니다. 드라이버는 자동으로 Java 유형을 감지하여 해당 SQL 유형으로 변환합니다. 예를 들어:
preparedStatement.setObject(1, myLocalDate); // LocalDate转换为SQL DATE
LocalDate localDate = myResultSet.getObject("my_date_column_", LocalDate.class); // 指定预期类以确保类型安全
방법 2 : JDBC 4.2 이전의 기존 버전
jdbc 4.2와 호환되지 않는 드라이버의 경우 java.time 객체를 동등한
java.sql 유형으로 간단히 변환해야합니다. 이전 클래스에 추가 된 변환 방법을 사용하십시오 :
java.sql.Date mySqlDate = java.sql.Date.valueOf(myLocalDate);
preparedStatement.setDate(1, mySqlDate);
java.sql.Date sqlDate = myResultSet.getDate("date_"); //尽可能简短地处理转换
LocalDate localDate = sqlDate.toLocalDate();
JDBC와 호환되는 드라이버의 예 :
import java.sql.*;
import java.time.LocalDate;
import java.time.ZoneId;
public class LocalDateExample {
public static void main(String[] args) throws SQLException {
String url = "jdbc:h2:mem:test_db"; // 更改为您的数据库URL
String user = "user";
String password = "password";
try (
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
) {
stmt.execute("CREATE TABLE IF NOT EXISTS employees (id INT PRIMARY KEY, name VARCHAR(255), birthday DATE)");
// 插入LocalDate值
LocalDate today = LocalDate.now(ZoneId.of("America/Montreal"));
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees (name, birthday) VALUES (?, ?)");
pstmt.setString(1, "John Doe");
pstmt.setObject(2, today); // 直接传递LocalDate
pstmt.executeUpdate();
// 检索LocalDate值
ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
while (rs.next()) {
LocalDate birthday = rs.getObject("birthday", LocalDate.class); // 指定预期类
System.out.println("员工:" rs.getString("name") ",生日:" birthday);
}
rs.close();
pstmt.close();
stmt.close();
}
}
}
레거시 드라이버의 예 :
import java.sql.*;
java.time.localdate 가져 오기;
공개 클래스 LocalDateExample {
public static void main (String [] args)은 sqlexception {
문자열 URL = "jdbc : h2 : mem : test_db"; // 데이터베이스 URL로 변경합니다
문자열 사용자 = "사용자";
문자열 비밀번호 = "비밀번호";
노력하다 (
Connection Conn = DriverManager.GetConnection (URL, USER, PASSFARPT);
문자 stmt = conn.createstatement ();
) {
stmt.execute ( "직원이 없으면 테이블 생성 (ID int 기본 키, 이름 varchar (255), 생일 날짜));
// LocalDate 값을 삽입합니다
현지 데이트 오늘 = localdate.now ();
java.sql.date sqldate = java.sql.date.valueof (오늘);
preadstatement pstmt = conn.preparestatement ( "직원 삽입 (이름, 생일) 값 (?,?)");
PSTMT.SETSTRING (1, "John Doe");
pstmt.setdate (2, sqldate); // localDate를 Java.SQL.Date로 변환합니다
pstmt.executeupdate ();
// LocalDate 값을 검색합니다
resultSet rs = stmt.executeQuery ( "select * from EmployE");
while (rs.next ()) {
java.sql.date sqldate = rs.getDate ( "생일");
LocalDate 생일 = sqldate.tolocaldate (); // java.sql.date를 LocalDate로 변환합니다
System.out.println ( "직원 :"rs.getstring ( "name") ", 생일 :"생일);
}
rs.close ();
pstmt.close ();
stmt.close ();
}
}
}
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3