【java&数据库】写冰川立方体中遇到的问题及解决
来源:互联网 发布:unity3d 5.0教程 编辑:程序博客网 时间:2024/04/28 23:25
<写在前面>
师兄那么好,冰川的实验我都不好意思拖了,可是还是因为重感冒一周,从4月20号左右,拖到今天(都5月了),还没完成,觉得很荽。神牛说,进去好好表现,早点出来。。。我这表现,也太懒了。。我有点受不了。。
平时做题做惯了,而且也都用的c++,notepad++ && g++,no IDE,但是这次是要操作数据库的,还要用java写,本来就对java没怎么用不熟。师兄本来说的是用sqlsever,结果被我弄了好久,下了几个sqlsever的用不起,连个excel的表格都导不进去,我真是笨啊。。。总之,搭环境用了好久,觉得好麻烦,可能真是有点笨。。。最后还是没能征服sqlsever,用的access(这个在上学期写数据库课程设计的时候用的,还算比较熟悉,而且本来这个就比较简单以至于不专业。。。)
中途遇到问题,可能是我search能力比较弱吧,网上看到的老是解决不了手边的问题,各种书堆着桌上,页页摸索,终于差不多都解决了。
现在写在blog上,看上去好像都是简单的问题,作为java菜菜,解决的过程中还是碰壁很多的。。呜啦啦。。。
<废话结束>
写个全名吧。OLGP的透析查询的初期物化过程中,作为没碰过项目一直g++的娃,在java中遇到的问题及解决
1.Access数据库导入excel表格用作数据库的表并建立与数据库的连接
先在Access中建一个数据库,明个名字(如ACM),在ACM数据库中新建表,选导入,从excel。就可以从excel中导入数据表了。注意Access与excel的版本。再连odbc数据源,再java project中写上连接Access数据库的代码就ok了。
/*make a connection between Access database and java application*/public static Connection getConnection() {Connection conn = null;try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:数据源名","xl","123");}catch(ClassNotFoundException e){e.printStackTrace();System.exit(1);}catch(SQLException e){e.printStackTrace();}return conn;}
Connection con = getConnection();/*create a connection */这一句是写在main方法里面的
2.java代码对数据表的操作,当表的某些字段可以为空时,怎样判断是空
1)Statement stmt = con.createStatement();
String sql = "select * from Student";
ResultSet rs = stmt.executeQuery(sql);
这样就可以执行sql代码了
2)用rs.wasNull()的false或true来判断刚取的值是否为null,即某字段是否为空(有没觉得java实现这个判空功能有点蠢。。。我都无语了。。。这纯属先犯错再发现。。。)
3.在使用Map类时,如果要实现对key值的判重,需要override(注意是覆写,不是重载)hashCode()和equals(),例如:
class co {int a;int b;co(int x,int y){this.a=x;this.b=y;}co(){}public int geta(){return a;}public int getb(){return b;}//@Overridepublic int hashCode(){int hash ;hash = (geta()*getb()*1013+geta()+getb())%20341;//我随便计算的。这个hash值可以随意计算的,Object类的hashCode计算hash值与地址有关,所以不能直接在自己的类中继承Object类中的实现,否则达不到判重的效果。并且hashcode()和equals()应注意和谐一致。return hash;}//@Override public boolean equals(Object o){boolean res = ((o instanceof co) && ((co)o).a==a && ((co)o).b==b);return res;}}
4.sql查询的结果集ResultSet rs = stmt.executeQuery(...)
要注意游标问题,rs并未指向一个合法的游标,合法的游标是从rs.next()开始的,经常写while(rs.next())那是rs的记录不止一条时,但也可见其是从rs.next开始取第一条的,今天我碰到一个rs只有一条记录的查询,我没写rs.next,直接使用的rs来读,就一直报错(无效的游标状态)
另外,在有不确定参数的查询时,可以使用PreparedStatement pstmt = con.preparedStatement(sql);
其中sql 可写为,例如 sql="select name from Student where id =?";此处?表示一个不确定的值,由pstmt.SetInt(1,id)来填充,1表示第一个出现?的地方替换成id,若有n个问号,以此类推,setxxx方法,其中的xxx是?处的类型(int,long,string神马的)。
当然也可以用Statement stmt=con.createstatement();中,stmt.excuteQuery()来实现。sql语句则应写成sql="select name from Student where id=",再在stmt.executeQuery(sql+id);来实现相同的功能。我对java不熟,看网上说pstmt比stmt快很多。
5.java中使用Vector
java这玩意,神马都是类,Vector也是咯,所以它的使用与c++的stl中的vector还是略有不同,作为对java各种不熟的人,还是压力很大。每对vector的对象进行一次操作(插入、或者读取)一个元素,都是使用对象去调用vector类的方法,例如addElement()或者get()等。但是要注意,在判断一个vector的size时,这个size,如果对于一个vector数组的话,是你预先定义的数组大小,而不是你当前vector中的实际元素个数,所以需要调用一个方法.trimToSize方法,来把当前vector中空的部分先去掉,剩下当前vector中确实存在的元素,再用.size就可以求出来实际元素个数了。
结束
另外,貌似也没啥了。晚上写完的。总之,感觉java这东西,还是没人们吹嘘的那么简单的,它还是有很多实现很巧妙和靠谱的地方 。遇到问题,周围熟的搞java的人也不多,所以多半都是自己去上网查或者书上查,但,问题吧,总归还是能解决的。ps操作数据库,读入数据表真的是很慢诶。。总共一张表扫描时12499条记录,活生生地跑了好久没出来,我都看了一集动漫了有没有。。。做acm的哪里能忍受这个速度,我直接怀疑它RE了。。师兄说,这很正常。。。⊙﹏⊙b汗
- 【java&数据库】写冰川立方体中遇到的问题及解决
- java转web项目中遇到的问题及解决
- TankWar中遇到的问题及解决
- java写excel文件及遇到的问题
- JAVA WEB START 在项目中遇到的问题及解决
- Redhat中Oracle9i启动时遇到的问题及解决
- vc#.net2005开发中遇到的小问题及解决
- Thinkphp开发项目过程中遇到的问题及解决
- 技术管理中遇到的一些问题及初步解决想法
- libgdx - 开发中遇到的问题及解决
- android 开发中遇到的问题及解决方式
- 项目中遇到的问题及解决思路
- JavaScript开发过程中遇到的问题及解决
- 开发中遇到的CSS相关问题及解决
- TestLink安装过程中遇到的问题及解决
- 利用codeception过程中遇到的问题及解决方式
- swift实际使用中遇到的问题及解决
- swift实际使用中遇到的问题及解决(2)
- Linux系统中关于文件编码以及编码的转换
- android 打电话的例子
- Sql生成表名实体类
- ARM-交叉编译器各版本的区别
- java 网络编程【7】 如何检测和解决端口冲突问题?
- 【java&数据库】写冰川立方体中遇到的问题及解决
- Android中当Logcat记录不到程序运行信息时,如何让Logcat重新工作?
- sfsefsefsefsefsefse
- stm32 fsmc 功能讲解
- webkit Bug问题定位
- Linux环境编程--多线程
- 在mac上使用github--设置git
- Oracle读书笔记-----PL/SQL编程(三)之游标
- Android Notifition的使用方法