写java代码遇到的一些问题
记录一些做论文实验写代码时遇到的问题。
数据库SQL语句方面:
1.java通过JDBC连接MySql数据库方法
参见:http://hzy3774.iteye.com/blog/1689525
2.出现错误java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
注意sql语句如果是查询,用executeQuery(),要对表产生修改的话则使用executeUpdate()
3.选取前N条数据时,sqlserver数据库用select top n from table order by class desc,而mysql数据库使用select * from table order by class desc limit n
4.sum()求和函数,注意sum和括号之间不能有空格
5.将一张大表分割成几个小表:CREATE TABLE weibo1 SELECT * FROM weibo ORDER BY mid LIMIT 1,3000000;
出现错误:[Err] 3 - Error writing file 'C:\Windows\TEMP\MY29' (Errcode: 28)。解决方案参见:www.111cn.net/database/mysql/45657.htm。我的问题是因为C盘空间不足
6.将数据导入Mysql,出现ERROR 1406 : Data too long for column 解决办法:
在my.ini里找到 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
把其中的STRICT_TRANS_TABLES,去掉,然后重启mysql就ok了。
重启Mysql方法:在CMD下,输入 net stop mysql 可以停止mysql,输入net start mysql可以启动mysql,先停止,再启动
java语句方面:
1.向量的定义。向量初始化不能使用Vector<String> orimid =null,会导致在像该向量添加元素时发生空指针错误。正确方法:Vector<String> orimid =new Vector<String>();
2.ArrayList和Vector的区别:Vector是同步的, 而ArrayList不是,因为Vector是同步的, 所以它是线程安全的。同样, 因为Vecotr是同步的, 所以他需要额外的开销来维持同步锁, 所以它要比ArrayList要慢.(理论上来说)
Vector允许用户设置capacityIncrement这样在每次需要扩充数组的size的时候, Vector会尝试按照预先设置的capacityIncrement作为增量来设置, 而ArrayList则会把数组的大小扩大一倍;如果capacityIncrement设为0或者负值, Vector就会做和ArrayList一样, 每次都将数组大小扩大一倍.
3.java.lang.OutOfMemoryError: Java heap space异常。因为要选择的表太大了,造成内存溢出。参考http://my.oschina.net/cimu/blog/175691。更改参数,在eclipse.ini中增加:
-Xms128M
-Xmx4096M
然而我的表太大了,还是溢出了,决定将该表分成几个小表。