Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC MySQL插入类型时间戳失败_Java_Mysql_Jdbc_Timestamp - Fatal编程技术网

Java JDBC MySQL插入类型时间戳失败

Java JDBC MySQL插入类型时间戳失败,java,mysql,jdbc,timestamp,Java,Mysql,Jdbc,Timestamp,我无法正确插入时间戳字段 方法如下所示: private static void addPickup(Connection conn, boolean debug, String logfileName, String serverName, String mapName, long start, long end) throws SQLException { try (CallableStatement statement = conn.prepa

我无法正确插入时间戳字段

方法如下所示:

private static void addPickup(Connection conn, boolean debug, String 
        logfileName, String serverName, String mapName, long start, 
        long end) throws SQLException {

    try (CallableStatement statement = conn.prepareCall("{CALL AddPickup "
                 + "(?, ?, ?, ?, ?) }")) {
        statement.setString(1, logfileName);
        statement.setString(2, serverName);
        statement.setString(3, mapName);
        statement.setTimestamp(4, new Timestamp(start));
        statement.setTimestamp(5, new Timestamp(end));
        statement.execute();
    }
}
start的值为1373573918000

end的值为1373574819000

程序:

CREATE PROCEDURE AddPickup(
    IN logfilename VARCHAR(45), 
    IN servername VARCHAR(10), 
    IN mapname VARCHAR(20),
    IN start TIMESTAMP,
    IN end TIMESTAMP
)
AddPickup:BEGIN
IF EXISTS(SELECT p.id FROM pickup p WHERE p.logfile_name = logfilename) THEN
    LEAVE AddPickup;
END IF;

INSERT IGNORE INTO map (name) VALUES (mapname);
INSERT IGNORE INTO server (name) VALUES (servername);
INSERT INTO pickup (logfile_name, server_id, map_id, started, ended, datetime) 
    VALUES (
        logfilename, 
        (SELECT s.id FROM server s WHERE s.name = servername),
        (SELECT m.id FROM map m WHERE m.name = mapname),
        start,
        end,
        NOW()
    );
END //
CREATE TABLE map (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) UNIQUE NOT NULL
) ENGINE = 'InnoDB';

CREATE TABLE server (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(10) UNIQUE NOT NULL
) ENGINE = 'InnoDB';

CREATE TABLE pickup (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    logfile_name VARCHAR(45) UNIQUE NOT NULL,
    server_id INT UNSIGNED NOT NULL,
    map_id INT UNSIGNED NOT NULL,
    started TIMESTAMP NOT NULL,
    ended TIMESTAMP NOT NULL,
    datetime DATETIME NOT NULL,
    FOREIGN KEY (map_id) REFERENCES map(id) ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (server_id) REFERENCES server(id) ON UPDATE CASCADE ON DELETE CASCADE
 ) ENGINE = 'InnoDB';
表格:

CREATE PROCEDURE AddPickup(
    IN logfilename VARCHAR(45), 
    IN servername VARCHAR(10), 
    IN mapname VARCHAR(20),
    IN start TIMESTAMP,
    IN end TIMESTAMP
)
AddPickup:BEGIN
IF EXISTS(SELECT p.id FROM pickup p WHERE p.logfile_name = logfilename) THEN
    LEAVE AddPickup;
END IF;

INSERT IGNORE INTO map (name) VALUES (mapname);
INSERT IGNORE INTO server (name) VALUES (servername);
INSERT INTO pickup (logfile_name, server_id, map_id, started, ended, datetime) 
    VALUES (
        logfilename, 
        (SELECT s.id FROM server s WHERE s.name = servername),
        (SELECT m.id FROM map m WHERE m.name = mapname),
        start,
        end,
        NOW()
    );
END //
CREATE TABLE map (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) UNIQUE NOT NULL
) ENGINE = 'InnoDB';

CREATE TABLE server (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(10) UNIQUE NOT NULL
) ENGINE = 'InnoDB';

CREATE TABLE pickup (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    logfile_name VARCHAR(45) UNIQUE NOT NULL,
    server_id INT UNSIGNED NOT NULL,
    map_id INT UNSIGNED NOT NULL,
    started TIMESTAMP NOT NULL,
    ended TIMESTAMP NOT NULL,
    datetime DATETIME NOT NULL,
    FOREIGN KEY (map_id) REFERENCES map(id) ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (server_id) REFERENCES server(id) ON UPDATE CASCADE ON DELETE CASCADE
 ) ENGINE = 'InnoDB';

它将所有内容插入表中,只插入时间戳字段、拾取开始拾取结束始终显示“0000-00-00:00:00”,我不知道为什么。

我认为问题在于您传递给设置时间戳的参数中

当我使用setTimestamp时,如果我没有使用特定的日期,我总是将new date().getTime()作为参数传递

private static void addPickup(Connection conn, boolean debug, String 
    logfileName, String serverName, String mapName, long start, 
    long end) throws SQLException {

try (CallableStatement statement = conn.prepareCall("{CALL AddPickup "
             + "(?, ?, ?, ?, ?) }")) {
    statement.setString(1, logfileName);
    statement.setString(2, serverName);
    statement.setString(3, mapName);
    statement.setTimestamp(4, new Date().getTime());
    statement.setTimestamp(5, new Date().getTime());
    statement.execute();
}

}

我不太清楚它在MYSQL中是如何工作的,但当我在SQLSERVER中使用时间戳时,每当创建行时,都会自动生成时间戳,在这种情况下,我没有从查询中为时间戳提供任何值。因此,只需尝试插入其他值 希望它也能帮助你