#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, и после этого мы можем попытаться извлечь их.