PreparedStatement 的 setDate 方法设置 java.sql.Date 日期
实现通过JDBC向oracle数据库中插入时间类型数据。
主要通过 PrepareStatement 的 setDate 方法。
创建v_emp表的代码如下(示例):
//1.创建表
@Test
public void create() {
Connection conn=ConnectionFactory.getConnection();
Statement st=null;
try {
st=conn.createStatement();
String sql="create table v_emp(id number primary key,"
+"name varchar2(20) not null,"
+ "passwd varchar2(20),"
+"salary number(7,2),"
+"start_date date)";
int count = st.executeUpdate(sql);
System.out.println(count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtil.close(st,conn);
}
}
第一种:通过oracle中的to_date()方法来实现
代码如下(示例):
/*
* 【1】使用Oracle中的to_date()方法
*/
//2:插入1000条记录
@Test
public void insert() {
Connection conn=ConnectionFactory.getConnection();
PreparedStatement pst=null;
try {
String sql="insert into v_emp values(?,?,?,?,to_date(?,'yyyy-mm-dd'))";
pst=conn.prepareStatement(sql);
//Date date=new Date(2020,11,18);
for(int i=0;i<1000;i++) {
pst.setInt(1,i);
pst.setString(2,"user");
pst.setString(3,"123456");
pst.setDouble(4,1500.50);
pst.setString(5, "2020-11-18");
//把sql语句添加到批处理中
pst.addBatch();
//当批处理中的数据达200条后,处理一次批处理中所有代码(相当于每次处理200条)
if(i%200==0)
pst.executeBatch();
}
//如果数据不够200条时,处理剩余的这些数据
pst.executeBatch();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally{
DBUtil.close(pst,conn);
}
}
第二种:通过调用 java.sql.Date 的三参构造器传进日期数据来创建一个Date类型对象,然后将这个对象作为 PreparedStatement 的 setDate()方法的参数来实现。
代码如下(示例):
/*
* 【2】插入日期时,使用java.sql.Date的三参构造器:Date(int,int,int)
*/
//2:插入1000条记录
@Test
public void insert1() {
Connection conn=ConnectionFactory.getConnection();
PreparedStatement pst=null;
try {
String sql="insert into v_emp values(?,?,?,?,?)";
pst=conn.prepareStatement(sql);
Date date=new Date(2020,11,18);
for(int i=0;i<1000;i++) {
pst.setInt(1,i);
pst.setString(2,"user");
pst.setString(3,"123456");
pst.setDouble(4,1500.50);
pst.setDate(5,date);
//把sql语句添加到批处理中
pst.addBatch();
//当批处理中的数据达200条后,处理一次批处理中所有代码(相当于每次处理200条)
if(i%200==0)
pst.executeBatch();
}
//如果数据不够200条时,处理剩余的这些数据
pst.executeBatch();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally{
DBUtil.close(pst,conn);
}
}
第三种:主要通过调用 java.sql.Date 的一参构造器传进日期数据来创建一个Date类型对象,然后将这个对象作为 PreparedStatement 的 setDate()方法的参数来实现。
/*
* 【3】插入数据时,使用java.sql.Date的一参构造器:Date(long)
*/
//2:插入1000条记录
@Test
public void insert2() {
Connection conn=ConnectionFactory.getConnection();
PreparedStatement pst=null;
try {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
java.util.Date date=sdf.parse("2020-11-18");
long time=date.getTime();
String sql="insert into v_emp values(?,?,?,?,?)";
pst=conn.prepareStatement(sql);
for(int i=0;i<1000;i++) {
pst.setInt(1,i);
pst.setString(2,"user");
pst.setString(3,"123456");
pst.setDouble(4,1500.50);
pst.setDate(5, new java.sql.Date(time));
//把sql语句添加到批处理中
pst.addBatch();
//当批处理中的数据达200条后,处理一次批处理中所有代码(相当于每次处理200条)
if(i%200==0)
pst.executeBatch();
}
//如果数据不足200条时,处理剩余的这些数据
pst.executeBatch();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DBUtil.close(pst,conn);
}
}