在java中接受日期类型命令行参数
Posted
技术标签:
【中文标题】在java中接受日期类型命令行参数【英文标题】:accepting date type command line argument in java 【发布时间】:2013-01-12 07:59:34 【问题描述】:我正在尝试编写这个练习 CRUD 应用程序。这是一个应用程序来存储与出生日期和东西的联系人。由于我使用命令行来接受输入并将其存储在 HSQLDB 数据库中,因此我不确定如何接受 Date
类型参数。我尝试将它从 Sting 解析为 long,但它一直抛出 SQLDataException
。
这里是我用于这个变量的代码行
//this in the class with main
private Date dob;
public Date getDob()
return dob;
public void setDob(Date dob)
this.dob = dob;
System.out.println("Enter date of birth of "+n+" in the format dd/mm/yyyy
String date = sc2.nextLine();
long d = Date.parse(date);
uv.setDob(d);
//class with all the business logic
public void addContact(String cb, String name, long dob, String email, String phno, String tag)
sql = "insert into "+ cb + "(name,dob,email,phone,tag) values (?,?,?,?,?)";
try
con = JDBCHelper.getConnection();
ps1 = con.prepareStatement(sql);
ps1.setString(1, name);
ps1.setLong(2, dob);
ps1.setString(3, email);
ps1.setString(4,phno);
ps1.setString(5, tag);
catch(SQLException e)
e.printStackTrace();
输入日期时给我的例外是
java.sql.SQLSyntaxErrorException: incompatible data type in conversion
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.setParameter(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.setLongParameter(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.setLong(Unknown Source)
Caused by: org.hsqldb.HsqlException: incompatible data type in conversion
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.types.DateTimeType.convertJavaToSQL(Unknown Source)
【问题讨论】:
【参考方案1】:您必须创建一个sql Date。构造函数需要很长时间,所以你应该没问题。
ps1.setDate(2, new java.sql.Date(dob));
【讨论】:
【参考方案2】:要解析字符串到日期,您可以使用 SimpleDateFormat 类,例如:
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
Date date = simpleDateFormat.parse(date);
那么你可以使用PreparedStatement的setDate(int, Date)
方法。
【讨论】:
我确实尝试了这个 1。但是当 setDate(int, Date) 要求将日期从 java.util.Date 类型转换为 java.sql.Date 并抛出 java.lang.ClassCastException 时: java.util.Date 不能转换为 java.sql.Date 如前所述:java.sql.Date sqlDate = new java.sql.Date(date.getTime())) 不工作...说不能将它从 java.util.Date 更改为 java.sql.Date...引发异常 java.sql.Date sqlDate = new java.sql.Date(date.getTime())) 然后在准备好的语句中使用你的新sqlDate。【参考方案3】:首先使用 SimpleDateFormat 解析日期,并确保输入的格式符合您的要求。然后,您可以在准备好的语句中使用相同的值。
Also, try this
【讨论】:
【参考方案4】:对于任意日期格式,使用SimpleDateFormat
得到java.util.Date
,然后将其转换为JDBC 日期:java.sql.Date sqlDate = new java.sql.Date(date.getTime()))
。对于 SQL 兼容格式 (yyyy-MM-dd),有 java.sql.Date.valueOf(String)
助手。
【讨论】:
以上是关于在java中接受日期类型命令行参数的主要内容,如果未能解决你的问题,请参考以下文章