2012-02-16 502 views
1

我已经在工作中分配了一个任务,但我是Java和Eclipse的初学者。 我必须重新使用现有的程序并修改它的某些部分。 以下部分一点儿也不工作:SQL语句 - 空指针异常

private java.sql.Connection conn; 
private final String sqlRequest = "select ... from ..."; 
//................ 

private void DBConnect(){ 
    try { 

     // Load the driver 
     java.lang.Class.forName(jdbcdriver).newInstance(); 
     // Connect to database 
     conn = java.sql.DriverManager.getConnection(jdbcURL,dbuser,dbpwd); 
     //................ 

private void search2() { 
    try  { 

     // create SQL statement 

     java.sql.Statement stmt = conn.createStatement();  //my line 135 
     java.sql.ResultSet rs = execRequest(stmt,sqlRequest);  
     //................ 

错误消息在日食:

"java.lang.NullPointerException at mon_prog.search2(mon_prog.java:135)" 

这部分使用前工作...所以是问题,因为我的JDK版本?我有JDK7u2

+0

你初始化了conn? – MByD 2012-02-16 09:59:03

+0

您是否在search2()之前调用了DBConnect()? – Arung 2012-02-16 10:45:46

+0

如果顶部的异常行是135,那么'conn'是'null'。我非常确定'getConnection'永远不会返回null,所以你不会调用'DBConnect'或者抛出一个丢失的异常。检查你的异常日志。 – Gray 2012-02-16 22:23:57

回答

0

第一获取连接... ..使用

Connection conn = DriverManager.getConnection(connection string); 

conn似乎空。

+0

是对不起,我也有这样的方法来连接到数据库: 私人无效数据库连接(){ \t \t尝试\t {// 加载驱动程序\t \t \t java.lang.Class.forName(jdbcdriver).newInstance( ); \t \t \t //连接到数据库 康恩= java.sql.DriverManager.getConnection(JDBCURL,DBUSER,dbpwd); ... – 2012-02-16 10:05:08

+0

@VincentCharrié:请加上你的问题。另外,你的135行mon_prog.java是什么? – 2012-02-16 10:07:42

0

看一看到如何从Java程序连接到MySQL数据库大Vogella教程(IDE中立的方式):http://www.vogella.de/articles/MySQLJava/article.html

例步骤连接到数据库:

  // This will load the MySQL driver, each DB has its own driver 
      Class.forName("com.mysql.jdbc.Driver"); 
      // Setup the connection with the DB 
      connect = DriverManager 
        .getConnection("jdbc:mysql://localhost/feedback?" 
          + "user=sqluser&password=sqluserpw"); 

      // Statements allow to issue SQL queries to the database 
      statement = connect.createStatement(); 
      // Result set get the result of the SQL query 
      resultSet = statement 
        .executeQuery("select * from FEEDBACK.COMMENTS"); 
0

设置断点上Class.forName()getConnection()调用DBConnect()和您的第135行,然后全部通过调试器运行。如果在尝试使用连接之前getConnection()没有得到执行,我不会感到惊讶。 (在那里,做到了,得到了源代码控制提交。)

如果不是这样,那么您可能还想仔细检查一下,您是否确实没有其他变量影响您的预期conn实例。 “去定义”对此非常有用;只要确保你在预期的地方结束。