PreparedStatement 的 setDate 方法设置 java.sql.Date 日期

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);
		}
		
	}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值