2012-03-24 5 views
1

Я кодировал код подключения для встроенного db в NetBeans. Что-то не так с моим возвратным соединением. Есть идеи? Я выделил/дважды поставил код, который генерирует ошибки. При попытке компиляции я получаю сообщение об ошибке «не могу найти символ символ: переменное соединение местоположение: класс ProductDB«Derby и NetBeans - ошибки с «соединением»

Это мой первый опыт работы с Derby.

import java.util.*; 
import java.sql.*; 

public class ProductDB implements ProductDAO 
{ 

    private static Connection connect() 
    { 
     try 
     { 
        // set the db url string 
        String dbUrl = "jdbc:derby:MurachDB"; 

        // create a Properties ovject with username and password 
        Properties properties = new Properties(); 
        properties.put("user", ""); 
        properties.put("password", ""); 

        // create and return the connection 
        Connection connection = DriverManager.getConnection(dbUrl, properties); 
        return **connection**; 
     } 
     catch(SQLException e) 
     { 
     for (Throwable t : e) 
        e.printStackTrace(); 
       return null; 
     } 
    } 

    public ArrayList<Product> getProducts() 
    { 
     try 
     { 
      ArrayList<Product> products = new ArrayList<Product>(); 

      String query = "SELECT ProductCode, Description, Price " 
         + "FROM Products ORDER BY ProductCode ASC"; 
      PreparedStatement ps = **connection**.prepareStatement(query); 
      ResultSet rs = ps.executeQuery(); 

      while(rs.next()) 
      { 
       String code = rs.getString("ProductCode"); 
       String description = rs.getString("Description"); 
       double price = rs.getDouble("Price"); 

       Product p = new Product(code, description, price); 
       products.add(p); 
      } 
      rs.close(); 
      ps.close(); 
      return products; 
     } 
     catch(SQLException sqle) 
     { 
      //sqle.printStackTrace(); // for debugging 
      return null; 
     } 
    } 

    public Product getProduct(String code) 
    { 
     try 
     { 
      String selectProduct = 
       "SELECT ProductCode, Description, Price " + 
       "FROM Products " + 
       "WHERE ProductCode = ?"; 
      PreparedStatement ps = **connection**.prepareStatement(selectProduct); 
      ps.setString(1, code); 
      ResultSet rs = ps.executeQuery(); 

      if (rs.next()) 
      { 
       String description = rs.getString("Description"); 
       double price = rs.getDouble("Price"); 
       Product p = new Product(code, description, price); 
       rs.close(); 
       ps.close(); 
       return p; 
      } 
      else 
       return null; 
     } 
     catch(SQLException sqle) 
     { 
      //sqle.printStackTrace(); // for debugging 
      return null; 
     } 
    } 

    public boolean addProduct(Product p) 
    { 
     try 
     { 
      String insert = 
       "INSERT INTO Products (ProductCode, Description, Price) " + 
       "VALUES (?, ?, ?)"; 
      PreparedStatement ps = **connection**.prepareStatement(insert); 
      ps.setString(1, p.getCode()); 
      ps.setString(2, p.getDescription()); 
      ps.setDouble(3, p.getPrice()); 
      ps.executeUpdate(); 
      ps.close(); 
      return true; 
     } 
     catch(SQLException sqle) 
     { 
      //sqle.printStackTrace(); // for debugging 
      return false; 
     } 
    } 

    public boolean deleteProduct(Product p) 
    { 
     try 
     { 
      String delete = 
       "DELETE FROM Products " + 
       "WHERE ProductCode = ?"; 
      PreparedStatement ps = **connection**.prepareStatement(delete); 
      ps.setString(1, p.getCode()); 
      ps.executeUpdate(); 
      ps.close(); 
      return true; 
     } 
     catch(SQLException sqle) 
     { 
      //sqle.printStackTrace(); // for debugging 
      return false; 
     } 
    } 

    public boolean updateProduct(Product p) 
    { 
     try 
     { 
      String update = 
       "UPDATE Products SET " + 
        "Description = ?, " + 
        "Price = ? " + 
       "WHERE ProductCode = ?"; 
      PreparedStatement ps = **connection**.prepareStatement(update); 
      ps.setString(1, p.getDescription()); 
      ps.setDouble(2, p.getPrice()); 
      ps.setString(3, p.getCode()); 
      ps.executeUpdate(); 
      ps.close(); 
      return true; 
     } 
     catch(SQLException sqle) 
     { 
      //sqle.printStackTrace(); // for debugging 
      return false; 
     } 
    } 
} 

ответ

1

Вы создали свой объект связи в качестве переменной в вашем методе инициализации - это выходит за рамки, когда метод возвращает и не видно в остальной части вашей программы. Вместо этого вы должны объявить объект соединения как переменную экземпляра.

private volatile Connection connection; 

private synchronized Connection connect() { 
    if (connection != null) 
     return connection; 
    else { 
     try { 
      // ... 

      // create and return the connection 
      connection = DriverManager.getConnection(dbUrl, properties); 
      return connection; 
     } catch (SQLException e) { 
      for (Throwable t : e) 
       e.printStackTrace(); 
      return null; 
     } 
    } 
} 

Кроме того, вы хотите вызвать метод подключения до фактического использования соединения.