2012-05-31 71 views
1

我在PHP中有以下的MySQL查询,它工作正常。查询在MySQL和PHP中运行良好,但不在java中

$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是新批中的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

你可以显示表结构吗? – beck03076

+0

'show create table newbatch'会有所帮助。 – Jeshurun

+0

更新了表结构 – Ank

回答

4

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

再次尝试此操作display_errors = 'on'error_reporting(E_ALL | E_STRICT); 这是一个SQL错误,它不依赖于驱动程序。司机只显示给你的消息。

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

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

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

UPDATE2:Jep!

+0

是的,它确实和创建一个新的行.. – Ank

+0

也在数据库中运行良好 – Ank

+0

并且它是在两个时间相同的MySQL服务器? – cypher

1

看着你的表定义,你必须预先定义为不为空,但你没有在插入指定它的值,所以它应该显示正确的错误。

+0

我知道它应该。它不在PHP和数据库 – Ank

+0

进出口好奇,如果你已经定义列为NOT NULL,并且你的插入语句没有指定一个值,那PHP到底是什么价值? – BenSchro10

+0

@ BenSchro10阅读此http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html – cypher

0

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

+1

有没有听说过SQL模式? http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html – cypher

相关问题