错误在 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 中找不到符号的主要内容,如果未能解决你的问题,请参考以下文章