我用java动态统计一段文本中英文单词和汉字的数量,并计算出一些值出来。关键的2个方法如下:
public void updateDB(String text,int flag) throws Exception
{
ps=conn.prepareStatement("select word from stat where word=?");
ps.setString(1,text);
rs=ps.executeQuery();
if(rs.next())
{
if(flag==1)
{
ps=conn.prepareStatement("update stat set num2=num2+1 where word=?");
}
else
{
ps=conn.prepareStatement("update stat set num1=num1+1 where word=?");
}
ps.setString(1,text);
ps.executeUpdate();
}
else
{
if(flag==1)
{
ps=conn.prepareStatement("insert into stat(word,num2) values(?,?)");
}
else
{
ps=conn.prepareStatement("insert into stat(word,num1) values(?,?)");
}
ps.setString(1,text);
ps.setInt(2,1);
ps.executeUpdate();
}
} public void compute() throws Exception
{
int sum1=0;
int sum2=0;
ps=conn.prepareStatement("select sum(num1) as sum1 from stat");
rs=ps.executeQuery();
if(rs.next()) sum1=rs.getInt("sum1");
ps=conn.prepareStatement("select sum(num2) as sum2 from stat");
rs=ps.executeQuery();
if(rs.next()) sum2=rs.getInt("sum2");
float sum1f=sum1/2.0f;
float sum2f=sum2/2.0f;
ps=conn.prepareStatement("select word,num1,num2  from stat");
rs=ps.executeQuery();
while(rs.next())
{
String word=rs.getString("word");
System.out.println("word="+word);
int num1=rs.getInt("num1");
int num2=rs.getInt("num2");
float f1=num1/sum1f;
float f2=num2/sum2f;
float f;
if(num2==0) f=0.0f;
else f=f2/(f1+f2);
stmt.addBatch("update stat set good="+f1+",bad="+f2+",probability="+f+" where word='"+word+"'");
}
stmt.executeBatch();
}
我这个程序是application,由于MySQL数据库没可视化工具,我用jsp来查看stat表的内容,以表格的方式显示在html页面上。开始的时候,一点问题也没有,统计的很好,但后来就不行了,有时从html页面看汉字是正确的写进数据库了(页面的编码为GBK),有时显示的则是乱码。我就用5个汉字测试的,其中有2个是一样的。但不管是乱码还是不是乱码,统计信息总是不对,除了第一行的生成的那个总和之外。我的程序运行时,在java程序里给stat表的word项时有问题,感觉是空值,因为统计信息中关于word项的一个也没有,发生异常了,一声sql语法不对:update stat set good="+f1+",bad="+f2+",probability="+f+" where word='"+word+"'"就是这个的最后没取到值,即系统是word=''。不知这个问题,怎么解决。请大家帮忙!

解决方案 »

  1.   

    不知道你word这个值取到了没有。
      

  2.   

    我意思是说你在sql执行之前,word有值没有。
      

  3.   

    是乱码,我用JTextField取得word字段的值为:
    ᄀᄂᄀᄃチ0ヌ0チ0ノ0チ0ニ1チ0ト7チ0ヌ0チ0ヌ7ᄋ따ᅱᄍᆭᅡ￉
      

  4.   

    jdbc:mysql://localhost:3306/你的数据库名?user=用户名&password=密码&useUnicode=true&characterEncoding=gbk
    用这个试试吧。
      

  5.   

    &useUnicode=true&characterEncoding=gbk
    这个加在URL上是关键.