Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询在mysql和php中运行良好,但在java中运行不好_Java_Php_Mysql - Fatal编程技术网

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

查询在mysql和php中运行良好,但在java中运行不好,java,php,mysql,Java,Php,Mysql,我有以下PHP中的mysql查询,它运行良好 $strUpdate = "INSERT INTO `batchfolder`.`newbatch` (`BatchID` ,`Batch` ,`barcode` ,`PG`)VALUES (NULL , '', '1', '')"; 当我直接在数据库中运行它时,它也很好 但是当我用java运行它时 try { conn = DriverManager.getConnection (url, userName, pas

我有以下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)自动递增的

这是我的桌子结构

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 ;

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

使用
display\u errors='on'
error\u报告(E|u ALL | E|u STRICT)重试此操作
这是一个SQL错误,它不依赖于驱动程序。驱动程序只是向您显示消息

更新: 看起来Java出于某种原因正在关闭MySQL的严格模式。据我所知,导致这种行为的唯一原因是MySQL严格模式被关闭

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

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


更新2:

您是否绝对确定它确实在PHP中运行?您可能只是没有看到错误消息

使用
display\u errors='on'
error\u报告(E|u ALL | E|u STRICT)重试此操作
这是一个SQL错误,它不依赖于驱动程序。驱动程序只是向您显示消息

更新: 看起来Java出于某种原因正在关闭MySQL的严格模式。据我所知,导致这种行为的唯一原因是MySQL严格模式被关闭

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

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



UPDATE2:

查看表定义,您已预定义为NOTNULL,但您没有在insert中为其指定值,因此它应该显示正确的错误

查看您的表定义,您已经将其预定义为NOTNULL,但是您没有在insert中为其指定值,因此它应该显示一个正确的错误

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

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

你能展示一下表的结构吗?
show create table newbatch
会有所帮助。我感觉到你刚刚学习Java,可以研究一下使用prepared语句。@BenSchro10是的,我对Java不熟悉。我以前用过,但直到最近才经常用。我也知道准备好的声明。但是我猜它会抛出同样的错误..我只是在使用
CREATE
语句生成表之后,尝试在phpMyAdmin中执行您的查询--它不起作用(与您得到的错误相同)。我认为为了使它在PHP中工作,必须进行其他操作。您能显示表的结构吗?
show create table newbatch
会有所帮助。我感觉您刚刚学习Java,请研究使用prepared语句。@BenSchro10是的,我对Java不熟悉。我以前用过,但直到最近才经常用。我也知道准备好的声明。但是我猜它会抛出同样的错误..我只是在使用
CREATE
语句生成表之后,尝试在phpMyAdmin中执行您的查询--它不起作用(与您得到的错误相同)。我认为为了在PHP中工作,它必须进行一些其他的操作。在数据库中也可以正常运行,这两次都是同一台MySQL服务器吗?我试着按照你的建议去做。php和java都没有生成任何东西。可能不是全局的,但当时是会话模式<代码>选择@@SESSION.sql_模式选择@@SESSION.sql_模式