1

我在 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 中运行良好。

PS 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 ;
4

3 回答 3

4

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

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

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

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

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

更新2:杰普

于 2012-05-31T23:18:03.857 回答
1

查看您的表定义,您已将 Pre 定义为 not null,但您没有在插入时为其指定值,因此它应该正确显示错误。

于 2012-05-31T23:32:21.417 回答
0

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

于 2012-05-31T23:43:39.663 回答