毕业设计里一个设计查词频的小玩意,最后要把词和词频写到数据库里。词频用的是HASH MAP,最后得到的key是String的,value是Object的,但已经转化成int了:
Integer l = (Integer)m.get(words[i]);
int n = l.intValue();
但就是无论如何也写不进数据库,下面是连数据库部分的代码达人救我。。泪奔。。://**********************DataBase Segment****************
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\hamtable.mdb";
Connection conn=DriverManager.getConnection(dburl);
Statement stmt=conn.createStatement();
for(i=0;i<words.length;i++)
{
String add = new String(words[i]);
String add1 = add.toString();
Integer l = (Integer)m.get(words[i]);
int n = l.intValue();
String query= "INSERT INTO ham" +
"VALUES(" + "'"+add1+"',"+n+")";
stmt.executeUpdate(query);
System.out.println("Successfully add word:"+words[i]+"and its frequency:"+m.get(words[i]));
}
System.out.println("Add process succesfully finished,table view will list as follow:");
ResultSet rs=stmt.executeQuery("select * from hamtable");
while(rs.next()){
System.out.println(rs.getInt(2)+"\t"+rs.getString(1)+"\t"+rs.getInt(3));
}
rs.close();
stmt.close();
conn.close();
//************************************************************* */
这是我统计词频部分的代码,请高手帮我分析下会不会是这段的问题? :
String[] words = new String[stringlength];
int i;
i =0;
File fileoutput = new File(FODER+outputfilename);
PrintWriter out = new PrintWriter(fileoutput);
File fileinput = new File(FODER+inputfilename);
Reader reader= new FileReader(fileinput);
Scanner scanner = new Scanner(reader);
System.out.println("The length of array"+words.length);
while(scanner.hasNext()){
words[i]= scanner.next();
System.out.println("successfully read"+words[i]+i);
i++;};
Map m = new TreeMap();
for(i=0; i<words.length;i++)
{ String str = new String(words[i]+"");
//String str= words[i];
Integer freq=(Integer)m.get(str);
/* To two lines above, I met a very streng problem,
* If I just use :
* Integer freq =(Integer)m.get(str);
* or
* String str= new String(words[i]);
* Integer freq = (Integer)m.get(str);
* or
* String str = words[i];
* Integer freq = (Integer)m.get(str);
*
* IDE will throw
* java.lang.NullPointerException
*
* But I just add A "" beside words[i], it'll work
* I don't know why so far.
* @date:12/4/2008
*/
System.out.println("word:"+words[i]+"'s word freq is processing, plz wait patiently.");
// m.get(Object object) returns a value of key: words[j], and make freq to point its address
if(freq == null)
{
freq = new Integer(1);
}else
{
freq = new Integer(freq.intValue()+1);
}
m.put(str, freq);
// put words freq into map.
}
System.out.println(m.size()+"distinct words detected.");
System.out.println(m);
//**********************************************************************************
其中中间那一段长长的注释也是一个让我百思不得其解的问题,本来我觉得没有问题的,类型也转化了,可就是在RUN-TIME抛出 java.lang.NullPointerException,可是我在后面加了一个" "就好了高手能顺带帮我解答了当然最好。感激不尽。
Integer l = (Integer)m.get(words[i]);
int n = l.intValue();
但就是无论如何也写不进数据库,下面是连数据库部分的代码达人救我。。泪奔。。://**********************DataBase Segment****************
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\hamtable.mdb";
Connection conn=DriverManager.getConnection(dburl);
Statement stmt=conn.createStatement();
for(i=0;i<words.length;i++)
{
String add = new String(words[i]);
String add1 = add.toString();
Integer l = (Integer)m.get(words[i]);
int n = l.intValue();
String query= "INSERT INTO ham" +
"VALUES(" + "'"+add1+"',"+n+")";
stmt.executeUpdate(query);
System.out.println("Successfully add word:"+words[i]+"and its frequency:"+m.get(words[i]));
}
System.out.println("Add process succesfully finished,table view will list as follow:");
ResultSet rs=stmt.executeQuery("select * from hamtable");
while(rs.next()){
System.out.println(rs.getInt(2)+"\t"+rs.getString(1)+"\t"+rs.getInt(3));
}
rs.close();
stmt.close();
conn.close();
//************************************************************* */
这是我统计词频部分的代码,请高手帮我分析下会不会是这段的问题? :
String[] words = new String[stringlength];
int i;
i =0;
File fileoutput = new File(FODER+outputfilename);
PrintWriter out = new PrintWriter(fileoutput);
File fileinput = new File(FODER+inputfilename);
Reader reader= new FileReader(fileinput);
Scanner scanner = new Scanner(reader);
System.out.println("The length of array"+words.length);
while(scanner.hasNext()){
words[i]= scanner.next();
System.out.println("successfully read"+words[i]+i);
i++;};
Map m = new TreeMap();
for(i=0; i<words.length;i++)
{ String str = new String(words[i]+"");
//String str= words[i];
Integer freq=(Integer)m.get(str);
/* To two lines above, I met a very streng problem,
* If I just use :
* Integer freq =(Integer)m.get(str);
* or
* String str= new String(words[i]);
* Integer freq = (Integer)m.get(str);
* or
* String str = words[i];
* Integer freq = (Integer)m.get(str);
*
* IDE will throw
* java.lang.NullPointerException
*
* But I just add A "" beside words[i], it'll work
* I don't know why so far.
* @date:12/4/2008
*/
System.out.println("word:"+words[i]+"'s word freq is processing, plz wait patiently.");
// m.get(Object object) returns a value of key: words[j], and make freq to point its address
if(freq == null)
{
freq = new Integer(1);
}else
{
freq = new Integer(freq.intValue()+1);
}
m.put(str, freq);
// put words freq into map.
}
System.out.println(m.size()+"distinct words detected.");
System.out.println(m);
//**********************************************************************************
其中中间那一段长长的注释也是一个让我百思不得其解的问题,本来我觉得没有问题的,类型也转化了,可就是在RUN-TIME抛出 java.lang.NullPointerException,可是我在后面加了一个" "就好了高手能顺带帮我解答了当然最好。感激不尽。
而你在后面加上空串"",那么它就不是空了,也就不会报空指针异常了
for(i=0; i <words.length;i++)
{ String str = new String(words[i]+""); // 你说的加""是指这里吗?还有,把异常信息完整的拷过来吗?
words[i]= scanner.next();
System.out.println("successfully read"+words[i]+i);
i++;}; 这块代码执行的时候 输出的words[i]里有没有值??
null + "" 结果就是"null",调用此字符串当然不会出现空指针异常了
确定你写入库之前保证所传入值是否为空或者只是""