“未解决的编译问题:本地变量输入可能尚未初始化本地变量成功可能尚未初始化本地变量输入可能尚未初始化”我一直试图用3个输入填充我的数据库,我是对于MySQl的struts2框架来说非常新,所以任何类型的洞察或输入都会非常有用。我是否包含了足够的代码信息或?这是我的ActionClass。
<pre> package com.tutorialspoint.struts2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
private String osName;
private String version;
private String notes;
public String execute() throws Exception {
String input;
String success;
String ret = input;
Connection conn = null;
try{
String URL = "jdbc:mysql://localhost/HelloWorld";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, "root", "");
String sql = "SELECT osName FROM entry WHERE";
sql+=" osName = ? AND version = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, osName);
ps.setString(2, version);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
notes = rs.getString(1);
ret = success;
}
}catch (Exception e) {
ret = input;
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
return ret;
}
public String getOsName() {
return osName;
}
public void setOsName(String osName) {
this.osName = osName;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public void validate()
{
if (osName == null || osName.trim().equals(""))
{
addFieldError("osName","The OS name is required");
}
if (version == null || version.trim().equals(""))
{
addFieldError("version","The OS version is required");
}
}
}
答案 0 :(得分:1)
您的input
和success
是局部变量,没有默认值。当您点击ret = input
行时,您没有在input
中添加任何内容,因此该分配毫无意义。 ret = success
也是如此;你永远不会在方法的任何地方为success
分配任何值。
答案 1 :(得分:1)
SUCCESS
,ERROR
,INPUT
,NONE
和LOGIN
是the Action
interface中定义的预定义框架常量,由{{1}实现你的行动延伸了。
所以,不要忘记你没有初始化你的变量(你应该做的是:
ActionSupport
),绝对不需要它们,因为你可以返回常量值:
private String success = "success";
private String input = "input";
或者,当不扩展ActionSupport时,文字值:
ret = SUCCESS;
...
ret = INPUT;
常量是优选的,以避免拼写错误。