2016-05-19 7 views
-1

я получаю следующее сообщение об ошибке:ошибка: не удается найти символ PreparedStatement

error: cannot find symbol PreparedStatement st = conn.prepareStatement("SELECT * FROM table WHERE name = ?"); 
symbol: variable conn 
location: class splitString 

Вот код, я использую

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

class splitString { 
    public static void main(String[] args) { 

    //Connect to database 
    try { 
     Class.forName("org.postgresql.Driver"); 
     Connection con = DriverManager.getConnection("jdbc:postgresql://localhost/database", "postgres", "pswd"); 
     if (con != null) 
      System.out.println("Connection Successful!"); 
    } catch(Exception ee) { 
     ee.printStackTrace(); 
    } 

    String word = "Apples"; 
    PreparedStatement st = conn.prepareStatement("SELECT * FROM table WHERE name = ?"); 
    st.setString(1, word); 
    ResultSet rs = st.executeQuery(); 

    } 
} 

Я хочу посмотреть слово «Яблоки» в базе данных используя переменную с именем «word».

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+1

вы объявили «con», а не «conn», кроме того, область «con» остается в блоке try. – Shail016

+0

Попробуйте использовать IDE, который выделит эти проблемы, и вы сможете решить их самостоятельно, без какой-либо помощи других. – Helios

ответ

0

Изменить

Connection con=DriverManager.getConnection("jdbc:postgresql://localhost/database", "postgres", "pswd"); 

в

Connection conn=DriverManager.getConnection("jdbc:postgresql://localhost/database", "postgres", "pswd"); 

и не добавлять Class.forName("org.postgresql.Driver"); Connection con=DriverManager... в попытке поймать блока. надеется, что это помогает :)

+0

Class.forName и DriverManager оба (я думаю) должны быть в try catch, но объявление Connection должно быть за пределами попытки быть видимым (просто чтобы быть ясным;)) – AxelH

+0

, если вы хотите, чтобы и class.forName & Drivermanager в try-catch вы можете иметь их в нем. но вам нужно будет определить объект соединения con вне try-catch, иначе он не будет распознавать объект подключения во время его использования. (это готово, где вы получаете ошибку) –

+0

Это не для меня, но я говорю, что DriverManager.getConnection бросает SQLException и Class.forName вызывает ClassNotFoundException, и они должны быть уловкой или отбрасыванием. И если один из них выдает исключение, соединение будет невозможно, поэтому не нужно пытаться создать PreparedStatement по нулевому значению. – AxelH

0

Как говорят @ Shail016 у вас есть опечатка в названии Connection Ниже фиксированный код с некоторыми дополнительными примерками улова блоками

package main; 

import java.sql.*; 

class splitString { 
    public static void main(String[] args) { 

     //Connect to database 
     Connection con = null; 
     String word = "Apples"; 

     try { 
      Class.forName("org.postgresql.Driver"); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
     try { 
      con = DriverManager.getConnection("jdbc:postgresql://localhost/database", "postgres", "pswd"); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     if (con != null) 
      System.out.println("Connection Successful!"); 
     else return; 

     PreparedStatement st; 
     ResultSet rs = null; 
     try { 
      st = con.prepareStatement("SELECT * FROM table WHERE name = ?"); 
      st.setString(1, word); 
      rs = st.executeQuery(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
0

Поскольку никто не использовал примерочный с-ресурс, это как это сделать с классом автокласса. (Если кто-то может проверить его на Java 7 или больше, я работаю на 1,6 здесь ...)

try { 
    Class.forName("org.postgresql.Driver"); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
    return; 
} 

try(
    Connection con = DriverManager.getConnection("jdbc:postgresql://localhost/database", "postgres", "pswd"); 
    PreparedStatement st = con.prepareStatement("SELECT * FROM table WHERE name = ?"); 
){ 
    st.setString(1, word); 
    try(rs = st.executeQuery();){ 
     //Read the resultset 
    } 
} 

Это закроет connectionm PreparedStatement и ResultSet автоматически после использования. Это хороший аргумент

Смежные вопросы