JAVA在数据库中插入日期,日期由字符串变量传递值,占位符?要用单引号吗,怎么写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA在数据库中插入日期,日期由字符串变量传递值,占位符?要用单引号吗,怎么写?相关的知识,希望对你有一定的参考价值。

StringBuilder sqlcmd = new StringBuilder();
sqlcmd.append("insert into sfism4.u_sfis_daily_check_t ");
sqlcmd.append(" (SELECT LINE_NAME,SECTION_NAME,GROUP_NAME,STATION_NAME,0,to_date(?, 'yyyy-mm-dd hh24:mi:ss'),0 FROM sfis1.U_SFIS_INSPECTION_DEVICE_T ");
sqlcmd.append("where LINE_NAME=? AND ROWNUM=1) ");
第一个占位符?要怎么写,引号需要吗,设置值如下
ps.setString(1, sdf.format(fromDate));
ps.setString(2, lineName);
其中fromDate是一个字符串,类似这样2014-3-11 13:50:00

占位符 不需要引号 就直接一个问号就行了 然后用 ps.setString(1,"2014-3-11 13:50:00")追问

我想传一个变量,而且 这样写也不能传入数据库啊。。

追答

变量只要是个String型的 就可以用这种方式传进sql语句中啊。。

追问

数据库里的字段是date类型,如果不转换,就 不能写入,所以我才用to_date函数的,怎么改

追答

不需要转换把 date类型只能传 年月日 不能传时间 除非你是datetime类型的 比如说下面这个例子我用的是mysql数据库而且表里面的是datetime类型

例如:

Class.forName("com.mysql.jdbc.Driver");
String sql="INSERT into aaa value(?)";
String datetime="2014-3-11 13:50:01";
Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.0.116:3306/yqw?user=root&password=root");
PreparedStatement pre=conn.prepareStatement(sql);
pre.setString(1,datetime);
pre.executeUpdate();
pre.close();
conn.close();

追问

改完之后,插入数据库,没有报错也没有写入数据,这是什么情况

追答

不会这样把 没有报错就表明写入了数据啊 如果数据没写入 它就会报错 你用的是不是可视化工具
navicat 还是 mysql-font 你刷新下试下

参考技术A 不需要引号。本身就是个字符串。第一个传字符串可以了追问

数据库里的字段是date类型,不能穿String,所有要用to_date进行转换,怎么实现用占位符传递变量转换成日期类型,这个要怎么写才对

追答

我有点疑问。
你不就是要传字符串类型。然后用to_date转换成日期类型么?你既然sql用to_date了里面不适用字符串类型么?

追问

是我理解错你的意思了,你说的是对的,改完后写入数据库也没有反应,也没有报错,是怎么回事

追答

你这怎么不像插入语句呢。怎么还有SELECT 呢。

追问

有一种是这样写插入语句的,insert into table select

追答

建议你先拿sql语句在数据库里运行下

insert into table select相当于赋值表中的字段值。

如果两表字段相同,则可以直接这样用。
insert into table_a select * from table_b
如果两表字段不同,a表需要b中的某几个字段即可,则可以如下使用:
insert into table_a(field_a1,field_a2,field_a3) select field_b1,field_b2,field_b3) from table_b
以上语句前提条件是每个字段对应的字段类型相同或可以自动转换。

楼主前面是不是忘记指定字段了/

参考技术B ps.setString(1, sdf.format(fromDate));

改成ps.setString(1, fromDate);放个字符串数据类型的就好,不要转换成日期数据类型追问

数据库里的字段是date类型,不能穿String,所有要用to_date进行转换,怎么实现用占位符传递变量转换成日期类型

追答

在sql语句 insert into table (a,b,c,d) values (to_date(?,'yyyy-mm-dd hh24:mi:ss'),b,c,d);

如何使用 Codeigniter 将 JQuery datepicker 中的值插入 MySQL 日期数据类型?

【中文标题】如何使用 Codeigniter 将 JQuery datepicker 中的值插入 MySQL 日期数据类型?【英文标题】:How to insert values from JQuery datepicker to MySQL date datatype using Codeigniter? 【发布时间】:2012-09-13 15:50:09 【问题描述】:

我无法将 JQuery Datepicker 中的值插入到具有 Date 数据类型的 MySQL 数据库中。我将如何将字符串转换为日期数据类型?我将 Codeigniter 与 MVC 一起使用。这是我的代码:

javascript

<script>
$(function() 
    $( "#datepicker" ).datepicker(
        showOn: "button",
        buttonImage: "images/icons/calendar_24.png",
        buttonImageOnly: true,
        onSelect: function(dateText, inst)
            $("input[name='dob']").val(dateText);
        
    );

);
</script>

控制器

function create()

    $data = array(
        'FirstName' => $this->input->post('fname'),
        'DateofBirth' => $this->input->post('dob')
    );

    $this->site_model->add_record($data);
    $this->index();

查看

<?php echo form_open('site/create');?>
<p>
    <label for="fname">First Name:</label>
    <input type="text" name="fname" />
</p>

<p>
    <input type="text" name='dob' id="datepicker" />
</p>

谢谢大家! 我在谷歌阅读了一些解决方案 我这样做了:

控制器:

function create()

    $date = $this->input->post('dob');

    $data = array(
        'FirstName' => $this->input->post('fname'),
        'DateofBirth' => date('Y-m-d', strtotime($date))
    );

    $this->site_model->add_record($data);
    $this->index();

这解决了我的问题! :)

【问题讨论】:

MySQL 日期是一个具有特定格式的简单字符串:YYYY-MM-DD,范围从1000-01-019999-12-31。只需将收到的日期转换为这种格式(如果需要)并插入即可。 【参考方案1】:

我假设您的 MySQL 表的 dob 列是 DATE 类型。 Date 类型采用 yyyy-mm-dd 格式的值,例如2012-09-21

所以要回答您的问题 - 您需要将日期选择器中的日期格式化为上述有效格式。例如如果你的 datepicker 日期是 dd-mm-yy 格式,你需要使用控制器中 php 的 date() 函数将其转换为 mysql 日期格式....(还有其他方法可以处理日期,如 datetime 类)

function create()

    $data = array(
        'FirstName' => $this->input->post('fname'),
        'DateofBirth' => date('Y-m-d', strtotime(str_replace('-', '/', $this->input->post('dob')))); 
    );

    $this->site_model->add_record($data);
    $this->index();

使用 strtotime() 时的注意事项

m/d/y 或 d-m-y 格式的日期可以通过查看来消除歧义 各个组件之间的分隔符:如果分隔符是 斜线 (/),则假定为美式 m/d/y;而如果 分隔符是破折号 (-) 或点 (.),然后是欧洲 d-m-y 格式 是假定的。

【讨论】:

谢谢@Vamsi 你在考文垂大学学习过吗?我想我认识一个叫 Vamsi 的人。【参考方案2】:
<script>
$(function() 
    $( "#datepicker" ).datepicker(
        showOn: "button",
        buttonImage: "images/icons/calendar_24.png",
        buttonImageOnly: true,
        dateFormat: 'Y-m-d'       // No need to add onselect , value selected will automatically be added to input field #datepicker       
    );

);
</script>

你的代码很好

【讨论】:

【参考方案3】:
$(document).ready(function() 

    var year=new Date().getFullYear();
    var yearTo=year-18;
    var yearFrom=year-100;

    //display the years from hundred years in the past till 18 years in the past

    $( "#datePickerDOB" ).live("click",function()      

        $( "#datePickerDOB" ).datepicker(
            changeMonth: true,
            changeYear: true,
            yearRange: yearFrom+":"+yearTo,
            dateFormat: "dd-mm-yy"
        );
    );
);

【讨论】:

【参考方案4】:

使用以下格式设置日期选择器:

$('#datepicker').datepicker(dateFormat : 'yy-mm-dd');

【讨论】:

【参考方案5】:

您的控制器应如下所示:


    $date = $this->input->post('dob');

    $data = array(
        'FirstName' => $this->input->post('fname'),
        'DateofBirth' => date('Y-m-d', strtotime($date))
    );

    $this->site_model->add_record($data);
    $this->index();

我觉得这个更适合你

【讨论】:

以上是关于JAVA在数据库中插入日期,日期由字符串变量传递值,占位符?要用单引号吗,怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

如果日期值在周末,则重置日期值

将 HTML 表单日期传递给 VB 变量以进行 SQL 插入

组态王数据库不能插入日期和时间

关于JAVA中字符串转换成日期型的问题

使用字符串变量将自定义日期和当前时间插入 Oracle 数据库

Java中Date与String的相互转换