Java исключение при добавлении на карту - PullRequest
0 голосов
/ 07 декабря 2011

Не уверен, что не так ... это должно работать или, может быть, что-то упустил? следующий код:

public class TestOracleMap implements java.io.Serializable{
static TreeMap<String, Integer> map;
static TreeMap<String, Integer> localMap = new TreeMap<String, Integer>();

public static void StoreMapInDB(TreeMap<String, Integer> map) throws
        IOException, FileNotFoundException{
    try {
  PreparedStatement insertMap = null;
  //String insertString = "INSERT INTO TESTMAP(ID, MPFIELD) VALUES (1, ?)";
  Connection con=null;
  con.setAutoCommit(false);
  Class.forName("oracle.jdbc.driver.OracleDriver");
  con=DriverManager.getConnection(
    "jdbc:oracle:thin:@oXXX",
    "XXX",
    "XXX");

  ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
  ObjectOutputStream out = new ObjectOutputStream(bos);
  out = new ObjectOutputStream(bos) ;
  out.writeObject(map);
  out.close();

  byte[] buf = bos.toByteArray();
  PreparedStatement prepareStatement = con.prepareStatement("insert into  

  TESTMAP(ID,MAPFIELD)values(?,?)");
  prepareStatement.setLong(1, 1);
  prepareStatement.setBinaryStream(2, new ByteArrayInputStream(buf), buf.length);



 // insertMap.executeUpdate();
  con.commit();
    } catch(Exception e){e.printStackTrace();}
}

public static void main(String[] args)
{
    try{
    DateTime today = new DateTime();
    int x = 1;
    map.put("Hello!", x);
    StoreMapInDB(map);
    }catch(IOException ioe){
        System.err.print(ioe);
    }
}
}

ошибка в главном методе:

map.put("Hello!", x);

дает:

Exception in thread "main" java.lang.NullPointerException
at core.smd.classes.TestOracleMap.main(TestOracleMap.java:61)
 Java Result: 1

Ответы [ 8 ]

8 голосов
/ 07 декабря 2011

Похоже, вы никогда не создаете экземпляр map.Вы объявляете это здесь

static TreeMap<String, Integer> map;

, но когда вы используете его здесь, оно все еще null дает вам NullPointerException.

map.put("Hello!", x);

Если вы сделаете это раньше

map = new TreeMap<String, Integer>();

должно работать нормально.

3 голосов
/ 07 декабря 2011

Где вы инициализировали "карту"? Мне кажется, ноль.

Изменить эту строку:

static TreeMap<String, Integer> map = new TreeMap<String, Integer>();

Вы объявляете это и устанавливаете это в нуль, но я не вижу, где вы используете это.

PreparedStatement insertMap = null;

У вас впереди еще боль в сердце:

Connection con=null;
  Class.forName("oracle.jdbc.driver.OracleDriver");
  con=DriverManager.getConnection(
    "jdbc:oracle:thin:@oXXX",
    "XXX",
    "XXX");
  con.setAutoCommit(false);

Перемещайте autoCommit вниз до тех пор, пока не получите соединение от диспетчера драйверов.

Вы сериализуете Карту, чтобы ВСТАВИТЬ ее в базу данных? Это не нормализовано. Нормализованная схема будет иметь строку для каждой записи.

Чем больше я читаю ваш код, тем меньше в нем смысла. Удачи.

2 голосов
/ 07 декабря 2011

Вы никогда не инициализируете map ни к чему, следовательно, это null.Вам нужно будет присвоить ему действительный TreeMap<String, Integer> где-нибудь, как, например, в строке 2, когда вы объявляете его, используйте:

static TreeMap<String, Integer> map = new TreeMap<String, Integer>();
1 голос
/ 07 декабря 2011

Вы инициализируете переменную Connection con = null; тогда вы устанавливаете con.setAutoCommit (false) .. Без создания объекта для этого, как вы можете установить автоматическую фиксацию для этого?

1 голос
/ 07 декабря 2011
static TreeMap<String, Integer> map = new TreeMap<String, Integer>(); // <-- in your code, you're not constructing it
static TreeMap<String, Integer> localMap = new TreeMap<String, Integer>();
1 голос
/ 07 декабря 2011

вы только объявляете карту, но не инициализируете ее

static TreeMap<String, Integer> map=new HashMap<String,Integer>();
1 голос
/ 07 декабря 2011

карта переменных никогда не инициализируется, только объявляется в конструкторе.

map = new TreeMap<String, Integer>();
0 голосов
/ 07 декабря 2011

вы инициализировали объект карты при инициализации объекта localMap при объявлении, просто проверьте, что

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...