查询在mysql和php中运行良好,但在java中运行不正常

时间:2012-05-31 23:08:04

标签: java php mysql

我在PHP中有以下mysql查询,它工作正常。

$strUpdate = "INSERT INTO  `batchfolder`.`newbatch` (`BatchID` ,`Batch` ,`barcode` ,`PG`)VALUES (NULL ,  '',  '1',  '')";

并且在我直接在数据库中运行时也很好。

然而,当我在java中运行它时,

 try {
          conn = DriverManager.getConnection (url, userName, password);
          Statement st = conn.createStatement();
          st.execute("INSERT INTO  `batchfolder`.`newbatch` (`BatchID` ,`Batch` ,`barcode` ,`PG`)VALUES (NULL ,  '',  '1',  '')");            
          st.close();
}

它出现以下错误。

Exception in thread "main" java.sql.SQLException: Field 'Pre' doesn't have a default value

Pre是数据库中的下一行,它没有默认值。

我的问题是,那么这个查询如何在mysql和php中正常运行。

P.S BatchID是newbatch中的int(10) autoincremented值。

这是我的表结构。

CREATE TABLE IF NOT EXISTS `newbatch` (
  `BatchID` int(10) NOT NULL AUTO_INCREMENT,
  `Batch` varchar(100) NOT NULL,
  `barcode` varchar(5) NOT NULL,
  `Ly` varchar(5) NOT NULL DEFAULT '0',
  `PG` varchar(5) NOT NULL,
  `Pre` varchar(5) NOT NULL,
  `Flu` varchar(5) NOT NULL,
  `FluID` varchar(100) DEFAULT NULL,
  `DateCreated` varchar(100) DEFAULT NULL,
  `Comments` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`BatchID`),
  UNIQUE KEY `FluID` (`FluID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1000160 ;

3 个答案:

答案 0 :(得分:4)

您是否确定这实际上是在PHP中运行的?您可能没有看到错误消息。

使用display_errors = 'on'error_reporting(E_ALL | E_STRICT);再试一次 这是一个SQL错误,它不依赖于驱动程序。司机只会向您显示该消息。

<强>更新 看起来Java出于某种原因关闭了MySQL的严格模式。 (据我所知)唯一应该能够导致此行为的是MySQL严格模式关闭。

  

如果未启用严格模式,MySQL会将列设置为隐式   列数据类型的默认值。

您可以SELECT @@GLOBAL.sql_mode;检查服务器运行的模式。在Java和PHP中尝试一下。如果结果不同那么这就是你的答案。

UPDATE2: Jep!

答案 1 :(得分:1)

查看了您的表定义,您将Pre定义为非null,但是您没有在插入中为其指定值,因此它应该显示错误。

答案 2 :(得分:0)

您有几个“NOT NULL”的数据库字段,因此您必须在INSERT语句中指定这些字段。我无法想象这在PHP中是如何工作的。