1

以下のコードを使用して一時テーブルに挿入して選択しようとしています...実行すると、NullPointer例外が発生します...何が問題なのかわかりません..mysqlドライバーでも同じことがうまくいきます..どちらの場合もjdbcを使用しています

package mysql.first;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MSSqlAccess {
    private Connection connect = null;
    private Statement statement = null;
    private PreparedStatement preparedStatement = null;
    private int dmlresultSet = 0;
    private ResultSet ddlresultSet = null;
    /**
     * @param args
     */

    public static void main(String[] args) throws Exception {
         MSSqlAccess dao = new MSSqlAccess();
            //dao.readDataBase();
         dao.createtemptable();
      }

    public void createtemptable() throws Exception{

          try
          {
              // This will load the MySQL driver, each DB has its own driver
              Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
              // Setup the connection with the DB

              String db_connect_string = "jdbc:sqlserver://localhost";
              String db_userid = "Test";
              String db_password ="test";

              Connection connect = DriverManager.getConnection(db_connect_string
                     ,db_userid, db_password);

              connect.setAutoCommit(false);

              // Statements allow to issue SQL queries to the database
              statement = connect.createStatement();
              // Result set get the result of the SQL query

              String sql = "CREATE TABLE #REGISTRATION " +
                      "(id INTEGER not NULL, " +
                      " first VARCHAR(255), " + 
                      " last VARCHAR(255) )"; 

              dmlresultSet = statement
                  .executeUpdate(sql);

              System.out.println("Temp table created return code = " + dmlresultSet);

              insertRows(1,"FNAME1","LNAME1");
              selectRows();
              insertRows(2,"FNAME2","LNAME2");
              selectRows();
              updateRows();
              selectRows();
              insertRows(3,"FNAME3","LNAME3");

          }
          catch (Exception e){
              System.out.println("Error = " + e);
                throw e;  
          } finally{
              close();
          }

      }

      private void insertRows(int id, String first, String last) throws SQLException {
          System.out.println(id);
          System.out.println(first);
          System.out.println(last);
          preparedStatement = connect
                  .prepareStatement("insert into  REGISTRATION values (?, ?, ?)");

          preparedStatement.setString(2, first);
          preparedStatement.setString(3, last);
          preparedStatement.setInt(1, id);
          preparedStatement.executeUpdate();

      }

      private void selectRows() throws SQLException {
          preparedStatement = connect
                  .prepareStatement("SELECT id, first, last from REGISTRATION");
          ddlresultSet = preparedStatement.executeQuery();
          writeResultSet(ddlresultSet);

      }

      private void updateRows() throws SQLException {
          preparedStatement = connect
                  .prepareStatement("Update REGISTRATION set first = 'RENAMED' WHERE ID = 1");
          dmlresultSet = preparedStatement.executeUpdate();
      }

      private void writeResultSet(ResultSet resultSet) throws SQLException {
          System.out.println("                                                        ");
          System.out.println("*****           Printing the Rows                  *****");
            // ResultSet is initially before the first data set
            while (resultSet.next()) {
              // It is possible to get the columns via name
              // also possible to get the columns via the column number
              // which starts at 1
              // e.g. resultSet.getSTring(2);
              int id = resultSet.getInt("id");
              String first = resultSet.getString("first");
              String last = resultSet.getString("last");
              System.out.println("ID: " + id);
              System.out.println("First: " + first);
              System.out.println("Last: " + last);

            }
          }

  // You need to close the resultSet
    private void close() {
    try {
      if (ddlresultSet != null) {
        ddlresultSet.close();
      }

      if (statement != null) {
        statement.close();
      }

      if (connect != null) {
        connect.close();
      }
    } catch (Exception e) {

    }
  }

}

4

1 に答える 1

7

「insertRows」では、初期化されないクラス変数「connect」でメソッドを呼び出します。それ以外の:

Connection connect = DriverManager.getConnection(db_connect_string ,db_userid, db_password);

行う:

this.connect = DriverManager.getConnection(db_connect_string ,db_userid, db_password);

これでうまくいくはずです。

于 2013-07-16T21:02:54.500 に答える