Apache Derby:java.sql.SQLSyntaxErrorException
我刚刚开始学习Apache Derby:java.sql.SQLSyntaxErrorException,java,sql,csv,derby,Java,Sql,Csv,Derby,我刚刚开始学习SQL,正在尝试制作一个表,并用CSV-文件中的一些数据填充它 以下是尝试执行此操作的应用程序: public sqlThingy() throws Exception { File spritesheetsCreate = new File("sql/spritesheetsCreate.sql"); File spritesheetsData = new File("sql/spritesheetsData.sql"); Class.forName(
SQL
,正在尝试制作一个表,并用CSV
-文件中的一些数据填充它
以下是尝试执行此操作的应用程序:
public sqlThingy() throws Exception {
File spritesheetsCreate = new File("sql/spritesheetsCreate.sql");
File spritesheetsData = new File("sql/spritesheetsData.sql");
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
Connection conn = DriverManager
.getConnection("jdbc:derby:TESTNAME;create=true");
//CREATE TABLE
try (PreparedStatement statement = conn
.prepareStatement(readFile(spritesheetsCreate))) {
statement.execute();
}
//FILL TABLE WITH DATA
try (PreparedStatement ps = conn.prepareStatement(readFile(spritesheetsData))) {
try (CSVReader rdr = new CSVReader(new FileReader(new File(
"res/spritesheets.csv")), ',', '"', 1)) {
for (String[] row : rdr.readAll()) {
ps.setString(1, row[0]);
ps.setString(2, row[1]);
ps.setInt(3, Integer.valueOf(row[2]));
ps.execute();
}
}
}
}
private static String readFile(File f) throws Exception {
String contents = "";
try (Scanner sc = new Scanner(f)) {
contents = sc.useDelimiter("\\Z").next();
}
return contents;
}
public static void main(String[] args) throws Exception {
ResourceLoaderSQL test = new ResourceLoaderSQL();
}
我的应用程序使用的两个SQL
-文件如下所示:
spritesheetcreate.sql:
name,spritesheet-location,tilesize
spot1,location/loc1,10
spot2,location/loc2,20
spot3,location/loc3,30
spot4,location/loc4,40
创建表格精灵表格表格(
name VARCHAR(7)非空主键
,spritesheetlocation VARCHAR(15)
,tilesize整数
)
spritesheetsData.sql:
name,spritesheet-location,tilesize
spot1,location/loc1,10
spot2,location/loc2,20
spot3,location/loc3,30
spot4,location/loc4,40
插入spritesheetstable(“名称”、“spritesheetlocation”、“tilesize”)
值(?,?)
CSV
-文件如下所示:
spritesheets.csv:
name,spritesheet-location,tilesize
spot1,location/loc1,10
spot2,location/loc2,20
spot3,location/loc3,30
spot4,location/loc4,40
运行此beauty时,我遇到的错误是:
Exception in thread "main" java.sql.SQLSyntaxErrorException: 'name' is not a column in table or VTI 'APP.SPRITESHEETSTABLE'.
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.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.EmbedPreparedStatement.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement42.<init>(Unknown Source)
at org.apache.derby.jdbc.Driver42.newEmbedPreparedStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at game.io.ResourceLoaderSQL.<init>(ResourceLoaderSQL.java:36)
at game.io.ResourceLoaderSQL.main(ResourceLoaderSQL.java:83)
Caused by: java.sql.SQLException: 'name' is not a column in table or VTI 'APP.SPRITESHEETSTABLE'.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
... 16 more
Caused by: ERROR 42X14: 'name' is not a column in table or VTI 'APP.SPRITESHEETSTABLE'.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.sql.compile.ResultColumn.bindResultColumnByName(Unknown Source)
at org.apache.derby.impl.sql.compile.ResultColumnList.bindResultColumnsByName(Unknown Source)
at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(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)
... 10 more
线程“main”java.sql.SQLSyntaxErrorException中的异常:“name”不是表或VTI“APP.SPRITESHEETSTABLE”中的列。
位于org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(未知源)
位于org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知源)
位于org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(未知源)
位于org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(未知源)
位于org.apache.derby.impl.jdbc.EmbedConnection.handleException(未知源)
位于org.apache.derby.impl.jdbc.ConnectionChild.handleException(未知源)
位于org.apache.derby.impl.jdbc.EmbeddePreparedStatement。(未知源)
位于org.apache.derby.impl.jdbc.EmbeddePreparedStatement20。(未知来源)
位于org.apache.derby.impl.jdbc.EmbeddePreparedStatement30。(未知来源)
位于org.apache.derby.impl.jdbc.EmbeddePreparedStatement40。(未知来源)
位于org.apache.derby.impl.jdbc.EmbeddePreparedStatement42。(未知来源)
位于org.apache.derby.jdbc.Driver42.newEmbeddePreparedStatement(未知源)
在org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(未知源代码)
在org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(未知源代码)
在game.io.ResourceLoaderSQL(ResourceLoaderSQL.java:36)
位于game.io.ResourceLoaderSQL.main(ResourceLoaderSQL.java:83)
原因:java.sql.SQLException:“name”不是表或VTI“APP.SPRITESHEETSTABLE”中的列。
位于org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知源)
位于org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapargsforttransportacrossdrda(未知源)
... 还有16个
原因:错误42X14:“name”不是表或VTI“APP.SPRITESHEETSTABLE”中的列。
位于org.apache.derby.iapi.error.StandardException.newException(未知源)
位于org.apache.derby.impl.sql.compile.ResultColumn.bindResultColumnByName(未知源代码)
位于org.apache.derby.impl.sql.compile.ResultColumnList.bindResultColumnsByName(未知源)
位于org.apache.derby.impl.sql.compile.InsertNode.bindStatement(未知源代码)
位于org.apache.derby.impl.sql.GenericStatement.prepMinion(未知源)
位于org.apache.derby.impl.sql.GenericStatement.prepare(未知源)
位于org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(未知源)
... 10多
有人能发现这里发生了什么吗?我看不出解决方案。引用表名使其区分大小写 您正在使用未加引号的字段名创建表,这使得列名不区分大小写(和大写),但在查询中使用小写引号,因此查询无法找到它们
请删除两个位置的引号,或者在创建表和查询中一致地引用名称。引用表名使其区分大小写 您正在使用未加引号的字段名创建表,这使得列名不区分大小写(和大写),但在查询中使用小写引号,因此查询无法找到它们
请删除两处的引号,或在创建表和查询中一致地引用名称。“名称”不是表或VTI“APP.SPRITESHEETSTABLE”中的列。检查查询中使用的表和列。期望值是错误的。您用
“
”引用了字段名,例如”名称“
。这样的引用会将它们转换为字符串,而不是字段/表名。@MarcB Derby支持的“name”也不是SQL中的保留关键字吗?“name”不是表或VTI“APP.SPRITESHEETSTABLE”中的列。检查查询中使用的表和列。期望值是错误的。您用“
”引用了字段名,例如“name”
。这样的引用会将这些字段名转换为字符串,而不是字段/表名。@MarcB Derby supports在SQL中不是保留关键字?@user2864740创建表spritesheetstable(名称VARCHAR(7)NOT NULL主键
…未引用'name',因此将以大写字母'name'创建。插入SpriteSheetTable(“name”
已引用'name'并将尝试插入'name'。@user2864740创建表SpriteSheetTable(name VARCHAR(7)非空主键
…未引用'name',因此将以大写字母'name'创建。插入spritesheetstable(“name”
已引用'name'并将尝试插入'name'。