想把注册信息添加到数据库,怎么添不上去啊?
DBConnection.java的代码如下:package cn.com.systop.l02.connection;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 数据库连接类
* @author Administrator
*
*/
public class DBConnection {
//数据库连接字符串
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL Server 2005的JDBC驱动类 private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=Book";// 用于标识数据库的URL private static final String UNAME = "sa";// 数据库用户名 private static final String UPWD = "123";// 数据库密码 /**
* 获得数据库连接
* @return 数据库连接对象
*/
public static Connection getConnection(){
Connection con = null;
try {
//加载驱动
Class.forName(DRIVER);
//获得数据库连接
con = DriverManager.getConnection(URL, UNAME, UPWD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}
BaseDAO.java的代码如下:package cn.com.systop.l02;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class BaseDAO {
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL Server 2005的JDBC驱动类 private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=Book";// 用于标识数据库的URL private static final String UNAME = "sa";// 数据库用户名 private static final String UPWD = "123";// 数据库密码 protected Connection con;// 数据库连接对象 protected PreparedStatement pstm;// 预编译的SQL语句对象 protected Statement stmt;// SQL语句对象 protected ResultSet rs;// 结果集对象 // 获取数据库连接
protected void getConnection() throws Exception {
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, UNAME, UPWD);
} // 释放数据库资源
protected void closeAll() {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstm != null) {
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
if (con != null && con.isClosed() == false) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 执行SQL语句,可以执行增、删、改的操作,不能执行查询
* @param sql 预编译的sql语句
* @param param sql语句参数数组
* @return rows 返回受影响的行数
*/
protected int executeSQL(String sql, String[] param) throws Exception {
int rows = 0; // 受影响的行数 try {
this.getConnection();
if (param != null && param.length > 0) {
pstm = con.prepareStatement(sql);
// 循环,将SQL语句参数数组中的值依次赋给预执行语句
for (int i = 0; i < param.length; i++) {
// 注意,setXXX()方法的索引值从1开始,所以有i+1
pstm.setString(i + 1, param[i]);
}
rows = pstm.executeUpdate();
} else {
// 创建Statement对象,执行更新sql语句,返回受影响的行数
stmt = con.createStatement();
rows = stmt.executeUpdate(sql);
}
} finally {
this.closeAll();// 释放资源
}
System.out.println("调用通用的增、删、改方法成功!");
return rows;// 返回受影响的行数
}
}
UserRegisterBean.java的代码如下:package cn.com.systop.l02;public class UserRegisterBean {
private String userName;//用户名
private String userPassword;//密码
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
//get/set方法
public String toString(){
return "欢迎"+this.getUserName()+"注册成功,密码为:"+this.getUserPassword();
}
}
Users.java的代码如下:package cn.com.systop.l02;public class Users {
private int userID;//用户ID private String userName;//用户名 private String userPass;//用户密码 public int getUserID() {
return userID;
} public void setUserID(int userID) {
this.userID = userID;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getUserPass() {
return userPass;
} public void setUserPass(String userPass) {
this.userPass = userPass;
}}
UsersDAO.java的代码如下:package cn.com.systop.l02;import cn.com.systop.l02.Users;public interface UsersDAO { // 用户注册
public int save(Users users); // 修改密码
public int update(Users users); // 登录验证
public Users doLogin(String userName, String passWord);
}
UsersDAOImpl.java的代码如下:package cn.com.systop.l02;import cn.com.systop.l02.UsersDAO;
import cn.com.systop.l02.Users;public class UsersDAOImpl extends BaseDAO implements UsersDAO { // 用户注册
public int save(Users users) {
int row = 0;
String sql = "INSERT INTO t_users VALUES(?,?)";// 带输入参数的SQL语句
// 创建String数组放置输入参数的值
String[] param = { users.getUserName(), users.getUserPass() };
try {
// 调用父类的executeSQL方法,返回受影响的行数。
row = super.executeSQL(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
return row;
} // 修改密码
public int update(Users users) {
int row = 0;
String sql = "UPDATE t_users SET userPass = ? WHERE userID = ?";// 带输入参数的SQL语句
// 创建String数组放置输入参数的值
String[] param = { users.getUserPass(), users.getUserID() + "" };
try {
// 调用父类的executeSQL方法,返回受影响的行数。
row = super.executeSQL(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
return row;
}
// 登录验证
public Users doLogin(String userName, String passWord) {
Users users = null;
String sql = "SELECT * FROM t_users WHERE userName=? AND userPass=?";// SQL语句
try {
super.getConnection();// 调用父类方法获取数据库连接
pstm = con.prepareStatement(sql);// 创建预编译的SQL语句对象
// 设置输入参数的值
pstm.setString(1, userName);
pstm.setString(2, passWord);
rs = pstm.executeQuery();// 执行sql语句,返回结果集。
if (rs.next()) {
// 如果用户名和密码都正确遍历结果集创建用户对象封装数据
users = new Users();
users.setUserID(rs.getInt(1));
users.setUserName(rs.getString(2));
users.setUserPass(rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
super.closeAll();// 释放数据库资源
}
return users;// 返回用户对象
}
}
register.jsp的代码如下:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.com.systop.l02.Users" %>
<%@ page import="cn.com.systop.l02.UsersDAO" %>
<%@ page import="cn.com.systop.l02.UsersDAOImpl" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
<form action="register.jsp" method="post">
<table>
<tr>
<td colspan="2">
<h3>请您注册</h3>
</td>
</tr>
<tr>
<td>注册名:</td>
<td><input type="text" name="userName"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="userPassword"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="注册"> <input
type="reset" value="重置"></td>
</tr>
</table>
</form>
<jsp:useBean id="userRegister"
class="cn.com.systop.l02.UserRegisterBean"></jsp:useBean>
<jsp:setProperty name="userRegister" property="userName" />
<jsp:setProperty name="userRegister" property="userPassword" />
<%
if (userRegister.getUserName() != null) {
%>
<%=userRegister.toString()%>
<%
}
%>
<jsp:setProperty name="userRegister" property="*"/>
<%
if (userRegister.getUserName() != null) {
%>
注册成功!<br>
用户名:<jsp:getProperty name="userRegister" property="userName"/><br>
密码:<jsp:getProperty name="userRegister" property="userPassword"/>
<%
}
%>
<%
//设置request编码的字符集方式,简体中文使用UTF-8字符集
request.setCharacterEncoding("UTF-8");
//下面获取表单元素的值,封装到Users实体类对象中
Users user = new Users();
user.setUserName(request.getParameter("userName"));
user.setUserPass(request.getParameter("userPass"));
//创建用户信息数据库访问类对象
UsersDAO usersDAO = new UsersDAOImpl();
//调用用户注册方法
int row = usersDAO.save(user);
//根据返回结果判断是否添加成功
if(row > 0){
//注册成功,重定向到首页
response.sendRedirect(path + "/register.jsp");
}else{
//注册失败,重定向回注册页面
response.sendRedirect(path + "/register.jsp");
}
%>
</body>
</html>
然后在地址栏输入http://localhost:8080/JSPLogin/register.jsp
服务器栏就显示下面的好多重复的代码了信息: Jk running ID=0 time=0/47 config=null
2013-4-26 21:14:16 org.apache.catalina.startup.Catalina start
信息: Server startup in 2096 ms
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
还有好多调用增删改方法成功的文字呢,没复制完,我想把注册的信息添加到数据库,怎么出现这样的显示呢?对我这个新手真的好难
DBConnection.java的代码如下:package cn.com.systop.l02.connection;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 数据库连接类
* @author Administrator
*
*/
public class DBConnection {
//数据库连接字符串
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL Server 2005的JDBC驱动类 private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=Book";// 用于标识数据库的URL private static final String UNAME = "sa";// 数据库用户名 private static final String UPWD = "123";// 数据库密码 /**
* 获得数据库连接
* @return 数据库连接对象
*/
public static Connection getConnection(){
Connection con = null;
try {
//加载驱动
Class.forName(DRIVER);
//获得数据库连接
con = DriverManager.getConnection(URL, UNAME, UPWD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}
BaseDAO.java的代码如下:package cn.com.systop.l02;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class BaseDAO {
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL Server 2005的JDBC驱动类 private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=Book";// 用于标识数据库的URL private static final String UNAME = "sa";// 数据库用户名 private static final String UPWD = "123";// 数据库密码 protected Connection con;// 数据库连接对象 protected PreparedStatement pstm;// 预编译的SQL语句对象 protected Statement stmt;// SQL语句对象 protected ResultSet rs;// 结果集对象 // 获取数据库连接
protected void getConnection() throws Exception {
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, UNAME, UPWD);
} // 释放数据库资源
protected void closeAll() {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstm != null) {
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
if (con != null && con.isClosed() == false) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 执行SQL语句,可以执行增、删、改的操作,不能执行查询
* @param sql 预编译的sql语句
* @param param sql语句参数数组
* @return rows 返回受影响的行数
*/
protected int executeSQL(String sql, String[] param) throws Exception {
int rows = 0; // 受影响的行数 try {
this.getConnection();
if (param != null && param.length > 0) {
pstm = con.prepareStatement(sql);
// 循环,将SQL语句参数数组中的值依次赋给预执行语句
for (int i = 0; i < param.length; i++) {
// 注意,setXXX()方法的索引值从1开始,所以有i+1
pstm.setString(i + 1, param[i]);
}
rows = pstm.executeUpdate();
} else {
// 创建Statement对象,执行更新sql语句,返回受影响的行数
stmt = con.createStatement();
rows = stmt.executeUpdate(sql);
}
} finally {
this.closeAll();// 释放资源
}
System.out.println("调用通用的增、删、改方法成功!");
return rows;// 返回受影响的行数
}
}
UserRegisterBean.java的代码如下:package cn.com.systop.l02;public class UserRegisterBean {
private String userName;//用户名
private String userPassword;//密码
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
//get/set方法
public String toString(){
return "欢迎"+this.getUserName()+"注册成功,密码为:"+this.getUserPassword();
}
}
Users.java的代码如下:package cn.com.systop.l02;public class Users {
private int userID;//用户ID private String userName;//用户名 private String userPass;//用户密码 public int getUserID() {
return userID;
} public void setUserID(int userID) {
this.userID = userID;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getUserPass() {
return userPass;
} public void setUserPass(String userPass) {
this.userPass = userPass;
}}
UsersDAO.java的代码如下:package cn.com.systop.l02;import cn.com.systop.l02.Users;public interface UsersDAO { // 用户注册
public int save(Users users); // 修改密码
public int update(Users users); // 登录验证
public Users doLogin(String userName, String passWord);
}
UsersDAOImpl.java的代码如下:package cn.com.systop.l02;import cn.com.systop.l02.UsersDAO;
import cn.com.systop.l02.Users;public class UsersDAOImpl extends BaseDAO implements UsersDAO { // 用户注册
public int save(Users users) {
int row = 0;
String sql = "INSERT INTO t_users VALUES(?,?)";// 带输入参数的SQL语句
// 创建String数组放置输入参数的值
String[] param = { users.getUserName(), users.getUserPass() };
try {
// 调用父类的executeSQL方法,返回受影响的行数。
row = super.executeSQL(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
return row;
} // 修改密码
public int update(Users users) {
int row = 0;
String sql = "UPDATE t_users SET userPass = ? WHERE userID = ?";// 带输入参数的SQL语句
// 创建String数组放置输入参数的值
String[] param = { users.getUserPass(), users.getUserID() + "" };
try {
// 调用父类的executeSQL方法,返回受影响的行数。
row = super.executeSQL(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
return row;
}
// 登录验证
public Users doLogin(String userName, String passWord) {
Users users = null;
String sql = "SELECT * FROM t_users WHERE userName=? AND userPass=?";// SQL语句
try {
super.getConnection();// 调用父类方法获取数据库连接
pstm = con.prepareStatement(sql);// 创建预编译的SQL语句对象
// 设置输入参数的值
pstm.setString(1, userName);
pstm.setString(2, passWord);
rs = pstm.executeQuery();// 执行sql语句,返回结果集。
if (rs.next()) {
// 如果用户名和密码都正确遍历结果集创建用户对象封装数据
users = new Users();
users.setUserID(rs.getInt(1));
users.setUserName(rs.getString(2));
users.setUserPass(rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
super.closeAll();// 释放数据库资源
}
return users;// 返回用户对象
}
}
register.jsp的代码如下:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.com.systop.l02.Users" %>
<%@ page import="cn.com.systop.l02.UsersDAO" %>
<%@ page import="cn.com.systop.l02.UsersDAOImpl" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
<form action="register.jsp" method="post">
<table>
<tr>
<td colspan="2">
<h3>请您注册</h3>
</td>
</tr>
<tr>
<td>注册名:</td>
<td><input type="text" name="userName"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="userPassword"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="注册"> <input
type="reset" value="重置"></td>
</tr>
</table>
</form>
<jsp:useBean id="userRegister"
class="cn.com.systop.l02.UserRegisterBean"></jsp:useBean>
<jsp:setProperty name="userRegister" property="userName" />
<jsp:setProperty name="userRegister" property="userPassword" />
<%
if (userRegister.getUserName() != null) {
%>
<%=userRegister.toString()%>
<%
}
%>
<jsp:setProperty name="userRegister" property="*"/>
<%
if (userRegister.getUserName() != null) {
%>
注册成功!<br>
用户名:<jsp:getProperty name="userRegister" property="userName"/><br>
密码:<jsp:getProperty name="userRegister" property="userPassword"/>
<%
}
%>
<%
//设置request编码的字符集方式,简体中文使用UTF-8字符集
request.setCharacterEncoding("UTF-8");
//下面获取表单元素的值,封装到Users实体类对象中
Users user = new Users();
user.setUserName(request.getParameter("userName"));
user.setUserPass(request.getParameter("userPass"));
//创建用户信息数据库访问类对象
UsersDAO usersDAO = new UsersDAOImpl();
//调用用户注册方法
int row = usersDAO.save(user);
//根据返回结果判断是否添加成功
if(row > 0){
//注册成功,重定向到首页
response.sendRedirect(path + "/register.jsp");
}else{
//注册失败,重定向回注册页面
response.sendRedirect(path + "/register.jsp");
}
%>
</body>
</html>
然后在地址栏输入http://localhost:8080/JSPLogin/register.jsp
服务器栏就显示下面的好多重复的代码了信息: Jk running ID=0 time=0/47 config=null
2013-4-26 21:14:16 org.apache.catalina.startup.Catalina start
信息: Server startup in 2096 ms
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
调用通用的增、删、改方法成功!
还有好多调用增删改方法成功的文字呢,没复制完,我想把注册的信息添加到数据库,怎么出现这样的显示呢?对我这个新手真的好难
<%
//设置request编码的字符集方式,简体中文使用UTF-8字符集
request.setCharacterEncoding("UTF-8");
//下面获取表单元素的值,封装到Users实体类对象中
Users user = new Users();
user.setUserName(request.getParameter("userName"));
user.setUserPass(request.getParameter("userPass"));
// System.out.println(user.getUserName());
//创建用户信息数据库访问类对象
UsersDAO usersDAO = new UsersDAOImpl();
//调用用户注册方法
int row = usersDAO.save(user);
//根据返回结果判断是否添加成功
if (row > 0) {
//注册成功,重定向到首页
// response.sendRedirect(path + "/register.jsp");
} else {
//注册失败,重定向回注册页面
//response.sendRedirect(path + "/register.jsp");
}
%>
在点击注册时,进行注册数据的保存(打印一句 调用通用的增、删、改方法成功),然后返回本页面,页面重新加载页面,又保存,又打印,死循环。你可以另写两个不同的页面。分别为注册成功和注册失败。
第二个不合适:
在BaseDAO中,因为你真正的保存操作,在这个DAO中,这个DAO由UserDAO调用的
public int save(Users users) {
int row = 0;
String sql = "INSERT INTO t_users VALUES(?,?)";// 带输入参数的SQL语句
// 创建String数组放置输入参数的值
String[] param = { users.getUserName(), users.getUserPass() };
try {
// 调用父类的executeSQL方法,返回受影响的行数。
row = super.executeSQL(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
return row;
}看到当页面没有提交注册数据时,users.getUserName(),users.getUserPass()返回的是null.这样,传进去的param其实是有内存空间的,只是数据都为空。 if (param != null && param.length > 0) {
pstm = con.prepareStatement(sql);
// 循环,将SQL语句参数数组中的值依次赋给预执行语句
for (int i = 0; i < param.length; i++) {
// 注意,setXXX()方法的索引值从1开始,所以有i+1
pstm.setString(i + 1, param[i]);
}
rows = pstm.executeUpdate();
} else {
// 创建Statement对象,执行更新sql语句,返回受影响的行数
stmt = con.createStatement();
rows = stmt.executeUpdate(sql);
}这样一来,param永远不会为null,param.length永远为2,你上面的判断就一直成立。而真正保存的数据是两个空值。相信你的本意不是这个,所以可以直接为param时里的数据进行判断。
for(String str:param)
{
if(str==null||str.length()<=0||str.equals(""))
{
return ;
}
}第三个不合适:
在页面中user.setUserPass(request.getParameter("userPass"));里你用的是userPass而真正的name是userPassword。