毕业设计测试中遇到Exception in thread "main" java.lang.StringIndexOutOfBoundsException:

u010839098 2013-06-09 10:28:52

package aa;

import maimai.pojo.Users;

import org.hibernate.Session;

import com.session.local.HibernateSessionFactory;
import pagination.*;


public class Ceshi extends Pagination {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session=HibernateSessionFactory.getSession();
Ceshi ce=new Ceshi();
ce.setSQL("select *from Users ");
System.out.println(ce.getPage(1));
System.out.println(ce.getPagesCount());
System.out.println(ce.getRowsCount());
}
}

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1932)
at java.lang.String.substring(String.java:1905)
at pagination.Pagination.countRows(Pagination.java:59)
at pagination.Pagination.setSQL(Pagination.java:30)
at aa.Ceshi.main(Ceshi.java:20)
...全文
1353 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010839098 2013-06-12
  • 打赏
  • 举报
回复
是我的spring没注入成功!
这是我的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

<!--<context:annotation-config />
<context:component-scan base-package="com.ribbonchen.*" /> -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="TestAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="select*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="count*" read-only="true"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="apply*" propagation="REQUIRED"/>
<tx:method name="do*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 配置参与事务的类 -->
<aop:config>
<aop:pointcut id="allTestServiceMethod" expression="execution(* com.test.testAda.test.model.service.*.*(..))"/>
<aop:advisor pointcut-ref="allTestServiceMethod" advice-ref="TestAdvice" />
</aop:config>
<!-- 配置DAO的实现类 -->
<bean id="adminAdo" class="iDao.AdminImpl">
<property name="transactionManager" ref="transactionManager"/>
</bean>
<bean id="goodAdmin" class="iDao.GoodImpl">
<property name="transactionManager" ref="transactionManager"/>
</bean>
<bean id="userDao" class="iDao.UserImpl">
<property name="transactionManager" ref="transactionManager"/>
</bean>
<bean id="categoryDao" class="iDao.CategoryImpl">
<property name="transactionManager" ref="transactionManager"/>
</bean>
<bean id="messageDao" class="iDao.MessageImpl">
<property name="transactionManager" ref="transactionManager"/>
</bean>
<!--配置action 类 -->
<bean id="usersAdmin" class="Actionservers.UserAdmin">
<property name="uado" ref="userDao"/>
</bean>

</beans>
辛苦各位找出错误!
u010839098 2013-06-11
  • 打赏
  • 举报
回复
这个测试类的问题解决了,测试的目的就是uado.setSQL()方法有问题没。但在测试类中这个setSQL()方法测试通过了,但在Action类中这个uado.setSQL()方法总出现空指针异常!我的毕业设计就卡在这里了! 问题如下: package Actionservers; import iDao.UserImpl; import java.util.List; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; public class UserAdmin extends ActionSupport { /** * */ //private static final long serialVersionUID = 1L; private UserImpl uado; private int userId; private String username; private String password; private String mobile; private String email; public void setUado(UserImpl uado) { this.uado = uado; } public int getUserId() { return this.userId; } public void setUserId(int userId) { this.userId = userId; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public String getMobile() { return this.mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } public String execute() { ActionContext context = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest)context.get(ServletActionContext.HTTP_REQUEST); String action = request.getParameter("action"); if (action.equals("0")) { int pageNo = 1; String sql="select * from Users"; uado.setSQL(sql); String strPage = request.getParameter("jumpPage"); if (strPage != null) { pageNo = Integer.parseInt(strPage); } List users =uado.getPage(pageNo);// 获取当前页码的用户记录 request.setAttribute("users", users); request.setAttribute("pageSize", uado.pageSize);// 每页显示的行数 request.setAttribute("rowscount", uado.getRowsCount());// 总记录数 request.setAttribute("pageno", pageNo);// 当前页码 request.setAttribute("pagescount",uado.getPagesCount());// 总页数 } return SUCCESS; } } java.lang.NullPointerException Actionservers.UserAdmin.execute(UserAdmin.java:70) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs. 感谢您的解决!
孟子E章 2013-06-11
  • 打赏
  • 举报
回复
StringIndexOutOfBoundsException 的意思是索引超出了字符串长度 你可以跟踪下,找到哪行出错的
u010839098 2013-06-10
  • 打赏
  • 举报
回复
加空格了 !这是我的数据库分页基类 package pagination; import java.util.List; import org.springframework.orm.hibernate3.HibernateTransactionManager; import com.session.local.HibernateSessionFactory; /** * @author * */ public abstract class Pagination { private String sql; public final int pageSize=2; // 每页显示的行数 private int rowsCount; // 总行数 private int pagesCount; // 总页数 private HibernateTransactionManager transactionManager; public void setTransactionManager(HibernateTransactionManager transactionManager) { this.transactionManager=transactionManager; } // 在设置SQL语句时计算总行数和总页数, // 这样总行数只要查询一次,可以提高效率! public void setSQL(String sql) { this.sql=sql; this.rowsCount = 0; this.pagesCount = 0; // 获取总行数并计算总页数 this.rowsCount = countRows(); this.pagesCount = countPages(); } public String getSQL() { return sql; } public int getRowsCount() { return rowsCount; } public int getPagesCount() { return pagesCount; } public List<?> getPage(int page) { List<?> list = HibernateSessionFactory.getSession().createQuery(this.sql) .setFirstResult((page-1)*pageSize) .setMaxResults(pageSize) .list(); return list; } //计算总记录数 private int countRows() { String countSql = this.sql; int fromPos = countSql.indexOf(" from "); countSql = countSql.substring(fromPos); countSql = "select count(*) " + countSql; List<?> list= HibernateSessionFactory.getSession().createQuery(countSql).list(); int count =(Integer)list.get(0); return count; } // 计算总页数 private int countPages() { if ((rowsCount % pageSize) == 0) { return rowsCount / pageSize; } else { return (rowsCount /pageSize + 1); } } } 它调用的是那个setSQL()方法
孟子E章 2013-06-09
  • 打赏
  • 举报
回复
ce.setSQL("select *from Users "); 应该加空格,写成 ce.setSQL("select * from Users ");

10,606

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧