错误在 PreparedStatement 中找不到符号

Posted

技术标签:

【中文标题】错误在 PreparedStatement 中找不到符号【英文标题】:error cannot find symbol in 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对象? What does a "Cannot find symbol" compilation error mean?的可能重复 我不知道这是否会影响任何事情,但您似乎在ad_image1 之后多了一个逗号。在你的 sql 字符串中 @javaguy: ahem connection 变量。未声明对象。 @javaguy 我在上面声明连接尝试 【参考方案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 所说,查看此列表***.com/questions/25706216/… 并检查哪一点对您来说是正确的。我猜它是拼写(因为你没有向我们展示这部分代码,这只是一个猜测)你可以发布这部分代码并空白用户名/密码) 很抱歉没有显示代码的另一部分,但我已经编辑并添加了代码的另一部分。并感谢您发送的链接【参考方案2】:

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

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

【讨论】:

这不是问题,因为它不会导致找不到符号编译错误,而是会导致 NPE、NullPointerException。 发帖人没有声明变量,因此找不到变量-.-(仅导入包是不够的)

以上是关于错误在 PreparedStatement 中找不到符号的主要内容,如果未能解决你的问题,请参考以下文章

MinGW gcc 在 /local/include 中找不到头文件

在 Visual Studio 项目目录中找不到头文件

Xcode Archive 在子项目中找不到头文件

脑洞题目 - 改自从一组无序数组中找不存在的最小正整数

Spring集成测试

JDBC:使用 PreparedStatement 创建表,SQL 语法错误与否?