【问题标题】:error cannot find symbol in PreparedStatement错误在 PreparedStatement 中找不到符号
【发布时间】:2017-03-26 16:33:46
【问题描述】:

为什么会出错,找不到符号

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

但是变量连接已经像这样声明了: *我输入了正确的用户名、密码和网址

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());
}

【问题讨论】:

  • 你在哪里声明了connection对象?
  • 我不知道这是否会影响任何事情,但您似乎在ad_image1 之后多了一个逗号。在你的 sql 字符串中
  • @javaguy: ahem connection 变量。未声明对象。
  • @javaguy 我在上面声明连接尝试

标签: java spring jdbc prepared-statement spring-jdbc


【解决方案1】:

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 块的范围内。看看我的例子,你是怎么做到的。

【讨论】:

  • 我已经初始化了,但是我没有在上面的问题上写代码,对不起
  • 正如 cmets 所说,查看此列表stackoverflow.com/questions/25706216/… 并检查哪一点对您来说是正确的。我猜它是拼写(因为你没有向我们展示这部分代码,这只是一个猜测)你可以发布这部分代码并空白用户名/密码)
  • 很抱歉没有显示代码的另一部分,但我已经编辑并添加了代码的另一部分。并感谢您发送的链接
【解决方案2】:

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

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

【讨论】:

  • 这不是问题,因为它不会导致找不到符号编译错误,而是会导致 NPE、NullPointerException。
  • 发帖人没有声明变量,因此找不到变量-.-(仅导入包是不够的)
猜你喜欢
  • 2016-09-16
  • 2020-11-24
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多