Struts+SQL2000实现注册功能!急急急急急~~~

yyanm10 2009-12-28 06:52:53
本人JSP初学者,最近在做一个小课题,主要采用Struts+SQL2000实现。
由于初学,所以希望循序渐进,暂时先实现注册功能再做后面的。我个人的基本思路是:
Register.java类,用于接收用户注册的基本信息。
DBConnection.java类,用于数据库链接和对数据库数据的操作(插入、删除等)。
RegisteAction.java类,业务处理,通过实例化Register和DBConnection对象调用各自的方法来实现业务处理。
index.jsp,注册页面。
目前类、web.xml、struts.xml都写好了(当然不一定都合理和正确哈!!),但在注册时无法将数据插入数据
库,在这过程中也出现了很多其他问题,不过最在主要的问题应该就是传值没成功(个人觉得哈),Tomcat老
提示“空指针异常”。
下面贴上详细代码:希望大家帮我看看,指点、指点,若有不合理或错误的地方,希望大家不要喷我哈。

Register.java类:
package ntss.User;

import java.io.Serializable;

public class Register implements Serializable{
private long id; //用户编号(学号或者教师号)
private String name; //用户姓名
private String sex; //用户密码
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

}

DBConnection.java类:

package ntss.Tools;

import java.sql.Connection; //表示连接到某个数据库的连接
import java.sql.DriverManager; //用来获取数据库连接
import java.sql.PreparedStatement; //用来执行SQL语句
import java.sql.ResultSet; //封装查询类结果
import java.sql.SQLException; //异常处理类

public class DBConnection {
private final String dBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; //连接SQL数据库的方法(驱动)
private final String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NTSSystem";
private final String userName = "sa";
private final String password = "test123";
public Connection conn = null;
public PreparedStatement pstmt = null;//用于执行带或不带IN参数(?)的预编译SQL语句 ###### 公有私有??
public ResultSet rs = null; //保存SQL语句执行结果(结果集) ###### 公有私有??

//*****加载数据库驱动
public DBConnection() {
try {
Class.forName(dBDriver).newInstance();
}
//加载失败,抛出异常
catch (Exception e) {
System.out.println("数据库加载失败!");
}
}

//*****创建数据库连接
public Connection GetConnection(){
try {
conn=DriverManager.getConnection(url,userName,password);
} catch (SQLException e) {
System.out.println("创建数据库连接失败!");
conn = null;
e.printStackTrace();
}
return conn;
}

/******
***<1、>数据库操作:插入、更新、删除(不带参数IN)。
*** executeUpdate(String sql) 执行给定的SQL语句,该语句可能为:Insert、
*** Update、Delete语句,或者不还回任何内容的SQL语句。*/
public boolean ExecUpdate(String sql) {

if (conn == null) {
GetConnection();
}
try {
// pstmt = conn.prepareStatement(sql); //此处执行的是不带参数IN的SQL语句
pstmt.executeUpdate(sql);
// System.out.println("操作成功,所影响的记录数为:" + String.valueOf(iCount));
}
catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
System.out.println("executeUpdater()函数执行失败!<<**public boolean ExecUpdate(String sql)**>>");
}
return true;
}

/*******
***<2、>数据库操作:查询(不带参数IN)。
***executeQuery(String sql)执行给定的SQL语句,该语句还回单个ResultSet对象。
*/
public ResultSet ExecQuery(String sql) {
try {
if (conn == null) {
GetConnection();
}
pstmt = conn.prepareStatement(sql);
try {
rs = pstmt.executeQuery(sql);
}
catch (SQLException e) {
System.out.println(e.getMessage());
return null;
}
}
catch (SQLException e) {
System.out.println(e.getMessage());
System.out.println("executeQuery()函数执行失败!");
return null;
}
return rs; // 还回RS记录集。
}

/******
***<3、>数据库操作:查询、插入、更新、删除(带参数IN)。
*/
public void DoPstmt(String sql,Object[] params){
if(sql != null && !sql.equals("")){
if(params == null)
params = new Object[0];
GetConnection(); //调用gerConnection()方法获取数据库连接
if(conn != null){
try{
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
for(int i = 0; i < params.length; i++){
pstmt.setObject(i+1, params[i]);
}
pstmt.execute(); //执行SQL语句
}catch(SQLException e){
System.out.println("doPstmt()函数出错!");
e.printStackTrace(); //输出错误信息
}
}
}
}


/******
***关闭数据库,释放连接。*/
public void Close(){
try{
if(rs!=null)
rs.close();
}catch (SQLException e){
System.out.println("关闭Rs对象失败!");
e.printStackTrace();
}
try{
if(pstmt!=null)
pstmt.close();
}catch(SQLException e){
System.out.println("关闭Pstmt对象失败!");
e.printStackTrace();
}
try{
if(conn!=null)
conn.close();
}catch(SQLException e){
System.out.println("关闭Conn对象失败!");
e.printStackTrace();
}
}
}

RegisterAction类:

package ntss.Action;

import ntss.Tools.DBConnection;
import ntss.User.Register;

import com.opensymphony.xwork2.ActionSupport;


public class RegisterAction extends ActionSupport{
public Register register; //定义注册对象
public Register getRegister(){
return register;
}
public void setRegister(Register register){
this.register = register;
}
public DBConnection dbConnection; //定义数据库连接对象

public RegisterAction(){
dbConnection = new DBConnection(); //初始化数据库连接对象
}
public String execute(Register register) throws Exception{
long id = register.getId();
String name = register.getName();
String sex = register.getSex();
String sql = "insert into reg_user([U_Id],[U_Name],[U_Sex]) values('"+id+"','"+name+"','"+sex+"')";
try{
dbConnection.ExecUpdate(sql);
System.out.print("+name+");
}finally{
dbConnection.Close();
}
return null;

}
}



另外web.xml、struts.xml等下附上,还有本人对struts的标签库不了解哈,希望大家尽量不要牵扯到这个东东。
...全文
128 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyanm10 2009-12-29
  • 打赏
  • 举报
回复
额。。。SP4补丁嘛?打了的。。还是没想通问题在哪里。。。有谁愿意加我QQ花10分钟帮我仔细分析分析么?
Ak混子113 2009-12-29
  • 打赏
  • 举报
回复
调试!!! 看conn 是不是为null.sqlseriver2000要打补丁的.
gouxiongyaya 2009-12-29
  • 打赏
  • 举报
回复
你用的是这个ExecUpdate方法
但是方法里怎么能把这句给注释了呢
// pstmt = conn.prepareStatement(sql); //此处执行的是不带参数IN的SQL语句
沐希 2009-12-29
  • 打赏
  • 举报
回复
解决了给分吧。哈哈
沐希 2009-12-29
  • 打赏
  • 举报
回复
我来加你,记得给我分哦。
cw6797 2009-12-29
  • 打赏
  • 举报
回复
把错误提示贴出来看看咯
wl_ldy 2009-12-28
  • 打赏
  • 举报
回复
看你数据库用的是Sqlserver2000,这个是需要打补丁的,要是没打补丁,就没法连接数据库了。。。
yyanm10 2009-12-28
  • 打赏
  • 举报
回复
回楼上的朋友们。。
刚简化了下程序、去除了暂时不用的方法。基本思路和办法没变,执行过程没有任何错误,现在我也不确定到底是不是没取到值了,因为我换了一句特定的SQL(给定所有值)语句执行,还是插不进数据库。
还有真是非常不好意思,CSDN注册好久了,以前都是拿了代码,看了问题回答就走人- - 所以对论坛功能不熟悉,还不知道怎么打包上传自己的东东,然后给“传送门”给大家。
如果有哪位前辈有空,可以M我,这个问题困扰我好久了。另外本人也正在学习当中,希望有朋友能一起探讨,指点一二。QQ:573449299. 请注明CSDN字样。
todayclock 2009-12-28
  • 打赏
  • 举报
回复
我的哥啊,你吓死我了,都整上来的,你还不如把source code 给我呢
fkyq01 2009-12-28
  • 打赏
  • 举报
回复
你把错误贴出来看下。
crazylaa 2009-12-28
  • 打赏
  • 举报
回复
空指针,首先检查你的连接到底有没有取到,然后看action里面需要的值有没有取到。设个断点跟踪一下。如果不会debug,那就System.out.println打印调试信息。
yyanm10 2009-12-28
  • 打赏
  • 举报
回复
(⊙o⊙)…。。是啊 我主要想到、后面其他功能也要用到DBConnection.jva类,所以就把后面要用的方法都写出来占位了,在这里注册功能只用第二个 ExecUpdate(String sql) 方法就行了,其实用其他两个也可以,只是还要处理,后面的两个方法还没完全实现。
wenjjing2lianee 2009-12-28
  • 打赏
  • 举报
回复
你先把你传过来的值全部输出来,看看到底有没有从页面传过来,还有你是哪一行出现了问题要贴出来,这才好帮你找啊,最好是在你的项目当中运用log4j写点日志,更好定位问题所在...
个人建议
老张-AI 2009-12-28
  • 打赏
  • 举报
回复
...这么长的代码
yyanm10 2009-12-28
  • 打赏
  • 举报
回复
Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />

<package name="default" extends="struts-default">
<action name="register" class="ntss.Action.RegisterAction">
<result name="ture">/index.jsp</result>
</action>
</package>
</struts>

81,122

社区成员

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

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