100分SSH框架+ORACLE,连接数据库异常(不提是错误)
package com.dao.imp;
/**
* 用户操作实现类
*/
import java.util.Iterator;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import com.dao.imp.UserDao;
import com.entity.User;
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
//登录
public User doLogin(String U_Name, String U_Password) {
User user=null;
Session session = sessionFactory.openSession();
Transaction tx =null;
try {
String hql = "from Users as user where user.U_Name=‘"+U_Name+"’ and user.U_Password='"+U_Password+"'";
tx = session.beginTransaction();
Query query = session.createQuery(hql);
tx.commit();
Iterator it=query.list().iterator();
if(it.hasNext()){
user=(User)it.next();
}
} catch (HibernateException e) {
//如果代码出现异常,则回滚事务
if (tx != null){
tx.rollback();
return user;
}
e.printStackTrace();
}finally {
//关闭Session,释放资源
session.close();
}
return user;
}
public Boolean doAboutName(String oldName, String newName) {
// TODO Auto-generated method stub
return null;
}
public Boolean doAdd(User user) {
// TODO Auto-generated method stub
return null;
}
public List<User> doSelect() {
// TODO Auto-generated method stub
return null;
}
public User doUpdate(User user) {
// TODO Auto-generated method stub
return null;
}
}
红色代码的地方出现异常,直接跳到catch (HibernateException e)处,不知道为什么。求高手指教!!!
[最优解释]
第一中文单引号问题、不能用中文单引号、必须换成英文!!!
‘"+U_Name+"’
[其他解释]
<property name="uName" type="java.lang.String">
<column name="U_NAME" />
</property>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.objectFactory" value="spring"/>
<include file="struts-default.xml"></include>
<constant name="struts.multipart.maxSize" value="10000000"/>
<package name="myoa" extends="struts-default">
<!-- 使用通配符 -->
<action name="*User" class="userAction" method="{1}">
<result name="login_success">/index.jsp</result>
<result name="login_error">/login.jsp</result>
</action>
</package>
</struts>
UserAction.java
package com.action;
/**
* 用户操作action
*/
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.dao.imp.UserDao;
import com.entity.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String tip;
private User user;
private UserDao userDao;
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
/**
* 用户登录
*/
public String login(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
User u=userDao.doLogin(user.getU_Name(), user.getU_Password());
if(null!=u){
session.setAttribute("user", u);
return "login_success";
}else{
setTip("用户名或密码错误!");
return "login_error";
}
}
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
UserDao.java
package com.dao.imp;
/**
* 用户操作接口类
*/
import java.util.List;
import com.entity.User;
public interface UserDao {
public User doLogin(String name, String password);
public Boolean doAdd(User user);
public User doUpdate(User user);
public List<User> doSelect();
public Boolean doAboutName(String oldName,String newName);
}
UserDaoImpl.java
package com.dao.imp;
/**
* 用户操作实现类
*/
import java.util.Iterator;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import com.dao.imp.UserDao;
import com.entity.User;
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
//登录
public User doLogin(String name, String password) {
User user=null;
Session session = sessionFactory.openSession();
Transaction tx =null;
try {
String hql = "from User as user where user.U_Name="+name+" and user.userPassword='"+password+"'";
tx = session.beginTransaction();
Query query = session.createQuery(hql);
tx.commit();
Iterator it=query.list().iterator();
if(it.hasNext()){
user=(User)it.next();
}
} catch (HibernateException e) {
//如果代码出现异常,则回滚事务
if (tx != null){
tx.rollback();
return user;
}
e.printStackTrace();
}finally {
//关闭Session,释放资源
session.close();
}
return user;
}
public Boolean doAboutName(String oldName, String newName) {
// TODO Auto-generated method stub
return null;
}
public Boolean doAdd(User user) {
// TODO Auto-generated method stub
return null;
}
public List<User> doSelect() {
// TODO Auto-generated method stub
return null;
}
public User doUpdate(User user) {
// TODO Auto-generated method stub
return null;
}
}
User.java
package com.entity;
public class User {
private int U_Id;
private String U_Name;
private String U_Password;
public int getU_Id() {
return U_Id;
}
public void setU_Id(int U_Id) {
this.U_Id = U_Id;
}
public String getU_Name() {
return U_Name;
}
public void setU_Name(String U_Name) {
this.U_Name = U_Name;
}
public String getU_Password() {
return U_Password;
}
public void setU_Password(String U_Password) {
this.U_Password = U_Password;
}
}
User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.entity.User" table="USERS" dynamic-insert="true">
<id name="userId" type="java.lang.Integer">
<column name="USERID" precision="22" scale="0" />
<generator class="assigned" />
</id>
<property name="userName" type="java.lang.String">
<column name="USERNAME" length="50" />
</property>
<property name="userPassword" type="java.lang.String">
<column name="USERPASSWORD" length="50" />
</property>
</class>
</hibernate-mapping>
[其他解释]
Query query = session.createQuery(hql);
Query query = session.createSQLQuery(hql);
先区分这个。
你执行的是hql语句,不是sql,你的语句里有sql语句的写法。
[其他解释]
2012-11-15 14:48:03 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2012-11-15 14:48:03 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2012-11-15 14:48:03 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/32 config=null
2012-11-15 14:48:03 org.apache.catalina.startup.Catalina start
信息: Server startup in 11396 ms
[其他解释]
又是你 ! from Users as user where user.U_Name='sang' and user.U_Password='sang' 改成
from User as user where user.U_Name='sang' and user.U_Password='sang'
[其他解释]
private int U_Id;
private String U_Name;
private String U_Password;
<id name="userId" type="java.lang.Integer">
<column name="USERID" precision="22" scale="0" />
<generator class="assigned" />
</id>
<property name="userName" type="java.lang.String">
<column name="USERNAME" length="50" />
</property>
<property name="userPassword" type="java.lang.String">
<column name="USERPASSWORD" length="50" />
</property>
private int uid;
private String uame;
private String upassWord;
<id name="uid" type="java.lang.Integer">
<column name="USERID" precision="22" scale="0" />
<generator class="assigned" />
</id>
<property name="uame" type="java.lang.String">
<column name="USERNAME" length="50" />
</property>
<property name="upassWord" type="java.lang.String">
<column name="USERPASSWORD" length="50" />
</property>
String hql = " from User as user where user.uame='"+name+"' and user.upassWord='"+password+"'";
public class User {
//属性名大写开头?是谁教你的? private int u_id; ok?
private int U_Id;
private String U_Name;private String U_Password;
public int getU_Id() {
return U_Id;
}
public void setU_Id(int U_Id) {
this.U_Id = U_Id;
}
public String getU_Name() {
return U_Name;
}
public void setU_Name(String U_Name) {
this.U_Name = U_Name;
}public String getU_Password() {
return U_Password;
}
public void setU_Password(String U_Password) {
this.U_Password = U_Password;
}
}
<hibernate-mapping>
<class name="com.entity.User" table="USERS" dynamic-insert="true">
<id name="userId" type="java.lang.Integer">
<!--数据库里面的字段名称是不区分大小写的-->
<column name="USERID" precision="22" scale="0" />
<generator class="assigned" />
</id>
<property name="userName" type="java.lang.String">
<column name="USERNAME" length="50" />
</property>
<property name="userPassword" type="java.lang.String">
<column name="USERPASSWORD" length="50" />
</property>
</class>
</hibernate-mapping>