本人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的标签库不了解哈,希望大家尽量不要牵扯到这个东东。
由于初学,所以希望循序渐进,暂时先实现注册功能再做后面的。我个人的基本思路是:
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的标签库不了解哈,希望大家尽量不要牵扯到这个东东。
<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>
个人建议
但是方法里怎么能把这句给注释了呢
// pstmt = conn.prepareStatement(sql); //此处执行的是不带参数IN的SQL语句