//连接数据库
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到连接
Connection ct=null;
ct=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.188:1521:orcl","mydate","mydate");Tomcat报错:
java.lang.ClassNotFoundException: oracle.jdbc.driver.oracledriver
.......
at java.lang.Thread.run<Unknow Source>
说明:
我用的是公司的数据库,用户mydate,密码mydate,登录pl/sql正常,数据库URL也正确,因为我在EOS就是这设置,而且可以正常使用.为何自己用JCreater开发就出问题了
端口8080,代码不连数据库是正常运行的,连数据库时出问题了。
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到连接
Connection ct=null;
ct=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.188:1521:orcl","mydate","mydate");Tomcat报错:
java.lang.ClassNotFoundException: oracle.jdbc.driver.oracledriver
.......
at java.lang.Thread.run<Unknow Source>
说明:
我用的是公司的数据库,用户mydate,密码mydate,登录pl/sql正常,数据库URL也正确,因为我在EOS就是这设置,而且可以正常使用.为何自己用JCreater开发就出问题了
端口8080,代码不连数据库是正常运行的,连数据库时出问题了。
,从错误提示都能够看出来,缺少数据库的驱动包!!
java.sql.SQLException:ORA-00923未找到要求的FROM关键字我的代码://用户验证servletpackage com.hzy;import java.sql.*;
import javax.servlet.http.*;
import java.io.*;public class LoginCl extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
try{
//接收用户名和密码
String u=req.getParameter("username");
String p=req.getParameter("passwd");
//连接数据库
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到连接
ct=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.181:1521:orcl","sdsb","sdsb");
//创建Statement
sm=ct.createStatement();
rs=sm.executeQuery("select top 1 * from myemp where empname='"+u+"'");
//验证
if(rs.next()){
//合法
//将验证成功的用户信息写入session
//1、得到session空间
HttpSession hs=req.getSession(true);
//修改session的存在时间
hs.setMaxInactiveInterval(20);
//跳转到welcom,同时把页面上获得的用户名通过uname传递给welcom页面
hs.setAttribute("pass","ok");
res.sendRedirect("welcom?uname="+u+"&upass="+p);
}
else{
//不合法
//跳转
res.sendRedirect("login");//写你要到的servlet的那个URL
}
}
catch(Exception ex){
ex.printStackTrace();
}finally{
//finally语句是不管程序会不会抛出异常,都会执行的代码
try{
if(rs!=null){
rs.close();
}
if(sm!=null){
sm.close();
}
if(ct!=null){
ct.close();
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
或放置到Program Files\Apache Software Foundation\Tomcat 7.0\lib下面FortuneJ参考下载地址www.cnblogs.com/mail-ricklee
改为select * from (select * from myemp where empname=? order by id) where rownum<=2 asc
你想拿到第一个记录吗?
可以用
first_value() over()或者
row_number() over()取第一行
但是当我输入正确的empname,还是不能跳转到welcom页面。而是跳转到login页面(如果记录为空时,返回login),请问是什么原因呢?Tomcat没有报错,JCreater编译无错误
rs=sm.executeQuery("select top 1 * from myemp where empname='"+u+"'");
我想问一下,我这个书写格式没问题吧?
现在究竟有没有成功连到数据库
如果连上数据库了,我输入了正确的empname应该能查到结果呀?
现在的语句是:"select * from myemp where empname='"+u+"'"
现在我没加top1,改成:"select * from myemp where empname='"+u+"'"
运行速度好像慢了些,应该是能连上数据库(个人想法),但是当我输入正确的empname,还是不能跳转到
如果我的用户名叫 abc or 1=1..你怎么办
说的真好,因为我学的这教程上现在好像也是马上要讲这个SQL注入,谢谢了!!刚才我是这样测试的:executeQuery("select * from myemp where empname='郭雪红'")
if(rs.next()){
PrintWriter pw=res.getWriter();
pw.println("lianshangshujukule!!");
}
其中'郭雪红'是myemp中已有的empname
能输出lianshangshujukule!!
说明连接数据库是正确的
那么问题就在下面这段代码中(我在条件中加入了页面变量):
rs=sm.executeQuery("select * from myemp where empname='"+u+"'");
//验证
if(rs.next()){
//合法
//将验证成功的用户信息写入session
//1、得到session空间
HttpSession hs=req.getSession(true);
//修改session的存在时间
hs.setMaxInactiveInterval(20);
//跳转到welcom,同时把页面上获得的用户名通过uname传递给welcom页面
hs.setAttribute("pass","ok");
res.sendRedirect("welcom?uname="+u+"&upass="+p);
}