java中已准备语句Sql连接的空指针异常
我在这个论坛上也遇到过同样类型的问题,但他们的解决方案在这里没有帮助。在尝试连接到MySql workbench时,我尝试在java中运行以下代码:java中已准备语句Sql连接的空指针异常,java,jdbc,prepared-statement,Java,Jdbc,Prepared Statement,我在这个论坛上也遇到过同样类型的问题,但他们的解决方案在这里没有帮助。在尝试连接到MySql workbench时,我尝试在java中运行以下代码: import java.sql.*; public class DBConnection { public static void main(String[] args) { Connection con = null; PreparedStatement st =null; try { Clas
import java.sql.*;
public class DBConnection {
public static void main(String[] args)
{
Connection con = null;
PreparedStatement st =null;
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/world","root","password");
String sql = "select * from city where id = 1";
st = con.prepareStatement(sql); <---- here the error is shown
ResultSet rs = st.executeQuery();
while(rs.next())
{
int id = rs.getInt("ID");
String Name = rs.getString("Name");
String CountryCode = rs.getString("CountryCode");
String District = rs.getString("District");
int Population = rs.getInt("Population");
System.out.println(id);
System.out.println(Name);
System.out.println(CountryCode);
System.out.println(District);
System.out.println(Population);
}
rs.close();
st.close();
con.close();
}catch(Exception e)
{
e.printStackTrace();
}finally
{
try{
if(st!=null)
st.close();
}catch(SQLException se2){
}
try{
if(con!=null)
con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
我主要得到以下错误:
--> PreparedStatement.java:4063 com.mysql.jdbc.PreparedStatement.toString()
--> PreparedStatement.java:587 com.mysql.jdbc.PreparedStatement.asSql()
--> PreparedStatement.java:591
com.mysql.jdbc.PreparedStatement.asSql(false)
java.lang.NullPointerException
at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:649)
at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:587)
at com.mysql.jdbc.PreparedStatement.toString(PreparedStatement.java:4068)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuffer.append(Unknown Source)
at com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240)
at com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167)
at com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126)
at com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45)
at com.mysql.jdbc.Connection.registerStatement(Connection.java)
at com.mysql.jdbc.Statement.<init>(Statement.java:270)
at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:500)
at com.mysql.jdbc.Connection.clientPrepareStatement(Connection.java:2187)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4829)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4734)
at Filereader.DBConnection.main(DBConnection.java:19)
--> Connection.java:2199 com.mysql.jdbc.Connection.close()
--> Connection.java:4892 com.mysql.jdbc.Connection.realClose(true, true, false, null)
--> Connection.java:4343 com.mysql.jdbc.Connection.isClosed()
代码中有什么错误?据我所知,为DB Connectivity编写的语句是正确的,Sql查询格式似乎也不错。看起来像JDBC驱动程序中的一个bug,您不可能从中得到异常。您使用的驱动程序JAR的版本是什么?有更新的版本吗?mysql-connector-java-5.0.8-bin-g.jar看起来您使用的是基于AspectJ的跟踪程序,它记录JDBC驱动程序执行的语句,并导致驱动程序出现此错误。是的,我的库中有aspectjrt-1.5.4.jar。我应该使用其他版本或其他JDBCJAR文件吗?还有一点-不要使用root用户进行查询,尤其是在web上。也就是说:创建单独的用户,并对其拥有有限的权限