关于Oracle数据库的JDBC连接

紫青ISS 2014-04-21 06:25:28
新手。。最近在学习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中,字符集不一样,不知道是不是字符集的问题?
...全文
191 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫青ISS 2014-04-24
  • 打赏
  • 举报
回复
引用 5 楼 gy40235 的回复:
[quote=引用 4 楼 kevin_s940627 的回复:] [quote=引用 2 楼 wlwlwlwl015 的回复:] 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 +" and userpwd="+password; %>
谢谢,但是貌似不是这个问题,我sql语句没有修改,带单引号也是可以的。但是这样单独拿出来确实是一个好习惯!这个bug最后是我把PL/sql developper关了重启然后就好了。。。。。 不知道能不能请你帮忙解释下:是不是我在developper中直接执行完insert into 语句之后那些数据不能被立即被反馈到数据库里?难道必须要关掉developper或者切换用户之后数据库才能自动保存?[/quote] 执行insert、delete、update操作之后需提交手动事务,才会经数据反馈到数据库表响应的表中。[/quote]
引用 6 楼 wlwlwlwl015 的回复:
[quote=引用 4 楼 kevin_s940627 的回复:] [quote=引用 2 楼 wlwlwlwl015 的回复:] 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 +" and userpwd="+password; %>
谢谢,但是貌似不是这个问题,我sql语句没有修改,带单引号也是可以的。但是这样单独拿出来确实是一个好习惯!这个bug最后是我把PL/sql developper关了重启然后就好了。。。。。 不知道能不能请你帮忙解释下:是不是我在developper中直接执行完insert into 语句之后那些数据不能被立即被反馈到数据库里?难道必须要关掉developper或者切换用户之后数据库才能自动保存?[/quote] 好久没用oracle了,不过我当时学的时候记的很清楚,是用PLSQL的时候执行insert update delete要手动commit,就像楼上说的,这个问题在mysql或sqlserver是不存在,是plsql还是oracle特有的东西、记不清啦。解决了就行、[/quote]
引用 9 楼 vkqiang 的回复:
[quote=引用 4 楼 kevin_s940627 的回复:] [quote=引用 2 楼 wlwlwlwl015 的回复:] 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 +" and userpwd="+password; %>
谢谢,但是貌似不是这个问题,我sql语句没有修改,带单引号也是可以的。但是这样单独拿出来确实是一个好习惯!这个bug最后是我把PL/sql developper关了重启然后就好了。。。。。 不知道能不能请你帮忙解释下:是不是我在developper中直接执行完insert into 语句之后那些数据不能被立即被反馈到数据库里?难道必须要关掉developper或者切换用户之后数据库才能自动保存?[/quote] 应该是你用plsql执行时事务没有提交,表中的数据没有提交保存,在plsql中是可以查到的,程序是查不到的。[/quote] 谢谢大家,最近忙于准别某些科目的期末考试而没有上论坛,这个贴到此为止,就此结贴了。Java web还在进一步学习中,还请各位以后多多指教~!
C-J 2014-04-22
  • 打赏
  • 举报
回复
用户有权限?Oracle的权限是出了名的了。
wx3957156 2014-04-22
  • 打赏
  • 举报
回复
这个不是程序的问题,也不是数据库的问题,你的一条记录指的n 0 ,是有一条记录,但是记录总数为0,不知道这样说清楚不?
vkqiang 2014-04-22
  • 打赏
  • 举报
回复
引用 4 楼 kevin_s940627 的回复:
[quote=引用 2 楼 wlwlwlwl015 的回复:] 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 +" and userpwd="+password; %>
谢谢,但是貌似不是这个问题,我sql语句没有修改,带单引号也是可以的。但是这样单独拿出来确实是一个好习惯!这个bug最后是我把PL/sql developper关了重启然后就好了。。。。。 不知道能不能请你帮忙解释下:是不是我在developper中直接执行完insert into 语句之后那些数据不能被立即被反馈到数据库里?难道必须要关掉developper或者切换用户之后数据库才能自动保存?[/quote] 应该是你用plsql执行时事务没有提交,表中的数据没有提交保存,在plsql中是可以查到的,程序是查不到的。
小灯光环 2014-04-21
  • 打赏
  • 举报
回复
引用 4 楼 kevin_s940627 的回复:
[quote=引用 2 楼 wlwlwlwl015 的回复:] 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 +" and userpwd="+password; %>
谢谢,但是貌似不是这个问题,我sql语句没有修改,带单引号也是可以的。但是这样单独拿出来确实是一个好习惯!这个bug最后是我把PL/sql developper关了重启然后就好了。。。。。 不知道能不能请你帮忙解释下:是不是我在developper中直接执行完insert into 语句之后那些数据不能被立即被反馈到数据库里?难道必须要关掉developper或者切换用户之后数据库才能自动保存?[/quote] 好久没用oracle了,不过我当时学的时候记的很清楚,是用PLSQL的时候执行insert update delete要手动commit,就像楼上说的,这个问题在mysql或sqlserver是不存在,是plsql还是oracle特有的东西、记不清啦。解决了就行、
Gansuper7012 2014-04-21
  • 打赏
  • 举报
回复
引用 4 楼 kevin_s940627 的回复:
[quote=引用 2 楼 wlwlwlwl015 的回复:] 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 +" and userpwd="+password; %>
谢谢,但是貌似不是这个问题,我sql语句没有修改,带单引号也是可以的。但是这样单独拿出来确实是一个好习惯!这个bug最后是我把PL/sql developper关了重启然后就好了。。。。。 不知道能不能请你帮忙解释下:是不是我在developper中直接执行完insert into 语句之后那些数据不能被立即被反馈到数据库里?难道必须要关掉developper或者切换用户之后数据库才能自动保存?[/quote] 执行insert、delete、update操作之后需提交手动事务,才会经数据反馈到数据库表响应的表中。
紫青ISS 2014-04-21
  • 打赏
  • 举报
回复
引用 2 楼 wlwlwlwl015 的回复:
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 +" and userpwd="+password; %>
谢谢,但是貌似不是这个问题,我sql语句没有修改,带单引号也是可以的。但是这样单独拿出来确实是一个好习惯!这个bug最后是我把PL/sql developper关了重启然后就好了。。。。。 不知道能不能请你帮忙解释下:是不是我在developper中直接执行完insert into 语句之后那些数据不能被立即被反馈到数据库里?难道必须要关掉developper或者切换用户之后数据库才能自动保存?
-江沐风- 2014-04-21
  • 打赏
  • 举报
回复
嗯,不能直接写,用+拼写一下吧;
小灯光环 2014-04-21
  • 打赏
  • 举报
回复
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 +" and userpwd="+password; %>
紫青ISS 2014-04-21
  • 打赏
  • 举报
回复
在线等。。求众大神帮帮忙啊!!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧