当前页面: 开发资料首页 → J2EE 专题 → 求教几个Hibernate函数和一个Java函数,网上找了找,好象都没有什么资料
求教几个Hibernate函数和一个Java函数,网上找了找,好象都没有什么资料
摘要: 求教几个Hibernate函数和一个Java函数,网上找了找,好象都没有什么资料
Hibernate:
1.在写hql语句时候,怎么把字符型field转换成数字型字段.
2.怎么把日期型字段转换成字符型字段
Java:
1.有没有左填充和右填充函数.
谢谢.
你的这些问题。。。你是要修改数据库里面的结构还是要把取到的field进行类型转换?
如果是后者
可以用
Float.valueOf(String) 一类的函数来做到。
Date类里面有很多日期转换函数。Date.toString() 就可以把日期转换为字符串。
所谓的左填充和右填充~~~ 是什么意思?String有各种添加删除操作,如果只是加上几个字符的话
只要
String str = "######"+str;// 这就是左填充??? 呵呵
呵呵,我的左填充指的是一个字符串在不满足一个长度的时候就直接在左边或者右边用一个字符去填充。
就好象oracle里面的lpad一样。
问题:
我想实现的就是截取substr(moduleid,-3,3),然后转换成数字型,再取max值,不知道在hibernate里面用hql语句怎么去实现.
在oracle里面用sql语句是这样实现的
select max(to_number(substr(module,-3,3))) from sys_module;
怎么转化成hql语句.
1.写HQL之前转:
Float.parseFloat(String),Integer.parseInt(String)。
在Hql中转:
to_number('1999')
2.Date.toString() .
不了解具体的填充是指什么
填充就是:如下例
我数据库里面有字段moduleid,此值的长度必须是6位
如果我给这个字段赋值的时候值的长度不足六位那么我就用一字符填充。(比如我用0来代替)
9.RPAD和LPAD(粘贴字符)
RPAD 在列的右边粘贴字符
LPAD 在列的左边粘贴字符
SQL> select lpad('1',6,'0') from dual; (oracle里面的写法)
lpad('1',6,'0')
-----------------
000006
不够字符则用0来填满
String这个class完全满足你的这个简单的要求。只不过你可能要写几行代码。
上面两位说的,我调试通不过啊。
我的hql语句:
String hql = "select Integer.parseInt(moduleid) from SysModule where parentid = ?";
用Integer.parseInt(String)报下面的错误。
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.MethodNode
/-[METHOD_CALL] MethodNode: '('
/-[METHOD_NAME] SqlNode: 'exprList'
/-[IDENT] IdentNode: 'moduleid' {originalText=moduleid}
at org.hibernate.hql.ast.SelectClause.initializeExplicitSelectClause(SelectClause.java:136)
at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:440)
at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:351)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.afterQuery(HqlSqlBaseWalker.java:126)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:471)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:201)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:151)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:189)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:130)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:427)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:834)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:826)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:365)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:817)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:813)
at com.ems.business.spring.dao.imp.SysModuleDAO.getModuleId(SysModuleDAO.java:31)
at com.ems.test.testQ.testclass(testQ.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
-------------------------------------------------------------------------------------
我的hql语句
String hql = "select Float.valueOf(moduleid) from SysModule where parentid = ?";
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.MethodNode
/-[METHOD_CALL] MethodNode: '('
/-[METHOD_NAME] SqlNode: 'exprList'
/-[IDENT] IdentNode: 'moduleid' {originalText=moduleid}
at org.hibernate.hql.ast.SelectClause.initializeExplicitSelectClause(SelectClause.java:136)
at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:440)
at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:351)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.afterQuery(HqlSqlBaseWalker.java:126)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:471)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:201)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:151)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:189)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:130)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:427)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:834)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:826)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:365)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:817)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:813)
at com.ems.business.spring.dao.imp.SysModuleDAO.getModuleId(SysModuleDAO.java:31)
at com.ems.test.testQ.testclass(testQ.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
汗,兄弟啊。Integer不是这么用的。。。他不能嵌入到Sql里面。。。需要得到结果集以后再进行转化。。。
但我必须先转换了,本来这就是hql处理的问题。
怎么把这句sql语句给转换成hql语句。
在oracle里面用sql语句是这样实现的
select max(to_number(substr(module,-3,3))) from sys_module;