本地变量作用域的问题。如何解决?
本地变量作用域的问题。如何解决?
在我的代码中,当尝试执行statemet.executeUpdate()
时,我遇到了以下错误:
Local variable statement defined in an enclosing scope must be final or effectively final.
这是我的代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;. import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class a1 { protected Shell shell; private Text text; private Text text_1; private Text text_2; private Text text_3; public static void main(String[] args) { try { a1 window = new a1(); window.open(); } catch (Exception e) { e.printStackTrace(); } } public void open() { Display display = Display.getDefault(); createContents(); shell.open(); shell.layout(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } protected void createContents() { Connection connect = null; ResultSet resultSet = null; try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { connect = DriverManager.getConnection("jdbc:mysql://localhost/railwaydb", "root", ""); } catch (SQLException e) { e.printStackTrace(); } Statement statement = null; try { statement = connect.createStatement(); } catch (SQLException e) { e.printStackTrace(); } shell = new Shell(); shell.setSize(450, 300); shell.setText("SWT Application"); Label lblName = new Label(shell, SWT.NONE); lblName.setBounds(10, 43, 47, 15); lblName.setText("Name"); Label lblFrom = new Label(shell, SWT.NONE); lblFrom.setBounds(10, 74, 55, 15); lblFrom.setText("From"); Label lblTo = new Label(shell, SWT.NONE); lblTo.setBounds(10, 105, 55, 15); lblTo.setText("To"); Label lblPrice = new Label(shell, SWT.NONE); lblPrice.setBounds(10, 137, 55, 15); lblPrice.setText("Price"); text = new Text(shell, SWT.BORDER); text.setBounds(64, 43, 76, 21); text_1 = new Text(shell, SWT.BORDER); text_1.setBounds(64, 74, 76, 21); text_2 = new Text(shell, SWT.BORDER); text_2.setBounds(64, 105, 76, 21); text_3 = new Text(shell, SWT.BORDER); text_3.setBounds(64, 137, 76, 21); Label lblRailwayDatabase = new Label(shell, SWT.NONE); lblRailwayDatabase.setBounds(174, 10, 97, 15); lblRailwayDatabase.setText("Railway Database"); Label lblCreateView = new Label(shell, SWT.NONE); lblCreateView.setBounds(189, 43, 76, 15); lblCreateView.setText("Create View"); Button btnName = new Button(shell, SWT.CHECK); btnName.setBounds(189, 73, 93, 16); btnName.setText("Name"); Button btnFrom = new Button(shell, SWT.CHECK); btnFrom.setBounds(189, 105, 93, 16); btnFrom.setText("From"); Button btnTo = new Button(shell, SWT.CHECK); btnTo.setBounds(189, 137, 93, 16); btnTo.setText("To"); Button btnPrice = new Button(shell, SWT.CHECK); btnPrice.setBounds(189, 171, 93, 16); btnPrice.setText("Price"); Button btnInsert = new Button(shell, SWT.NONE); btnInsert.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { String name = text.getText(); String from = text_1.getText(); String to = text_2.getText(); String price = text_3.getText(); String query = "INSERT INTO booking (name, fromst, tost, price) VALUES ('"+name+"', '"+from+"', '"+to+"', '"+price+"')"; try { statement.executeUpdate(query); } catch (SQLException e1) { e1.printStackTrace(); } } }); btnInsert.setBounds(10, 171, 75, 25); btnInsert.setText("Insert"); Button btnView = new Button(shell, SWT.NONE); btnView.setBounds(307, 74, 75, 25); btnView.setText("View"); Button btnIndex = new Button(shell, SWT.NONE); btnIndex.setBounds(307, 127, 75, 25); btnIndex.setText("Index"); } }
我也尝试将statement
设置为final,但是声明给我另一个错误。