日期:2014-05-16  浏览次数:20368 次

分别使用JDBC、SQL Developer访问Oracle的一点区别
附件中 test.sql的内容


drop table test purge;
create table test(
  zipcode char(6)
);
insert into test values('12345');
commit;

--以下四种查询都有记录返回。
select * from test;		
select * from test where zipcode='12345';
select * from test where zipcode='12345 ';
select * from test where zipcode='12345  ';



附件中 TestJDBC.java的内容
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Test;

import com.matt.util.DBUtil;


public class TestJDBC {

	@Test
	public void testJC() throws SQLException{
		// 使用工具类获取数据库连接。
		Connection connection = DBUtil.getConnection();
	

		// 这一段代码有疑问:
		String sql = "SELECT * FROM test WHERE zipcode=?";	// 表结构请查看test.sql
		PreparedStatement ps = connection.prepareStatement(sql);
//		ps.setString(1, "12345 ");	// 情况一:有记录返回。

		/*
			情况二:
				当使用以下一行代码时:没有记录返回。
				但是,在SQL Developer中如下SQL直接查询时,都是有记录返回的:
					select * from test where zipcode='12345';
				这是为什么?
		 */
		ps.setString(1,"12345");

		
		ResultSet rs = ps.executeQuery();
		if (rs.next()) {
			System.out.println(rs.getString("zipcode"));
		}else{
			System.out.println("没有记录");
		}
		// 使用工具类关闭数据库连接。
		DBUtil.closeConnection();
	}
}



我的疑惑:
          在Oracle中,char类型是空格不敏感的。
        
          因此,以上两种情况都应该有记录返回才是。
  
          为什么第二种情况没有返回记录?