我在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 ;
答案 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中是如何工作的。