Мой запрос Select с предложением where не работает

#java #postgresql #jdbc

#java #postgresql #jdbc

Вопрос:

Я пытаюсь извлечь данные из базы данных postgres, используя предложение where. Он возвращает нулевые значения. Но, выполняя тот же запрос на листе postgres, он выдает данные.

И еще одна вещь, я не могу использовать без двойных кавычек («USER_INFO»), при использовании без двойных кавычек я получаю сообщение об ошибке «имя столбца не существует».

Но большинство онлайн-примеров не содержат только двойных кавычек.

Пожалуйста, помогите решить эту проблему. Заранее благодарю.

     public class PostGreDB {
static final String JDBC_DRIVER = "org.postgresql.Driver";
    static final String DB_URL = "jdbc:postgresql://localhost:5432/";

public static void main(String[] args) throws SQLException
{
Connection conn = null;
//Statement st = null;
try{
    //STEP 2: Register JDBC driver
    Class.forName("org.postgresql.Driver");

    //STEP 3: Open a connection
    System.out.println("Connecting to database...");
    conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/","postgres","XXXX@1904");

    //STEP 4: Execute a query
    System.out.println("Creating statement...");
    //st = conn.createStatement();
    String sql;
    sql = "SELECT * FROM public."   ""USER_INFO" where "USER_INFO"."EMAIL_ID" = ?";
    System.out.println(sql);
    try(PreparedStatement pst= conn.prepareStatement(sql)){
        pst.setString(1 , "cppandi33@gmail.com");
        pst.executeQuery();

    try(ResultSet rs = pst.getResultSet()){
    //STEP 5: Extract data from result set
    while(rs.next()){
        //Retrieve by column name
        String first = rs.getString("USER_ID");
        String last = rs.getString("USER_NAME");
        String email = rs.getString("EMAIL_ID");

        //Display values
        System.out.print("User ID: "   first "n");
        System.out.println("User Name: "   last "n");
        System.out.println("Email: "   email);
    }
    rs.close();
    }catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    }catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    //STEP 6: Clean-up environment

   // st.close();
    conn.close();
}catch(SQLException se){
    //Handle errors for JDBC
    se.printStackTrace();
}catch(Exception e){
    //Handle errors for Class.forName
    e.printStackTrace();
}
finally
{
    try{
        if(conn!=null)
            conn.close();
    }
    catch(SQLException se){
        se.printStackTrace();
    }//end finally try
}
}
}
 

Комментарии:

1. Почему вы используете LIKE в первую очередь? Вы ожидаете, что электронное письмо будет подстрокой EMAIL_ID ?

2. Спасибо за немедленный ответ @Tim Okay EMAIL_ID =? также получаю только то же значение null.

3. Затем вам следует проверить данные вашей таблицы. Для меня запрос выглядит нормально.

4. Спасибо @TimBiegeleisen, похоже, что значение в базе данных равно «null». Теперь я вставил некоторые значения. Он работает нормально.

Ответ №1:

Когда столбец содержит «null» в качестве данных. Он дает только null. Попробуйте вставить некоторые данные с помощью запроса insert, и после этого мы можем попытаться извлечь их.