添加到地图时的Java异常

时间:2011-12-07 10:07:24

标签: java map nullpointerexception

不确定有什么问题......它应该工作还是遗漏了什么?以下是代码:

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);
    }
}
}

错误出现在main方法的行中:

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

它给出了:

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

8 个答案:

答案 0 :(得分:8)

好像你永远不会实例化map。你在这里声明

static TreeMap<String, Integer> map;

但是当你在这里使用时,它仍然是null给你NullPointerException

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

如果你之前这样做

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

它应该运行良好。

答案 1 :(得分:3)

你在哪里初始化“地图”?看起来对我无效。

更改此行:

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

你声明这个并将其设置为null,但我看不到你在哪里使用它。

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向下移动,直到从驱动程序管理器获得连接为止。

您是否将Map序列化以将其插入数据库?这没有正常化。规范化架构每个条目都有一行。

我读的代码越多,它的意义就越小。祝你好运。

答案 2 :(得分:2)

您永远不会将map初始化为任何内容,因此它是null。您需要在某处为其分配有效的TreeMap<String, Integer>,例如在声明它时在第2行,请使用:

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

答案 3 :(得分:1)

变量map永远不会被初始化,只能在构造函数中声明。

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

答案 4 :(得分:1)

你只声明地图,但没有初始化

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

答案 5 :(得分:1)

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>();

答案 6 :(得分:1)

初始化变量Connection con = null; 然后你设置con.setAutoCommit(false).. 没有为此创建对象,你怎么能为它设置自动提交?

答案 7 :(得分:0)

你初始化地图对象,因为你在声明时初始化了localMap对象,只需检查