查询在mysql和php中运行良好,但在java中运行不好
我有以下PHP中的mysql查询,它运行良好查询在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
$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_模式我认为这个答案是正确的。MySQL的安装必须禁用严格模式,但Java与PHP和MySQL不同,强制使用严格模式。检查你的my.ini文件。它在数据库中运行良好,两次都是同一台MySQL服务器吗?我试着按照你的建议做了。php和java都没有生成任何东西。可能不是全局的,但当时是会话模式<代码>选择@@SESSION.sql_模式我认为这个答案是正确的。MySQL的安装必须禁用严格模式,但Java与PHP和MySQL不同,强制使用严格模式。检查你的my.ini文件。我知道它应该。这在PHP和数据库中不存在我很好奇,如果你已经将列定义为NOTNULL,并且你的insert语句没有指定值,那么PHP到底把什么作为一个值呢?@BenSchro10阅读此文感谢@Cypher,我的观点是,即使使用mysql选项,SQL语句本身仍然无效,所以我想这可能是驱动程序的问题,只要重写查询使其正确,这最终是正确的,因为我们已经完成了表的设计。我重写了这个问题,一切都很好。我很好奇,为什么我的错误查询一直在工作而没有抛出错误。这是第一次,我对某些东西在起作用(当它不应该起作用的时候)感到不高兴。我知道它应该起作用。这在PHP和数据库中不存在我很好奇,如果你已经将列定义为NOTNULL,并且你的insert语句没有指定值,那么PHP到底把什么作为一个值呢?@BenSchro10阅读此文感谢@Cypher,我的观点是,即使使用mysql选项,SQL语句本身仍然无效,所以我想这可能是一个驱动程序的问题,只需重写q