Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Derby:java.sql.SQLSyntaxErrorException_Java_Sql_Csv_Derby - Fatal编程技术网

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'。