jdbc中Date类型转换

先来看个例子:

package com.xintouyun.jdbc;
	import java.sql.Connection;
	import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
	import java.sql.SQLException;
	import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

	public class JdbcTest1 {
		
		public static void main(String[] args) throws ParseException  {
			// TODO Auto-generated method stub
			Connection conn=null;
			PreparedStatement ps=null;
			ResultSet rs=null;
			Scanner sc=new Scanner(System.in);
			//1.加载驱动
			try {
				Class.forName("com.mysql.jdbc.Driver");

			//2.连接数据库
			 conn = DriverManager.getConnection("jdbc:mysql:///baidu", "root", "123456");
			 System.out.println("请输入序号");
			 int id=sc.nextInt();
			 System.out.println("请输入姓名");
			 String name=sc.next();
			 System.out.println("请输入学号");
			 String num=sc.next();
			 System.out.println("请输入生日");
			 String birthday=sc.next();
			//3.创建statement
			String sql="insert into student values(?,?,?,?)";
			ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			ps.setString(2,name);
			ps.setString(3, num);
			
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			Date dbirthday=sdf.parse(birthday);//将输入的字符串转换为格式化后的时间
			java.sql.Date sqlbirthday=new java.sql.Date(dbirthday.getTime());
			ps.setDate(4, sqlbirthday);
			//4.执行查询 
			int affectrows=ps.executeUpdate();
			System.out.println("受影响行数为"+affectrows);
			} catch (ClassNotFoundException | SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if(conn!=null) {
					try {
						conn.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				if(ps!=null) {
					try {
						ps.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				if(rs!=null) {
					try {
						rs.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
			

	}

这是我用jdbc连接MySQL数据库时候遇到的问题,当我用java程序执行插入语句时,不免要用控制台来输入数据,这里我就用到了Scanner 类来进行控制台输入,但是从控制台输入的是字符串类型,而数据库中的生日birthday是date型的,所以这里就遇到了类型转换的问题。

那么要怎么转换呢?

一、从控制台得到一个birthday,这里是String类型的

System.out.println("请输入生日");
             String birthday=sc.next();

二、将String类型的转换为Date型,并将其格式化为我们熟悉的年月日类型的,注意我这里的Date是java.util里面的Date

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
            Date dbirthday=sdf.parse(birthday);//parse方法在api中如下

 

SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat

 

parse

public Date parse(String text,
                  ParsePosition pos)

解析字符串的文本,生成 Date

此方法试图解析从 pos 给定的索引处开始的文本。如果解析成功,则将 pos 的索引更新为所用最后一个字符后面的索引(不必对直到字符串结尾的所有字符进行解析),并返回解析得到的日期。更新后的 pos 可以用来指示下次调用此方法的起始点。如果发生错误,则不更改 pos 的索引,并将 pos 的错误索引设置为发生错误处的字符索引,并且返回 null。

 

指定者:

DateFormat 中的 parse

参数:

text - 应该解析其中一部分的 String

pos - 具有以上所述的索引和错误索引信息的 ParsePosition 对象。

返回:

从字符串进行解析的 Date。如果发生错误,则返回 null。

抛出:

NullPointerException - 如果 textpos 为 null。

另请参见:

DateFormat.setLenient(boolean)

三、将java.util中的Date转换为java.sql.Date

java.sql.Date sqlbirthday=new java.sql.Date(dbirthday.getTime());

 

Date(long date)
使用给定毫秒时间值构造一个 Date 对象。

在java.sql中Date类的构造方法如下,我们可以将第二部得到的long型的Date作为参数传进去,这样就能得到sql

中的Date对象。

四、在jdbc中使用

ps.setDate(4, sqlbirthday);

这样就可以实现了转换的原理

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值