日期:2014-05-17  浏览次数:20878 次

关于Oracle数据库的JDBC连接
新手。。最近在学习JSP,编写了一个非常简单的页面,并且在Oracle中建了一个叫做userinfo的表,用以记录登陆用户用户名和密码的信息。表中的属性名称和SQL表达式在java程序与PL/SQL developper中都是直接复制粘贴的,不存在这方面的问题,但是在执行
select count(*) n from userinfo where userid='kevin' and userpwd='123456'
的时候,java中显示的是0,数据库中返回1,感觉是JDBC连接的问题?

下面是JDBC相关代码:
package com.soft.MyFirstWebProject.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Map;

import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

public class DbHelperImpl implements IDbhelper {
private final String DRIVER="oracle.jdbc.driver.OracleDriver";
private final String URL="jdbc:oracle:thin:@localhost:1521:XE";

private Connection getConnection(){
try{

Class.forName(DRIVER); 
Connection conn=DriverManager.getConnection(URL, "Kevin", "123456");
return conn;
}catch (Exception e) {
e.printStackTrace();
return null;
}
}


public Map[] runSelect(String sql,Object[] params){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
conn=getConnection();
ps=conn.prepareStatement(sql);
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
rs=ps.executeQuery();
Result result=ResultSupport.toResult(rs);
Map[] rows=result.getRows();
return rows;
}catch (Exception e) {
e.printStackTrace();
return null;
}finally{
try{
rs.close();
ps.close();
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}


public Map[] runSelect(String sql){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
conn=getConnection();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
Result result=ResultSupport.toResult(rs);
Map[] rows=result.getRows();
return rows;
}catch (Exception e) {
e.printStackTrace();
return null;
}finally{ 
try{
rs.close();
ps.close();
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}

}

JSP中写入下面代码以便在控制台检错
<%
DbHelperImpl db = new DbHelperImpl();
int i;
String sql = "select count(*) n from userinfo where userid='kevin' and userpwd='123456'";
i = Integer.valueOf(db.runSelect(sql)[0].get("n").toString());
System.out.println(i);
%>

同样的属性名与SQL语句,Oracle得到1而jsp得到0,。。不知道是为什么。。
PS:由于我之前是在eclipse中写好的代码,复制到Myeclipse中,字符集不一样,不知道是不是字符集的问题?
------解决方案--------------------
String sql = "select count(*) n from userinfo where userid='kevin' and userpwd='123456'";

你的sql不能带单引号,要么串接SQL字符串,要么问号占位给参数赋值。
<%
String username="kevin";
String password="123456";
String sql = "select count(*) n from userinfo where userid="+username +"