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());
}
}
}请问为什么感觉代码木有问题,而且数据库中也有数据,可是却查不出来啊?
用户名:system
口令:system
数据库:ORCL
连接为:Normal进去后,在my objects --》Tables中能看到 S,并且能够查询出来 ?
直接用这样的sql在数据库端执行能检索到数据吗?怀疑LZ的数据库的数据sex里可能带有空格而检索不到吧
是呢,我在dos下进入oracle数据库都能查出来的啊,而且 sql = " SELECT * FROM S";
PreparedStatement stmt0=con.prepareStatement(sql);
// stmt0.setString(1,"女");
不限制性别,这样也能查出来呢
sql = " SELECT * FROM S";
//stmt0.setString(1,"女");
查询看看,确定下问题所在
直接用sql的可以,好像不是有空格呢~~
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);
直接sql = " SELECT * FROM S";
可以得出结果~~就是一往里面传性别就不行了~~
你用dos查询出来的中文正常显示的么?
我怀疑是执行插入语句时间,客户端和服务器端编码不一致..所以出错
sql = " SELECT * FROM S where age=?";
stmt0.setInt(1,20);
这个估计也有值吧
ptmt.setString(1,"女 ");后边加个空格就可以查出来了.
2.字符编码,传进去的中文出现乱码。所以无法查询;
3.建议性别字段成int类型,1代表女,2代表男试试。
同意,原因是char(3)与你赋的值不匹配,要么也可以改成char(2)。