在本章你将学习如何使用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"按钮,你将得到该输出页面 :
当两个字段都填写 :
你将得到 :
10 楼 java_道 2011-09-16 14:09
('"+uname+"','"+pws+"')"); 处总报空指针的错误呢!?
9 楼 三毛弟 2011-04-23 16:45
8 楼 Checkmate 2009-05-18 19:16
建议楼主顺着往下讲,就结合到数据库应用方面可以把相应的设计和封装一并讲到。仅仅是标准用法的话没有太大意义。适当的设计和封装可以体现出一个工程师的思路。此外,轻量级框架的适当应用也是敏捷工程的重点。
我看过这系列教程的英文原文,作者用最简单的代码讲述了struts2的基础用法,愚涉世不深,才疏学浅,恐不胜其任.推荐您看看这篇
http://www.javaeye.com/wiki/struts2
7 楼 tiankang 2009-05-18 16:52
6 楼 Checkmate 2009-05-14 15:39
和roseindia网站上的例子一样嘛!
之前说过了,这一系列文章都是翻译自roseindia
5 楼 maoshiqiao 2009-05-14 15:10
4 楼 Checkmate 2009-04-20 14:41
郁闷了,struts跟链接mysql有什么关系,更何况把jdbc写在action里面,会误导群众的
我想本文的作者只是想让大家知道怎么连接MySQL罢了,只是个简单的例子而已,不需要弄个DAO,DAOImpl之类的吧....况且写execute()本身就是在误导群众....
3 楼 cyz001 2009-04-19 17:30
2 楼 Checkmate 2009-04-17 15:37
我就纳闷儿了,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