spring连接数据库引发的问题

来源:互联网 发布:嫁不出去知乎 编辑:程序博客网 时间:2024/05/25 05:35

    用spring连接数据库总是报错!后来写了一个简单的java程序测试了一下,还是频繁报错!后来经过多次调试,终于成功!先把代码贴出来以供大家参考,并会把问题也贴出来,让大家遇到类似问题时有个参照.

因为只是一个测试程序,所有代码量很少,也只是一个简单的java Application工程,数据库也只是用的mysql,

首先在src文件夹下新建一个spring的配置文件myspring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
  <bean id="dbtest" class="org.springframework.jdbc.core.JdbcTemplate">
   <property name="dataSource">
     <ref local="dataSource"/>
   </property>
  </bean>
 
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
   <property name="driverClassName">
     <value>org.gjt.mm.mysql.Driver</value>
   </property>
  
   <property name="url">
    <value>jdbc:mysql://127.0.0.1/mytest</value>
   </property>
  
   <property name="username">
     <value>root</value>
   </property>
  
   <property name="password">
     <value>zgy01</value>
   </property>
 </bean>

</beans>

新建一个抽象类

package test;


public abstract class SqlStatement
{
   final public static String createSql = "create table mytable(id int,cname varchar(50))";
   final public static String insertData1 = "insert into mytable values(1,'name1')";
   final public static String insertData2 = "insert into mytable values(2,'test2')";
   final public static String insertData3 = "insert into mytable values(3,'test3')";
   final public static String selectSql = "select * from mytable";
}

和数据库映射的类

package test;

public class SpringtoResultSetInfo
{
   private int id;
   private String templatename;
  
public int getId() {
 return id;
}
public void setId(int id) {
 this.id = id;
}
public String getTemplatename() {
 return templatename;
}
public void setTemplatename(String templatename) {
 this.templatename = templatename;
}
  
  
}

 

最后是测试类

package test;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowCountCallbackHandler;

 

 


public class Test
{
 

public static void main(String[] args)
   {
    Resource resource = new  ClassPathResource("myspring.xml");
    BeanFactory factory = new XmlBeanFactory(resource);
    JdbcTemplate jt = (JdbcTemplate)factory.getBean("dbtest");
   
    //创建数据库
    jt.execute(SqlStatement.createSql);
   
   
    
   
    //插入数据
   jt.execute(SqlStatement.insertData1);
   jt.execute(SqlStatement.insertData2);
   jt.execute(SqlStatement.insertData3);
  
   //获得数据表信息
   RowCountCallbackHandler rcch = new RowCountCallbackHandler();
  
   jt.query(SqlStatement.selectSql, rcch);
  
   System.out.println("结果集中的列数量:" + rcch.getColumnCount());
   System.out.println("结果集中的行数量:" + rcch.getRowCount());
   System.out.println("结果集中的结果:");
  
   //取得列名
   String[] str = rcch.getColumnNames();
   for(int i=0;i<str.length;i++)
   {
    System.out.print(str[i] + " ");
   }
  
   //取得数据表中数据
   final ArrayList<SpringtoResultSetInfo> list = new ArrayList<SpringtoResultSetInfo>();
   jt.query(SqlStatement.selectSql, new RowCallbackHandler()
   {

  public void processRow(ResultSet rs) throws SQLException {
   // TODO Auto-generated method stub
   SpringtoResultSetInfo sri = new SpringtoResultSetInfo();
   sri.setId(rs.getInt(1));
   sri.setTemplatename(rs.getString(2));
      list.add(sri);
  }
   
   });
  
   for(int i=0;i<list.size();i++)
   {
    SpringtoResultSetInfo sri = (SpringtoResultSetInfo)list.get(i);
   
    System.out.print("/n"+" "+sri.getId());
    System.out.print("  " +sri.getTemplatename());
   }
   System.out.println("/n完成");
   }
}

 

下面是所遇到的问题

首先由于eclipse自带的 spring包中没有commons-dbcp,和JdbcTemplate类的包(在spring-jdbc里面),原来一直以为是core包的!所以这两个包还需要自行导入

1:Severity and Description Path Resource Location Creation Time Id
The project was not built since its build path is incomplete. Cannot find the class file for org.springframework.dao.DataAccessException. Fix the build path then try building this project SpringDBTest Unknown 1210571456953 26

Severity and Description Path Resource Location Creation Time Id
The type org.springframework.dao.DataAccessException cannot be resolved. It is indirectly referenced from required .class files SpringDBTest/src/test Test.java line 24 1210571456953 25

可是我在网上看了一下spring JdbcTemplate类的API 上面有那个方法啊!

java.lang.Object
  org.springframework.jdbc.support.JdbcAccessor
      org.springframework.jdbc.core.JdbcTemplate


void execute(String sql) 
          Issue a single SQL execute, typically a DDL statement. 

后来我把导入spring.jar包,就没有这个错误了,而且也有了execute()和query()等方法!虽然问题是解决了!可是还是感到很遗憾!那个方法不是JdbcTemplate类本身的方法吗?为什么单独这个包不行了!还望高人解答!

2:Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'dataSource' defined in class path resource [myspring.xml]: Class that bean class [org.apache.commons.dbcp.BasicDataSource] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

 

上面这个错误是由于没有导入commons-pool包

另外还有很多错误,如

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'dataSource' defined in class path resource [myspring.xml]: Class that bean class [org.apache.commons.dbcp.BasicDataSource] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Unknown Source)

并且我把这些错误信息也翻录如下

Severity and Description
(简洁和描写)
 Path(路径)
 Resource(源)
 Location(位置)
 Creation Time(创建时间)]
 Id(标志码)

The project was not built since its build path is incomplete.(建造路径都没有完整的时候,就创建了这个程序)

 Cannot find the class file for org.springframework.dao.DataAccessException.(找不到分类文件)


 Fix the build path then try building this project (修复这个程序的路径)
 SpringDBTest Unknown 1210563990687 10

2:Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'dataSource' defined in class path resource [myspring.xml]: Class that bean class [org.apache.commons.dbcp.BasicDataSource] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

主线程发生例外
在定义类的路径时,数据源发生了错误,

原创粉丝点击