Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Java SQLException错误表示现有列不存在';不存在_Java_Derby_Sqlexception - Fatal编程技术网

Java SQLException错误表示现有列不存在';不存在

Java SQLException错误表示现有列不存在';不存在,java,derby,sqlexception,Java,Derby,Sqlexception,运行searchQuery时,我收到一个SQLException错误,表示找不到我的一列。这是非常令人困惑的,因为我在代码前面引用了该列,程序可以在该点上找到该列。我的语法有问题吗?谢谢大家! public void createDB(){ String createCharTableSQL = "CREATE TABLE CosplayCharacter (" + "CharacterID int NOT NULL primary key GEN

运行searchQuery时,我收到一个SQLException错误,表示找不到我的一列。这是非常令人困惑的,因为我在代码前面引用了该列,程序可以在该点上找到该列。我的语法有问题吗?谢谢大家!

public void createDB(){    
    String createCharTableSQL = "CREATE TABLE CosplayCharacter (" +
                "CharacterID int NOT NULL primary key GENERATED ALWAYS " +
                "AS IDENTITY (START WITH 1, INCREMENT BY 1), " +
                "name varchar(60) not null," +
                "gender varchar(10)," +
                "genreID int, " +
                "universeID int, " +
                "mediaID int, " +
                "description varchar(60))";

      statement.executeUpdate(createCharTableSQL);
}

public void insertCharacter(){    
  String fetchAllDataSQL = "SELECT * from CosplayCharacter";


    //Code can find the universeID column here
        resultSet = statement.executeQuery(fetchAllDataSQL);
        while (resultSet.next()) {
            String name = resultSet.getString("name");
            int universeCharID = resultSet.getInt("universeID");

            System.out.println("Character Name : " + name +
                    " UniverseID : " + universeCharID);
        }
}

//But returns error here
public void searchCharacter(String characterName){
    String fetchAllDataSQL = "SELECT * from CosplayCharacter where name = '" + characterName +"'";

        resultSet = statement.executeQuery(fetchAllDataSQL);
        while (resultSet.next()) {
            String gender = resultSet.getString("gender");
            int genreID = resultSet.getInt("genreID");
//Method to search a column in a joined table; no error
            String genreName = getGenreName(genreID);
            int universeID = resultSet.getInt("universeID");
   }
}
堆栈跟踪:

 java.sql.SQLException: Column 'universeID' not found.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown  
Source)
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.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.newSQLException(Unknown Source)

结果集在全球范围内使用。getGenreName方法中使用的ResultSet覆盖了主searchCharacter方法中的ResultSet。解决方案:在每个方法中分别设置ResultSet变量

你能提供一个简单的工作示例吗?我认为您共享的代码不会编译,因为例如
String fetchAllDataSQL
声明了两次。也许你在复制粘贴时漏掉了一些相关的东西?很抱歉,这两个方法在两个不同的方法中,而且这些方法本身非常长,所以我将它们切分了。我会修改这个问题以便更清楚。谢谢。在
getGenreName
中会发生什么?该方法是否偶然移动了结果集中的光标?这段代码中的一个问题是,
resultSet
是一个全局变量(类中的一个字段),因此很难看到代码的哪些部分可以更改其状态。我不明白为什么要在每个方法之外声明
resultSet
,因为一个方法使用的
resultSet
的值似乎不适用于其他方法。如果在使用的每个方法中将
resultSet
从类变量更改为局部变量,则代码可能会更清晰,并且问题可能会得到解决。这里的一个教训是:最小化变量的范围并避免全局变量。此外,您应该记住关闭您的
语句
s,例如使用。最后,当查询使用输入变量时(如
searchCharacter
中的情况),应该使用,而不是将输入字符串连接到查询中。