不确定有什么问题......它应该工作还是遗漏了什么?以下是代码:
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
答案 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对象,只需检查