有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ORA01861:文本与格式字符串不匹配

在我的应用程序中,我将日期值(作为字符串)作为参数传递给Servlet。在Servlet代码中,我将字符串转换为sql日期为“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);
    }
 }

当我在安卓应用程序中调用它时,它显示错误为“ORA-01861:literal与格式字符串不匹配”。当我使用示例输入进行测试时,我使用的格式显示了正确的结果。但数据没有被插入

我的代码中有什么问题?为什么我会收到这个错误?我需要进一步转换吗?如果是的话,怎么办

另外,有人解释我可以在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");

共 (3) 个答案

  1. # 1 楼答案

    我可以在你的代码中看到几个问题

    1)删除类。对于名称(“oracle.jdbc.driver.OracleDriver”),DriverManager知道如何在类路径上找到必要的驱动程序

    2)使用连接准备声明,参见API

    3)删除conn.setAutoCommit(真);默认情况下,conn处于自动提交模式

    4)使用stmt。执行更新而不是stmt。行刑

  2. # 2 楼答案

    首先,不要这样构造查询(将所有内容附加到单个字符串中)

    它易受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();
    

    现在,希望你能想出如何为自己做到这一点

    有关更多信息,请参见thisthis

  3. # 3 楼答案

    //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();
    }
    

    从“年/月/日”到“年/月/日”

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
    String convertedDate = formatter.format(testDate);
    System.out.println("Your converted Date :- "+convertedDate);