【问题标题】:my sql query don't work我的 sql 查询不起作用
【发布时间】:2013-08-20 08:12:45
【问题描述】:

我在java中的数据库有一个问题

我的代码是(它只是我项目的一小部分)

    public void Read_from_DB(int exhibition_id){
            Statement stmt = null;
            Connection connect = null;

            try {
                connect=MYConnection.new_connection();
                stmt = connect.createStatement();
                QuestionCatalog.get_QuestionCatalog_instance().setShow_quest(new ArrayList<Question>());
                String  sql = "SELECT * FROM question WHERE Selection=0 AND exhibition_id="+exhibition_id;
                //System.out.println(sql);
                ResultSet rs = stmt.executeQuery(sql);
                System.out.println("!");
                System.out.println("->"+rs.getFetchSize());
                while(rs.next()){
                    Question jd=new Question();
                    System.out.println("!!!");
                    jd.setQuestion_id(rs.getInt("Question_id"));
                    jd.setQuestion(rs.getString("Question"));
                    jd.setQuestion(rs.getString(exhibition_id));
                    jd.getOption_2().setContent(rs.getString("Content2"));
        QuestionCatalog.get_QuestionCatalog_instance().getShow_quest().add(jd);
                    System.out.println("size"+QuestionCatalog.get_QuestionCatalog_instance().getShow_quest().size());
MYConnection.close_connection(stmt, connect);
                }
            }catch (Exception e) {
            }

        }

当我执行此代码时,它不起作用 我的数据库表名是“问题” 但是当我将此查询中的名称更改为“问题”时,不会出现任何错误 然后我认为它不执行我的查询,我的主要是

public static void main(String[] args) {
        DB_question d=new DB_question();
        d.Read_from_DB(1);
    }

和“MYConnection.new_connection();”部分代码返回一个连接,(我在另一个类中对其进行测试)

控制台中的结果是:

SELECT * FROM Question WHERE Selection=0 AND exhibition_id=1
!
->0

它没有显示 "!!!" 那是 "System.out.println("!!!");" 的结果 然后我认为它不起作用:| 谢谢

p.s 我的数据库的图片 picture

【问题讨论】:

  • 尝试将上述查询直接传递给数据库。你得到什么结果?
  • @Marty McVry : 没什么,我在我的 main 中说 sysout 的结果,在我的数据库中什么也没有发生,当我写错 qury 时它不会给我任何错误!!!
  • 向我们展示一些示例数据。
  • 您的 mysql 表中可能没有 Selection=0 和 Exhibition_id=1 的问题,因此您的 select 语句返回 0 行。
  • 它怎么会给你一个错误:你正在捕捉异常,并完全忽略它。删除 catch 块,至少在 catch 块中添加 e.printStackTrace(); throw new RuntimeException(e);

标签: java mysql database select


【解决方案1】:

我从您的问题中了解到,表名或列名区分大小写的名称输出不正确。我对吗?

据我所知,SELECTFROM 等保留字在所有OS's 中都不区分大小写。在 *ix OS 环境中,所有其他用户定义的对象名称都区分大小写。但不在 Windows OS 环境中。

但所有 RDBMS 配置都应该允许跨平台部署不区分大小写。这就是您从 question 更改为 Question 没有引发错误的原因。

关于您的查询结果
我担心您已经在不同的数据库或服务器上测试了您的查询。他们可能没有相同的数据,因此总是不会进入while( rs.... 循环。

改变你的代码如下,看看输出是什么:

ResultSet rs = stmt.executeQuery(sql);  
System.out.println("!");  
System.out.println("->"+rs.getFetchSize());  

rs.beforeFirst();  
rs.last();  
int rowCount = rs.getRow();  
System.out.println( "---> rowCount: " + rowCount );  
rs.beforeFirst();  

while( ...  

另请参考
DBMS Identifiers and Case Sensitivity - MysQL

【讨论】:

  • emm 是的,我知道,但是当我更改表名和表行的敏感度时,它不会给我任何错误
  • 我的输出是:正在创建语句... SELECT * FROM question WHERE Selection=0 AND quest_poll_id=1 ! ->0 ---> 行数:3 !!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 2013-09-10
  • 1970-01-01
  • 2011-04-13
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多