嗨,我无法执行以下功能而没有遇到以下异常。我不确定为什么会这样。我认为这可能与报价有关。如果有问题,我正在使用derby数据库。
java.sql.SQLSyntaxErrorException
这是我尝试执行的以下代码:
public void addAlbum(Album album) throws IOException, SQLException {
Properties props = new Properties();
FileInputStream in = new FileInputStream("database.properties");
props.load(in);
in.close();
props.getProperty("jdbc.drivers");
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
String sql = null;
if(album instanceof CDAlbum) {
CDAlbum cdAlbum = (CDAlbum)album;
sql = "INSERT INTO MyAlbums VALUES ('CD', '" + cdAlbum.getTitle() + "', '" + cdAlbum.getGenre() + "','" + cdAlbum.getArtist() + "', '" + cdAlbum.getTracks() + "');";
}
if(album instanceof DVDAlbum) {
DVDAlbum dvdAlbum = (DVDAlbum)album;
sql = "INSERT INTO MyAlbums VALUES ('DVD', '" + dvdAlbum.getTitle() + "', '" + dvdAlbum.getGenre() + "','" + dvdAlbum.getDirector() + "', '" + dvdAlbum.getPlotOutline() + "');";
}
statement.executeUpdate(sql);
System.out.println("Album Added!");
if(statement != null) {
statement.close();
}
if(connection != null) {
connection.close();
}
}
这是例外:
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "t" at line 2, column 5.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(Unknown Source)
at au.edu.uow.CollectionDB.MyCollectionDB.addAlbum(MyCollectionDB.java:194)
at au.edu.uow.Collection.CollectionFactory.loadCollection(CollectionFactory.java:136)
at MyCollection.main(MyCollection.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: ERROR 42X01: Syntax error: Encountered "t" at line 2, column 5.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.sql.compile.ParserImpl.parseStatementOrSearchCondition(Unknown Source)
at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
... 11 more
您的代码中有两个问题:
SQL语句;
最后不需要分号。它将使代码失败。
该代码易于进行SQL注入并且难以维护。请PreparedStatement
改用:
这应该是工作代码:
String sql = "INSERT INTO MyAlbums VALUES (?, ?, ?, ?, ?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
if(album instanceof CDAlbum) {
pstmt.setString(1, "CD");
CDAlbum cdAlbum = (CDAlbum)album;
pstmt.setString(4, cdAlbum.getArtist());
pstmt.setString(5, cdAlbum.getTracks());
}
if(album instanceof DVDAlbum) {
pstmt.setString(1, "DVD");
DVDAlbum dvdAlbum = (DVDAlbum)album;
pstmt.setString(4, dvdAlbum.getDirector());
pstmt.setString(5, dvdAlbum.getPlotOutline());
}
pstmt.setString(2, album.getTitle());
pstmt.setString(3, album.getGenre());
pstmt.executeUpdate();
在 大 平原字符串连接而这种做法对于你的情况之间的区别就是PreparedStatement
参数会逃跑任何'
和"
和其他字符你。
尝试使用此查询 #1064-您的SQL语法有错误; 表和几乎完全相同-有相同的列。 请求中有什么错误?
问题内容: 下面是用户单击“ 应用余额” 时的代码 。 这适用于第一部分,用户的余额更新很好,但是当我尝试执行第二条语句时,出现SQL语法错误。是什么原因引起的? 下面是运行此命令时得到的堆栈跟踪。 问题答案: 您的第二个查询缺少子句中的右括号。 代替直接在查询中附加参数,请使用参数化查询。 这样看起来会更干净,更容易编写。最重要的是,它将使您免受SQL Injection 攻击。 这是用于参数化
为了快速地将数据插入到数据库中,我一直在尝试生成一个巨大的SQL(大约200个查询),但由于某种原因,我得到了SQL错误,但不确定是什么导致了它。 错误: SQL错误(1064):您的SQL语法有错误;查看与您的MySQL server版本相对应的手册,以了解在第8行附近使用的正确语法 下面是我的一部分代码: 你可以在Pastebin上找到我的完整SQL。 不知道是什么原因造成的,因为后面的“6”
我正在尝试在表a中插入外键(在phpmyadmin中): 将表A添加外键(id_B)引用B(id_B); 但我得到了一个错误: 表A的id_A为主键,表B的id_B为主键。这两个表都使用innoDB作为存储引擎,表A中的id_B列和表B中的id_B列具有相同的类型。 出了什么问题,我该如何解决?
新数组列表 我用多头填充这个数组列表。 当我试图将其插入postgresql时,我使用以下方法: 使用JDBC模板。但是当我试图运行这段代码时,它在“ARRAY[?]”上给出了一个错误。但如果temp2是一个单一的数字,比如:1253214,它就可以工作。有人有主意吗? 我的错误是: PreparedStatementCallback;错误的SQL语法[UPDATE pb1plnitm SET p
我试图将一个表从一个数据库导入到另一个数据库,但是一直出现以下错误 命令: 错误: 错误1064(42000):SQL语法中有错误;检查与您的MySQL server版本相对应的手册,以确定在第1行使用“integer),latitude,longitude,latest_seen,last_scanned FROM rocketmapdb.spawnp'附近的语法是否正确 sql版本:mysql