0

次のコードはエラーを表示せず、コードは実行されますが、rfv で計算および保存されたデータはデータベースで更新されません。

try{
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  com.mysql.jdbc.Connection con = (com.mysql.jdbc.Connection)  DriverManager.getConnection("jdbc:mysql://localhost:3308/rk","root","root");
  ResultSet rsfact=null;
  PreparedStatement psfact=(PreparedStatement) con.prepareStatement("SELECT * FROM fact");
  PreparedStatement psgraph=(PreparedStatement) con.prepareStatement("INSERT INTO graph values(?,?,?,?)");
  int cp,ic,rc,fi,ct,tr;
  while(rsfact.next())
  {
      cp=rsfact.getInt("1");
      ic=rsfact.getInt("2");
      rc=rsfact.getInt("3");
      fi=rsfact.getInt("4");
      ct=rsfact.getInt("5");
      tr=rsfact.getInt("6");
      int rfv;

      rfv=(cp+ic+rc+fi+ct+tr)/6;
      graph.setInt(1, rfv);
      graph.executeUpdate();
  }
 }
 catch(Exception e){
 System.out.println(e);
 }

コードをチェックしたところ、すべて問題ないように見えましたが、データがテーブルに挿入されていない理由がわかりませんでした。これが実行されると、次のようになります

java.lang.NullPointerException

 try{
   Class.forName("com.mysql.jdbc.Driver").newInstance();
    com.mysql.jdbc.Connection con = (com.mysql.jdbc.Connection)        DriverManager.getConnection("jdbc:mysql://localhost:3308/rk","root","root");
   ResultSet rsfact=null;
  ResultSet rsfault=null;
  ResultSet rspriority=null;
  ResultSet rsreq=null;
  PreparedStatement psfact=(PreparedStatement) con.prepareStatement("SELECT * FROM fact");
  PreparedStatement psfault=(PreparedStatement) con.prepareStatement("SELECT * FROM fault");
  PreparedStatement pspriority=(PreparedStatement) con.prepareStatement("SELECT * FROM priority");
  PreparedStatement psreq=(PreparedStatement) con.prepareStatement("SELECT * FROM req");
  PreparedStatement graph=(PreparedStatement) con.prepareStatement("INSERT INTO gr values(?)");
  int cp,ic,rc,fi,ct,tr;
  rsfact = psfact.executeQuery();
  rsfault=psfault.executeQuery();
  rspriority=pspriority.executeQuery();
  rsreq=psreq.executeQuery();
  while(rsfact.next())
  {
      cp=rsfact.getInt(1);
      ic=rsfact.getInt(2);
      rc=rsfact.getInt(3);
      fi=rsfact.getInt(4);
      ct=rsfact.getInt(5);
      tr=rsfact.getInt(6);
      int rfv;

      rfv=(cp+ic+rc+fi+ct+tr)/6;
      graph.setInt(1, rfv);
      graph.executeUpdate();
  }
  while(rsfault.next()){
  cp=rsfact.getInt(1);
      fic=rsfact.getInt(2);
      frc=rsfact.getInt(3);
      ffi=rsfact.getInt(4);
      fct=rsfact.getInt(5);
      ftr=rsfact.getInt(6);
      int tsfv;

      tsfv=((fcp*2)+(fic*3)+(frc*4)+(ffi*3.14)+(fct-4)+(ftr+9))/6;
      graph.setInt(2, tsfv);
      graph.executeUpdate();

  }
 }
4

1 に答える 1

1

あなたは rsfact(ResultSet object) を開始しておらず、結果セットのメソッドを呼び出そうとしているので、NULLPOINTEREXCEPTIONです。

    ResultSet rsfact=null; // **rsfact is null**
       int colCount=1;
      PreparedStatement psfact=(PreparedStatement) con.prepareStatement("SELECT * FROM fact");
      PreparedStatement psgraph=(PreparedStatement) con.prepareStatement("INSERT INTO graph values(?,?,?,?)");
      int cp,ic,rc,fi,ct,tr;
      rsfact = psFact.executeQuery(); **// this instantiates ResultSet, if you dont includee this statement rsfact would still be null.**
while(rsfact.next()) // **if rsfact null and u execute this line it would throw nullpointer exception(cuz rsfact is null)**
  {
      cp=rsfact.getInt("1");
      ic=rsfact.getInt("2");
      rc=rsfact.getInt("3");
      fi=rsfact.getInt("4");
      ct=rsfact.getInt("5");
      tr=rsfact.getInt("6");
      int rfv;

      rfv=(cp+ic+rc+fi+ct+tr)/6;
      graph.setInt(colCount, rfv);
       colCount++;
}
      graph.executeUpdate();
于 2012-09-28T19:31:45.227 に答える