2012-05-31 69 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

相關問題