原创作者: 饕尽天下   阅读:17388次   评论:10条   更新时间:2011-06-01    

在本章你将学习如何使用struts2连接MySQL数据库.

按照如下步骤连接MySQL数据库 :

第一步 : 创建struts.xml并向其中添加如下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>

    <!-- Rose India Struts 2 Tutorials -->
    <constant name="struts.enable.DynamicMethodInvocation" 
     value="false" /> 
    <constant name="struts.devMode" value="true" />
<include file="struts-default.xml"/>    

    <!-- Add packages here -->


  <package name="roseindia" namespace="/roseindia" 
   extends="struts-default">

<!-- inserting data into data base through JDBC -->

    <action name="insert">
      <result>/pages/insertData.jsp</result>
    </action>

    <action name="insertData" class="net.roseindia.insert">
      <result  name="error">/pages/insertData.jsp</result>
      <result>/pages/insertSuccess.jsp</result>
    </action>
  
    </package>


</struts> 

第二步 : 创建一个JSP输入表单 :

insertData.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Struts 2 Insert Data Application!</title>

<link href="<s:url value="/css/main.css"/>" rel="stylesheet"
type="text/css"/>

</head>
<body>


<s:form action="insertData" method="POST" validate="true">

<tr>
<td colspan="2">
Please enter
</td>

</tr>

<s:actionerror />
<s:fielderror />

<s:textfield name="username" label="User Name"/>
<s:password name="password" label="Password"/>
<s:submit value="Save" align="center"/>

</s:form>

</body>

</html>

第三步 : 创建一个Action.

首先通过MySQL驱动的帮助("org.gjt.mm.mysql.Driver")建立一个MySQL数据库连接.现在,MySQL数据库中创建一个账户以连接数据库.创建连接后,你可以向MySQL数据库的表中检索,添加,更新数据.

下面的Action类通过方法适当的类型的帮助和API接口建立了与MySQL数据库的连接.如果建立了连接输入的数据会添加到MySQL数据库表中否则显示错误信息.

insert.java

package net.roseindia;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Date;
import java.sql.*;


/**
 * <p> Validate a user login. </p>
 */
public  class insert  extends ActionSupport {
  
  public String execute() throws Exception {
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "taskproject";
    String driverName = "org.gjt.mm.mysql.Driver";
    String userName = "root";
    String password = "root";
    Connection con=null;
    Statement stmt=null;
    try{
      Class.forName(driverName).newInstance();
      con=DriverManager.getConnection(url+dbName, userName, 
          password);
      stmt=con.createStatement();
    }
    catch(Exception e){
      System.out.println(e.getMessage());
    }
    String uname=getUsername();
    String pws=getPassword();
    stmt = con.createStatement();
        int val = stmt.executeUpdate("INSERT employee VALUES
                  ('"+uname+"','"+pws+"')"); 
    if(val == 0){
      return ERROR;
    }
    else{
      return SUCCESS;
    }
  }
  // ---- Username property ----

    /**
     * <p>Field to store User username.</p>
     * <p/>
     */
    private String username = null;


    /**
     * <p>Provide User username.</p>
     *
     * @return Returns the User username.
     */
    public String getUsername() {
        return username;
    }

    /**
     * <p>Store new User username</p>
     *
     * @param value The username to set.
     */
    public void setUsername(String value) {
        username = value;
    }

    // ---- Username property ----

    /**
     * <p>Field to store User password.</p>
     * <p/>
     */
    private String password = null;


    /**
     * <p>Provide User password.</p>
     *
     * @return Returns the User password.
     */
    public String getPassword() {
        return password;
    }

    /**
     * <p>Store new User password</p>
     *
     * @param value The password to set.
     */
    public void setPassword(String value) {
        password = value;
    }

}

 

代码的描述 :

Connection :

这是java.sql包中的一个接口,通过指定的数据库像MySQL, Ms-Access, Oracle等和java文件建立连接.SQL语句执行于Connection接口的上下文中.

Class.forName(String driver):

该方法是static.它试图动态加载类并返回类实例.当它匹配类的指定string,它获得String类型值(driver).

DriverManager:

它是java.sql包中的一个类,管理一系列JDBC的驱动.每个驱动都通过该类注册.

getConnection(String url, String userName, String password):

该方法通过指定的数据库url建立数据库连接.它需要三个String类型的参数如 :

    url: - 需要连接的数据库url

userName: - 数据库用户名

password: - 数据库密码

con.close():

该方法用来断开连接.它释放了数据库占用的所有资源.

第四步 : 创建验证器.

验证文件的格式应该是<ActionClassName>-validation.xml<ActionClassName>-<ActionAliasName>-validation.xml.

insert-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC 
      "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
      "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
      
<validators>
  <field name="username">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>User name is required</message>
    </field-validator>
  </field>
  <field name="password">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>Password is required</message>
    </field-validator>
  </field>
</validators>

 

当在文本域中输入正确的数据后,用户将在insertSuccess.jsp页面得到输入的数据.

insertSuccess.jsp

<html>

<head>

<title>Inserted Data List</title>

</head>

<body>
<b> Inserted Data: </b>
<b>User name = </b><%=request.getParameter("username") %>!
<b>Password = </b><%=request.getParameter("password") %>!
</body>

</html>

 

输出 :

当程序执行时用户得到如下页面 :

不填写任何字段并点击"Save"按钮,你将得到如下输出页面 :

如果你只输入"Password"并不输入其它字段并点击"Save"按钮,你将得到该输出页面 :

如果你只输入"User Name"并不输入其它字段并点击"Save"按钮,你将得到该输出页面 :

当两个字段都填写 :

你将得到 :

  • 大小: 1.6 KB
  • 大小: 2.2 KB
  • 大小: 2 KB
  • 大小: 2 KB
  • 大小: 2 KB
  • 大小: 610 Bytes
评论 共 10 条 请登录后发表评论
10 楼 java_道 2011-09-16 14:09
为什么我的实验的时候在int val = stmt.executeUpdate("INSERT employee VALUES 
('"+uname+"','"+pws+"')");  处总报空指针的错误呢!?
9 楼 三毛弟 2011-04-23 16:45
楼主这东西原来是在别处拿来的
8 楼 Checkmate 2009-05-18 19:16
tiankang 写道

建议楼主顺着往下讲,就结合到数据库应用方面可以把相应的设计和封装一并讲到。仅仅是标准用法的话没有太大意义。适当的设计和封装可以体现出一个工程师的思路。此外,轻量级框架的适当应用也是敏捷工程的重点。

我看过这系列教程的英文原文,作者用最简单的代码讲述了struts2的基础用法,愚涉世不深,才疏学浅,恐不胜其任.推荐您看看这篇
http://www.javaeye.com/wiki/struts2
7 楼 tiankang 2009-05-18 16:52
建议楼主顺着往下讲,就结合到数据库应用方面可以把相应的设计和封装一并讲到。仅仅是标准用法的话没有太大意义。适当的设计和封装可以体现出一个工程师的思路。此外,轻量级框架的适当应用也是敏捷工程的重点。
6 楼 Checkmate 2009-05-14 15:39
maoshiqiao 写道

和roseindia网站上的例子一样嘛!

之前说过了,这一系列文章都是翻译自roseindia
5 楼 maoshiqiao 2009-05-14 15:10
和roseindia网站上的例子一样嘛!
4 楼 Checkmate 2009-04-20 14:41
cyz001 写道

郁闷了,struts跟链接mysql有什么关系,更何况把jdbc写在action里面,会误导群众的

我想本文的作者只是想让大家知道怎么连接MySQL罢了,只是个简单的例子而已,不需要弄个DAO,DAOImpl之类的吧....况且写execute()本身就是在误导群众....
3 楼 cyz001 2009-04-19 17:30
郁闷了,struts跟链接mysql有什么关系,更何况把jdbc写在action里面,会误导群众的

2 楼 Checkmate 2009-04-17 15:37
renyanwei 写道

我就纳闷儿了,Struts和MySQL有啥关系么? 一个表现层框架怎么连起了数据库,用什么数据库和表现层有关系么? 为了表现你那看似不错的标题还要把数据库操作写到action里去,有意思么?

你可以看看这个http://www.roseindia.net/struts/struts2/struts-2-mysql.shtml
然后把你的回复留在Comments那里
In this section, You will learn to connect the MySQL database with the struts 2 application.
Follow the following steps to connect with MySQL database:....

BTW , if you smell what the rock is cooking
1 楼 renyanwei 2009-04-17 15:26
我就纳闷儿了,Struts和MySQL有啥关系么? 一个表现层框架怎么连起了数据库,用什么数据库和表现层有关系么? 为了表现你那看似不错的标题还要把数据库操作写到action里去,有意思么?

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics