2012-10-17 24 views
0

我正在开发一个基本上在GUI中的JTable中显示mySQL数据库结果的双层java应用程序。 mySQL查询由用户在textArea中键入,然后按下“execute command”按钮,并且与该命令相对应的mySQL结果只出现在JTable中。当mySQL命令为大写时,executeQuery仅适用于查询?

我遇到的问题是当我尝试键入一个查询,如“SELECT * FROM bikes WHERE COST = 10000;”一切按预期工作并返回结果。但是,如果我输入“select * from bikes where cost = 10000;”,则不会返回任何结果,并且基本上没有任何反应,甚至没有发生错误。我尝试在查询上运行'toUpperCase()',但没有解决问题。

我想知道什么可能会导致这个问题?我知道mySQL不区分大小写,所以即使我的SELECT是小写也应该可以工作... 下面的代码是可能导致问题的区域的片段。

public void setQuery(String query) throws SQLException, IllegalStateException{ 
     if(!connectedToDatabase) 
      throw new IllegalStateException("Not Connected to Database"); 


     String firstWord = query.substring(0, 6); 
     if(firstWord.toUpperCase().equals("SELECT")){   
      resultSet = statement.executeQuery(query); 
     } 
     else if(firstWord.toUpperCase().equals("INSERT") || firstWord.toUpperCase().equals("DELETE") || firstWord.toUpperCase().equals("UPDATE")){ 
      statement2.executeUpdate(query); 
     } 

     metaData = resultSet.getMetaData(); 

     resultSet.last(); 
     numberOfRows = resultSet.getRow(); 
     fireTableStructureChanged(); 
    } 
+0

我会记录并查看firstWord是什么。我想这可能是空间问题。 – kosa

+0

firstWord,不是问题...它只是获取查询的第一个单词,并且我测试它可以正常工作......只要“SELECT”或“INSERT”是大写。 – AnchovyLegend

+0

你确定if(firstWord.toUpperCase()。equals(“SELECT”))语句是你的问题的地方吗?尝试字符串firstWord = query.substring(0,6).toUpperCase();这将避免您不得不多次重复相同的声明(可维护性更强,效率更高)。输出这个结果(到一个调试文件/控制台/等),看看这个字符串是什么样子 - 即确定你有SELECT,没有别的。你还可以向我们展示用于构成statement/statement2的代码;这可能是该计划正在通过IF声明和该问题的其他地方。 – JohnLBevan

回答

1
  • 尝试使用equalsIgnoreCase,而不是直equals
  • 如果您不知道代码是否正在进入if块,请尝试在该块中添加一些日志记录。
  • 假设它正在进入该块,查询可能会导致该问题。
相关问题