0
我尝试使用HSQLDB嵌入程序。如何解决hsqldb中的SQLSyntaxErrorException?
然而,当我在数据库中创建表并插入数据,出现错误。
以下是错误消息的一部分。
java.sql.SQLSyntaxErrorException: unexpected token: MAR required:)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeUpdate(Unknown Source)
当我在数据库中插入一些数据,它发生。
这是我的CREATE语句。
stmt.execute("CREATE TABLE IF NOT EXISTS readability (id INTEGER NOT NULL IDENTITY,"
+ "LOC INTEGER DEFAULT NULL, " + "numOfComments INTEGER DEFAULT NULL,"
+ "numOfBlankLines INTEGER DEFAULT NULL," + "numOfBitOperators INTEGER DEFAULT NULL,"
+ "readability double DEFAULT NULL," + "username varchar(255) DEFAULT NULL,"
+ "storedTime datetime DEFAULT NULL," + "methodname varchar(255) DEFAULT NULL,"
+ "classname varchar(255) DEFAULT NULL," + "patternrate double DEFAULT NULL,"
+ "maxNestedControl INTEGER DEFAULT NULL," + "programVolume double DEFAULT NULL,"
+ "entropy double DEFAULT NULL,"
+ "CONSTRAINT username FOREIGN KEY (username) REFERENCES user (username) ON DELETE NO ACTION ON UPDATE NO ACTION"
+ ");");
这是我的INSERT语句。
stmt.executeUpdate(
"INSERT INTO readability (LOC, numOfComments, numOfBlankLines, numOfBitOperators,"
+ " readability, username, storedTime, methodname, classname, patternRate, maxNestedControl, programVolume, entropy) VALUES("
+ readability.getLOC() + ", " + readability.getNumOfComments() + ", "
+ readability.getNumOfBlankLines() + ", " + readability.getNumOfBitOperators() + ", "
+ readability.getReadability() + ", '" + readability.getUser().getUsername() + "', "
+ readability.getStoredTime() + ", '" + readability.getMethodName() + "', '"
+ readability.getClassName() + "', " + readability.getPatternRate() + ", "
+ readability.getMaxNestedControl() + ", " + readability.getProgramVolume() + ", "
+ readability.getEntropy() + ")",
Statement.RETURN_GENERATED_KEYS);
对象可读性具有所有使用的属性。
哦,对不起,我将修改它。 – user3649231
不要将字符串连接到SQL语句中。相反,使用'PreparedStatement'作为'INSERT语句。 –
不要将值连接到查询字符串中。你的代码容易受到SQL注入的攻击,也可能是错误的原因。 [使用准备好的语句](https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)并使用参数占位符并使用适当的设置器设置值。 –