ORA-01839错误通常是由于在Prep
ar
edStatement中指定的日期中包含无效的月份,特别是在闰年中。下面是一个代码示例,展示了如何解决这个问题:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;
public class Example {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@localhost:1521:XE"; // 数据库连接URL
String username = "username"; // 数据库用户名
String password = "password"; // 数据库密码
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = DriverManager.getConnection(url, username, password);
// 获取当前日期和时间
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始,需要加1
int day = calendar.get(Calendar.DAY_OF_MONTH);
String sql = "INSERT INTO table_name (date_column) VALUES (TO_DATE(?, 'YYYY-MM-DD'))";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, year + "-" + month + "-" + day);
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null) {
preparedStatement.close();
if (connection != null) {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
在上面的示例中,我们首先获取了当前日期和时间,然后将其格式化为"YYYY-MM-DD"的形式,并将其作为参数传递给PreparedStatement的SQL查询中。这样,我们可以避免在闰年中指定无效的月份。
需要注意的是,这只是一个示例,你需要根据实际情况修改数据库连接URL、用户名和密码,以及表名和列名等。