日期:2014-05-20  浏览次数:20697 次

请问为什么感觉代码木有问题,而且数据库中也有数据,可是却查不出来啊?
Java code

import java.util.*;
import java.sql.*;
public class InputStudent  {
    public static void main(String args[]) {   
   
        Connection con;
        String sql;
        Statement stmt;
        int num;
       String name,sex;
       int age;
//一、java直接连接Oracle10数据库        
       try {            
        Class.forName("oracle.jdbc.driver.OracleDriver"); 
        
       } catch(java.lang.ClassNotFoundException e) {
           System.err.print("ClassNotFoundException: "); 
       }
        try {        
     con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","system","system");   

            stmt = con.createStatement(); 

    

  //写 select语句
            sql = " SELECT * FROM S where sex=?"; 
            PreparedStatement stmt0=con.prepareStatement(sql);
 //   stmt0=con.prepareStatement(sql);
    stmt0.setString(1,"女");
            //执行select SQL语句,返回结果集rs,可以看成是游标      
         ResultSet rs = stmt0.executeQuery();
  
        //    ResultSet rs = stmt.executeQuery(sql);
    //按格式要求打印输出表头部分       
            System.out.println("\n\n\n\n");
            System.out.println("      全体学生信息表");
            System.out.println("--------------------------------");
            System.out.println("学号    姓名      性别       年龄");  
            System.out.println("--------------------------------");
            while(rs.next()){
//取当前行数据项的值赋给变量
                 num = rs.getInt("sno");
                 name = rs.getString("sname");
                 sex = rs.getString("sex");
                 age = rs.getInt("age");   

  //java将变量的 值按要求的格式输出         
                 System.out.println(num+"    "+name+"        "+sex+"        "+age);
            }       
                System.out.println("---------------------------------");
             
            stmt.close();

            //事务提交, 事务回滚方法是 rollbck()
            con.commit();

            con.close();
         } catch(SQLException ex) {
            System.err.println("**SQLException: " + ex.getMessage());
        }          
    }
}




请问为什么感觉代码木有问题,而且数据库中也有数据,可是却查不出来啊?

------解决方案--------------------
SELECT * FROM S where sex= '女'
直接用这样的sql在数据库端执行能检索到数据吗?怀疑LZ的数据库的数据sex里可能带有空格而检索不到吧
------解决方案--------------------
我觉得char(3)有问题,可以换成varchar试试
------解决方案--------------------
1 数据库里有空格

2 编码不一致
------解决方案--------------------
sql = " SELECT * FROM S where sex=?"; 

-->

 sql = " SELECT * FROM S where trim(sex)=?"; 

------解决方案--------------------
经过代码测试:
ptmt.setString(1,"女 ");后边加个空格就可以查出来了.
------解决方案--------------------
1 看看数据库里是否有空格

2 stmt0.setString(1,"女");换成stmt0.setString(1,"a")试试,可能是编码问题
------解决方案--------------------
1.数据库中没得性别为"女"的数据,可能你的性别是"女 ";
2.字符编码,传进去的中文出现乱码。所以无法查询;
3.建议性别字段成int类型,1代表女,2代表男试试。
------解决方案--------------------
探讨

我觉得char(3)有问题,可以换成varchar试试