Java &引用;文字与格式字符串“不匹配”;错误
当我尝试执行下面的代码时,它会给我一个Java &引用;文字与格式字符串“不匹配”;错误,java,sql,oracle,ora-01861,Java,Sql,Oracle,Ora 01861,当我尝试执行下面的代码时,它会给我一个java.sql.SQLException:ORA-01861:literal与格式字符串不匹配的错误 我正在尝试将一些列值从customer1\u details表复制到customer2\u details表。我试图移动的列数据类型是TIMESTAMP(6)的TIME\u registed,DATE\u executed列,而DATE\u OF\u borning列的数据类型是DATE try { Connection c
java.sql.SQLException:ORA-01861:literal与格式字符串不匹配的错误
我正在尝试将一些列值从customer1\u details
表复制到customer2\u details
表。我试图移动的列数据类型是TIMESTAMP(6)
的TIME\u registed
,DATE\u executed
列,而DATE\u OF\u borning
列的数据类型是DATE
try
{
Connection conn=Address.getOracleConnection();
int id = 1;
Date dob = null;
Timestamp timereg = null,datedischarged = null;
Statement stmt=conn.createStatement();
ResultSet res=stmt.executeQuery("SELECT TIME_REGISTERED,DATE_DISCHARGED,DATE_OF_BIRTH from customer1_details WHERE customer_id = '"+id+"' ");
if(res.next())
{
timereg=res.getTimestamp("TIME_REGISTERED");
datedischarged=res.getTimestamp("DATE_DISCHARGED");
dob=res.getDate("DATE_OF_BIRTH");
}
String sql1="INSERT INTO customer2_details(TIME_REGISTERED_3,DATE_DISCHARGED_3,DATE_OF_BIRTH,customer_ID) "
+ "VALUES('"+timereg+"','"+datedischarged+"','"+dob+"','"+id+"') ";
PreparedStatement pst=conn.prepareStatement(sql1);
pst.executeUpdate();
pst.close();
conn.close();
}
catch(Exception e)
{ System.out.print(e); }
如果任何人不使用INSERT INTO提供答案,这将更有帮助。。。选择。。。语句
您可以在一个语句中使用以下查询完成此操作:
"INSERT INTO customer2_details (TIME_REGISTERED_3,DATE_DISCHARGED_3,DATE_OF_BIRTH,customer_ID)
SELECT TIME_REGISTERED,DATE_DISCHARGED,DATE_OF_BIRTH, customer_id
from customer1_details WHERE customer_id = '"+id+"' "
这很可能是由于将日期和时间戳变量作为字符串传递给insert语句造成的
插入或更新日期或时间戳值时,有一种默认格式,可以将这些值作为字符串传递。您传递的是java关于如何将日期和时间戳转换为字符串的思想。这两个似乎不匹配
您最好的选择可能是使用绑定变量,那么框架应该考虑到这一点
另一种方法是使用Oracle的to_date()函数,您可以在其中指定格式字符串。然后,您将定义一个格式字符串,该字符串考虑java将日期表示为字符串的方式。但是,我不确定java表示是否依赖于语言环境。如果是这样,您必须编写自己的date_to_string()方法,该方法始终以相同的格式返回日期,或者您的程序可能在某些计算机上工作,但在其他具有不同语言环境的计算机上则无法工作
最后,您可以执行完全绕过java层的insert select操作。使用getString()将时间戳作为字符串读取
或者在java时间戳对象实例中调用toString()
String sql1="INSERT INTO customer2_details(TIME_REGISTERED_3,DATE_DISCHARGED_3,DATE_OF_BIRTH,customer_ID) "
+ "VALUES('"+timereg.toString()+"','"+datedischarged.toString()+"','"+dob.toString()+"','"+id+"') ";
为什么不把它作为一个语句:INSERT-INTO。。。选择…
?我认为该错误意味着Java连接到字符串时使用的日期格式与Oracle解析日期时理解的语法不匹配。如果你想这样做,您需要以Oracle理解的方式明确设置日期的格式。我的实际查询有点复杂。我正在从多个表中收集数据,然后将该数据插入customer2_details表中。除上述问题中提供的这三列之外,所有其他列都不会给出任何错误。您应该仍然能够在一个表中完成此操作语句,通过使用join.Ok我将尝试@barmarI接受答案是正确的。但请阅读我对问题的编辑。是否可以不使用插入到。。。选择。。。大概是吧。但是因为我不懂Java,我不能不做更多的研究就写它。如果您了解Java,您应该能够根据我前面评论中的建议轻松地理解它。