Java 找不到插入finally块的位置以消除错误:插入finally以完成约会
我尝试了几个点来插入finally块,但不管我怎么做,最终都会使代码变得更糟 这是我的代码,从第四个到最后一个结束的花括号就是给我错误的那个。有什么想法吗Java 找不到插入finally块的位置以消除错误:插入finally以完成约会,java,debugging,try-catch,try-catch-finally,Java,Debugging,Try Catch,Try Catch Finally,我尝试了几个点来插入finally块,但不管我怎么做,最终都会使代码变得更糟 这是我的代码,从第四个到最后一个结束的花括号就是给我错误的那个。有什么想法吗 包com.tunestore.action 导入java.io.InputStream; 导入java.sql.Connection; 导入java.sql.DriverManager; 导入java.sql.ResultSet; 导入java.sql.PreparedStatement; 导入javax.servlet.http.Http
包com.tunestore.action
导入java.io.InputStream;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.PreparedStatement;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.logging.Log;
导入org.apache.commons.logging.LogFactory;
导入org.apache.struts.action.action;
导入org.apache.struts.action.ActionForm;
导入org.apache.struts.action.ActionForward;
导入org.apache.struts.action.ActionMapping;
导入org.apache.struts.action.ActionMessage;
导入org.apache.struts.action.ActionMessages;
导入org.apache.struts.action.DynaActionForm;
导入java.io.*;
导入javax.servlet.*;
导入javax.servlet.http.*;
导入org.owasp.validator.html.*;
导入org.owasp.esapi.*;
公共类DownloadAction扩展了操作
{
私有静态最终日志Log=LogFactory.getLog(DownloadAction.class);
公共静态字符串DB_URL;
静止的
{
if(System.getProperty(“tunestore.db.location”)!=null)
{
DB_URL=“jdbc:derby://localhost:1527/“+System.getProperty(“tunestore.db.location”);
}
其他的
{
DB_URL=“jdbc:derby://localhost:1527/“+System.getProperty(“user.home”)+“/.tunestore”;
}
setProperty(“jdbc.tunestore.url”,DB_url);
}
公共静态连接getConnection()引发异常
{
log.info(“在“+DB_URL”打开数据库);
Class.forName(“org.apache.derby.jdbc.ClientDriver”).newInstance();
Connection conn=DriverManager.getConnection(DB_URL);
返回连接;
}
公共ActionForward执行(ActionMapping映射、ActionForm表单、HttpServletRequest请求、HttpServletResponse响应)
抛出异常
{
DynaActionForm daf=(DynaActionForm)表格;
字符串用户=(字符串)请求.getSession(true).getAttribute(“用户名”);
如果(用户!=null)
{
连接conn=null;
尝试
{
conn=DownloadAction.getConnection();
String sql2=“从CD中选择ID,其中CD.BITS=?”;
PreparedStatement stmt2=conn.prepareStatement(sql2);
stmt2.setString(1,request.getParameter(“cd”);
ResultSet rs2=stmt2.executeQuery();
rs2.next();
String sql=“选择计数(*)”
+“来自TUNEUSER_CD”
+“其中TUNEUSER_CD.TUNEUSER=?和TUNEUSER_CD.CD=?”;
PreparedStatement stmt=conn.prepareStatement(sql);
stmt.setString(1,用户);
stmt.setInt(2,rs2.getInt(1));
ResultSet rs=stmt.executeQuery();
rs.next();
拥有的整数=rs.getInt(1);
如果(拥有==1)
{
尝试
{
//试着先打开那条小溪——如果有什么差错,它就在这里
InputStream=this.getServlet().getServletContext().getResourceAsStream(“/WEB-INF/bits/”+request.getParameter(“cd”);
如果(is!=null)
{
setContentType(“音频/mpeg”);
response.setHeader(“内容处置”、“附件;文件名=“+daf.getString(“cd”)”);
字节[]buff=新字节[4096];
int=0;
而((bread=is.read(buff))>=0)
{
response.getOutputStream().write(buff,0,bread);
}
}
其他的
{
ActionMessages errors=getErrors(请求);
添加(ActionMessages.GLOBAL_消息,新的ActionMessage(“download.error”);
保存错误(请求、错误);
返回mapping.findForward(“错误”);
}
}
捕获(例外e)
{
e、 printStackTrace();
ActionMessages errors=getErrors(请求);
添加(ActionMessages.GLOBAL_消息,新的ActionMessage(“download.error”);
保存错误(请求、错误);
返回mapping.findForward(“错误”);
}
返回null;
}
}
}
}
}
该括号是外部try
块结束的位置。它没有catch
块,也没有finally
块,因此您会得到一个错误。只需在括号后立即添加一个或另一个括号,或者删除不需要的try
。该括号是外部try
块结束的位置。它没有catch
块,也没有finally
块,因此您会得到一个错误。只需在括号后添加一个或另一个,或
package com.tunestore.action;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.owasp.validator.html.*;
import org.owasp.esapi.*;
public class DownloadAction extends Action
{
private static final Log log = LogFactory.getLog(DownloadAction.class);
public static String DB_URL;
static
{
if (System.getProperty("tunestore.db.location") != null)
{
DB_URL = "jdbc:derby://localhost:1527/" + System.getProperty("tunestore.db.location");
}
else
{
DB_URL = "jdbc:derby://localhost:1527/" + System.getProperty("user.home") + "/.tunestore";
}
System.setProperty("jdbc.tunestore.url", DB_URL);
}
public static Connection getConnection() throws Exception
{
log.info("Opening database at " + DB_URL);
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
Connection conn = DriverManager.getConnection(DB_URL);
return conn;
}
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception
{
DynaActionForm daf = (DynaActionForm)form;
String user = (String)request.getSession(true).getAttribute("USERNAME");
if(user != null)
{
Connection conn = null;
try
{
conn = DownloadAction.getConnection();
String sql2 = "SELECT ID FROM CD WHERE CD.BITS = ?";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, request.getParameter("cd"));
ResultSet rs2 = stmt2.executeQuery();
rs2.next();
String sql = "SELECT COUNT(*) "
+ "FROM TUNEUSER_CD "
+ "WHERE TUNEUSER_CD.TUNEUSER = ? AND TUNEUSER_CD.CD = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, user);
stmt.setInt(2, rs2.getInt(1));
ResultSet rs = stmt.executeQuery();
rs.next();
int owned = rs.getInt(1);
if(owned == 1)
{
try
{
// Try to open the stream first - if there's a goof, it'll be here
InputStream is = this.getServlet().getServletContext().getResourceAsStream("/WEB-INF/bits/" + request.getParameter("cd"));
if (is != null)
{
response.setContentType("audio/mpeg");
response.setHeader("Content-disposition", "attachment; filename=" + daf.getString("cd"));
byte[] buff = new byte[4096];
int bread = 0;
while ((bread = is.read(buff)) >= 0)
{
response.getOutputStream().write(buff, 0, bread);
}
}
else
{
ActionMessages errors = getErrors(request);
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("download.error"));
saveErrors(request, errors);
return mapping.findForward("error");
}
}
catch (Exception e)
{
e.printStackTrace();
ActionMessages errors = getErrors(request);
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("download.error"));
saveErrors(request, errors);
return mapping.findForward("error");
}
return null;
}
}
}
}
}