在我的应用程序中,我将日期值(作为字符串)作为参数传递给Servlet。在Servlet代码中,我将字符串转换为sql date为“2013-02-05”(yyyy-MM-dd)。
示例: dat =“05/02/2013”转换为 sqlDate =“2013-02-05”。 我的servlet代码是
dat= request.getParameter("dat");
//dat="05/02/2013";
try
{
java.util.Date date=new SimpleDateFormat("dd/MM/yy").parse(dat);
//out.println(date);
sqlDate = new java.sql.Date(date.getTime());
//out.println(sqlDate);
}
catch(Exception e)
{
}
if(div_code!=null)
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@xxx.xxx.x.xxx:xxx:pdsm", "test", "test");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("insert into offer1 values('"+r_code+"','"+v_name+"','"+vcode+"','"+div_code+"','"+sec_code+"','"+extent+"','"+phone+"','"+sqlDate+"','"+loan+"','"+seeds+"','"+offerno+"','"+loc+"')");
conn.setAutoCommit(true);
out.println("data inserted");
}catch(Exception e)
{
out.println(e);
}
}
当我从Android应用程序调用它时,它显示错误为“ORA-01861:文字与格式字符串不匹配”。当我使用样本输入进行测试时,我使用的格式显示正确的结果。但数据没有插入。
我的代码有什么问题?为什么我收到此错误?我需要进一步转换吗?如果是,那怎么办?
另外,有人解释我可以在servlet中使用pl / sql函数(to_date())吗?因为转换日期很容易
编辑:修改代码:
String query="insert into offer1('RCODE','OFFERNO','DAT') values(?,?,?)";
PreparedStatement ps=conn.prepareStatement(query);
ps.setString(1,r_code);
ps.setString(2,offerno);
ps.setDate(3,sqlDate);
ResultSet rs=ps.executeQuery();
out.println("data inserted");
答案 0 :(得分:1)
首先,不要像这样构建你的查询(将所有内容附加到单个字符串中)。
易受SQL注入攻击请参阅SQL injection
因此,最好使用PreparedStatement
,因为它可以保护您免受SQL注入,并且您将自动处理各种值的转换任务。
因此,如果您有java.sql.Date
变量sqlDate
,现在要将其插入数据库中,那么您需要执行以下简单步骤:
String query = "insert into your_table_name(`name`,`myDate`) values(?,?)";
PreparedStatement ps = conn.prepareStatement(query);
//now just set the values like this
ps.setString(1,"ABC");
//note index starts at 1
ps.setDate(2,sqlDate);
ResultSet rs = ps.executeQuery();
现在希望你能弄清楚如何为自己做这件事。
答案 1 :(得分:0)
//String date = "05/02/2013";
dat= request.getParameter("dat");
SimpleDateFormat dateFormater = new SimpleDateFormat("dd/MM/yyyy");
Date testDate = null;
try {
testDate = dateFormater.parse(dat);
}catch(Exception ex){
ex.printStackTrace();
}
从“dd / MM / yyyy”到“yyyy / MM / dd”
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
String convertedDate = formatter.format(testDate);
System.out.println("Your converted Date :- "+convertedDate);
答案 2 :(得分:0)
我可以在你的代码中看到几个问题
1)删除Class.forName(“oracle.jdbc.driver.OracleDriver”),DriverManager知道如何在类路径上找到必要的驱动程序
2)使用conn.prepareStatement,参见API
3)删除conn.setAutoCommit(true); conn默认处于自动提交模式
4)使用stmt.executeUpdate而不是stmt.executeQuery