在我的java代码中不断出现mysql语法错误?
我正在开发一个电子邮件数据库程序,当我试图将电子邮件存储到数据库中时,我仍然会遇到一个语法错误,我不确定为什么会发生这种情况。我以完全相同的方式存储用户对象,虽然它确实将用户对象存储到数据库中,但当我退出程序并再次测试程序时,它最终更新了数据库中的一些值,而不是插入新值。语法错误可能是因为我的某些列存储blob吗 MYSQL:在我的java代码中不断出现mysql语法错误?,java,mysql,database,jdbc,syntax-error,Java,Mysql,Database,Jdbc,Syntax Error,我正在开发一个电子邮件数据库程序,当我试图将电子邮件存储到数据库中时,我仍然会遇到一个语法错误,我不确定为什么会发生这种情况。我以完全相同的方式存储用户对象,虽然它确实将用户对象存储到数据库中,但当我退出程序并再次测试程序时,它最终更新了数据库中的一些值,而不是插入新值。语法错误可能是因为我的某些列存储blob吗 MYSQL: 'CREATE TABLE `item` (\n `Id` int(10) unsigned NOT NULL DEFAULT \'0\',\n `To`
'CREATE TABLE `item` (\n `Id` int(10) unsigned NOT NULL DEFAULT \'0\',\n `To` varchar(300) NOT NULL COMMENT \'To\',\n `From` varchar(300) NOT NULL,\n `Subject` varchar(45) NOT NULL COMMENT \'subject\',\n `topic` varchar(45) NOT NULL COMMENT \'category\',\n `Email_Content` blob NOT NULL COMMENT \'Email Content may change\',\n `Comments` blob,\n `Attachments` blob,\n PRIMARY KEY (`Id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8'
数据库类:
public void storeItem() throws SQLException{
String checkSql = "select count(*) as count from item where Id=?";
PreparedStatement checkStatement = con.prepareStatement(checkSql);
String storeSql = "insert into item(Id, To, From, Subject, topic, Email_Content, Comments, Attachments) values(?,?,?,?,?,?,?,?)";
PreparedStatement insertStatement = con.prepareStatement(storeSql);
String updateSql = "insert into set To=? From=?, Subject=?, topic=?, Email_Address=?, Comments=?, Attachments=? where Id=?";
PreparedStatement updateStatement = con.prepareStatement(updateSql);
for(Item items: Items){
int ItemId = items.getId();
String To = items.getTo();
String From = items.getFrom();
String Subject = items.getSubject();
String Topic = items.getTopic();
String Email = items.getMessageContent();
String Comments = items.getComments();
String attachments = items.getAttachments();
checkStatement.setInt(1, ItemId);
ResultSet checkResult = checkStatement.executeQuery();
checkResult.next();
int count = checkResult.getInt(1);
if (count == 0) {
System.out.println("Inserting person with ID " + ItemId);
int col = 1;
insertStatement.setInt(col++, ItemId);
insertStatement.setString(col++, To);
insertStatement.setString(col++, From);
insertStatement.setString(col++, Subject);
insertStatement.setString(col++, Topic);
insertStatement.setString(col++, Email);
insertStatement.setString(col++, Comments);
insertStatement.setString(col++, attachments);
insertStatement.executeUpdate();
} else {
System.out.println("Updating person with ID " + ItemId);
int col = 1;
updateStatement.setString(col++, To);
updateStatement.setString(col++, From);
updateStatement.setString(col++, Subject);
updateStatement.setString(col++, Topic);
updateStatement.setString(col++, Email);
updateStatement.setString(col++, Comments);
updateStatement.setString(col++, attachments);
updateStatement.setInt(col++, ItemId);
updateStatement.executeUpdate();
}
System.out.println("Count for person with ID " + ItemId + " is " + count);
}
updateStatement.close();
insertStatement.close();
checkStatement.close();
}
控制器类
public void storeItem() throws SQLException{
dc.storeItem();
}
大型机类
public void completeEventOccurred() {
if (LoadEmailPanel.getComplete() == true) {
String To = LoadEmailPanel.getText(1);
String From = LoadEmailPanel.getText(2);
String Subject = LoadEmailPanel.getText(3);
String Topic = LoadEmailPanel.getText(4);
String Email = LoadEmailPanel.getText(5);
String Notes = LoadEmailPanel.getText(6);
String Attach = LoadEmailPanel.getText(7);
EmailEvent ev = new EmailEvent(this, To, From, Subject,
Topic, Email, Notes, Attach);
controller.addEmail(ev);
connect();
try {
controller.storeItem();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cards.show(MainFrame.this.getContentPane(), "Home");
}
}
});
这将帮助您在查询中查找语法错误
在查询中使用单引号和双引号的组合
insertQuery=插入TableNameName、EnrollmentNo、Countryvalues+'+Mack'、+12103596'+India+' 错误消息是什么?这是堆栈跟踪给我的。com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;查看与您的MySQL服务器对应的手册,了解使用“to”、“From”、“Subject”、“topic”、“Email\u Content”、“Comments”、“Attachments values”1、“abhila”在第1行的正确语法to是@Kerpal:MySQL中有保留字。当使用as column或table namesupdate语句不正确,应该是update item set,而不是insert into set时,您需要使用反勾号对其进行转义。建议的解决方案易受SQL注入的影响。我发现我的程序存在语法错误。这只是保留字和我的update语句错误。谢谢你的意见。
JOptionPane.showMessageDialog(null,query);