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());
        }          
    }
}请问为什么感觉代码木有问题,而且数据库中也有数据,可是却查不出来啊?

解决方案 »

  1.   

     stmt = con.createStatement(); 去掉
      

  2.   

    有pl/SQL的话 ,用 "system","system" 登录进去 ,
    用户名:system
    口令:system 
    数据库:ORCL
    连接为:Normal进去后,在my objects --》Tables中能看到 S,并且能够查询出来 ?
      

  3.   

    SELECT * FROM S where sex= '女'
    直接用这样的sql在数据库端执行能检索到数据吗?怀疑LZ的数据库的数据sex里可能带有空格而检索不到吧
      

  4.   


    是呢,我在dos下进入oracle数据库都能查出来的啊,而且       sql = " SELECT * FROM S"; 
             PreparedStatement stmt0=con.prepareStatement(sql);
    //    stmt0.setString(1,"女");
    不限制性别,这样也能查出来呢
      

  5.   

    直接用
    sql = " SELECT * FROM S"; 
    //stmt0.setString(1,"女");
    查询看看,确定下问题所在
      

  6.   


    直接用sql的可以,好像不是有空格呢~~
      

  7.   

    数据库文件
    create table s(
      sno char(4) not null primary key,
      sname varchar2(10),
      sex char(3),
      dept varchar2(4),
      age int 
    );
    insert into s values('801','张三','女','CS',20);
    insert into s values('802','文章','男','MA',20);
    insert into s values('803','张惠妹','女','CS',22);
    insert into s values('804','马伊利','女','MA',29);
    insert into s values('805','王二小','男',null,19);insert into s values('806','王小波','男','CS',16);
    insert into s values('807','李银河','女','MA',19);
    insert into s values('808','苏小妹','女','CS',20);
    insert into s values('809','李宇春','女','MA',21);
    insert into s values('810','刘德华','男',null,22);
      

  8.   


    直接sql = " SELECT * FROM S"; 
    可以得出结果~~就是一往里面传性别就不行了~~
      

  9.   

    如果有数据程序问题可以排除....
    你用dos查询出来的中文正常显示的么?
    我怀疑是执行插入语句时间,客户端和服务器端编码不一致..所以出错
    sql = " SELECT * FROM S where age=?";
    stmt0.setInt(1,20);
    这个估计也有值吧
      

  10.   

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

  11.   

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

  12.   

    经过代码测试:
    ptmt.setString(1,"女 ");后边加个空格就可以查出来了.
      

  13.   

    1  看看数据库里是否有空格2  stmt0.setString(1,"女");换成stmt0.setString(1,"a")试试,可能是编码问题
      

  14.   

    1.数据库中没得性别为"女"的数据,可能你的性别是"女 ";
    2.字符编码,传进去的中文出现乱码。所以无法查询;
    3.建议性别字段成int类型,1代表女,2代表男试试。
      

  15.   


    同意,原因是char(3)与你赋的值不匹配,要么也可以改成char(2)。
      

  16.   

    是char(3)的问题,女才char(2)所以改成char(2)或者varchar2(3)吧