Java SQLException错误表示现有列不存在';不存在
运行searchQuery时,我收到一个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
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
中的情况),应该使用,而不是将输入字符串连接到查询中。