错误在 PreparedStatement 中找不到符号

error cannot find symbol in PreparedStatement

为什么找不到符号

PreparedStatement ps = connection.prepareStatement(sql);
                           ^
variable connection

但是变量连接已经声明如下: *我输入了正确的用户名、密码和url

try {
        Class.forName("org.postgresql.Driver");
}
catch (java.lang.ClassNotFoundException e) {
    System.out.println(e.getMessage());
}
try {
    String url = "jdbc:postgresql://stampy.db.elephantsql.com/";
    String username = "";
    String password = "";
    Connection connection = DriverManager.getConnection(url, username, password);
    List<AdvDetail> list = new ArrayList();
} catch(SQLException e) {
        System.out.println(e.getMessage());
}

我有导入库

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.*;

import a1.kmita.com.model.Adv;
import a1.kmita.com.model.AdvDetail;
import a1.kmita.com.listener.ExceptionListener;
import a1.kmita.com.model.Response;   

和其他 spring 个图书馆

这里是代码

try {
    String sql = "INSERT INTO advert (ad_title, ad_desc, ad_price, ad_image1,) VALUES (?, ?, ?, ?)"; /* this is the query */
    PreparedStatement ps =  connection.prepareStatement(sql); /* this is error */                
    ps.setString(1, product_name);
    ps.setString(2, product_desc);
    ps.setInt(3, product_price);
    ps.setString(4, image1);
    ps.executeUpdate();
    ps.close();         
} catch(SQLException e) {
    System.out.println(e.getMessage());
}

您在使用前没有创建连接对象。检查此示例:

Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(DB_URL,USERNAME,PASS);

connection 是一个变量,必须使用您的连接属性对其进行初始化。仅导入包是不够的。

你可以这样做(例如 postgresql):

Connection connection = null;
try{
    Class.forName("org.postgresql.Driver");
    String connectionString = "jdbc:postgresql://" + dbhost + ":" + dbport + "/" + dbname;
    connection = DriverManager.getConnection(connectionString, dbuser, dbpassword)
}catch (Exception e){
    //...
}

编辑:变量的声明必须在try块之前,否则变量在try块的范围内。看看我的例子,你如何做到这一点。