Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16656
  • 博文数量: 5
  • 博客积分: 160
  • 博客等级: 入伍新兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-13 16:46
文章分类

全部博文(5)

文章存档

2011年(1)

2009年(4)

我的朋友

分类: Java

2009-09-14 23:04:28

今天做了一个spring小项目,第一次使用spring连接mysql数据库,按照实例步骤,一步一步的做;
1。首先创建一个mysql数据库myspringtest;
2。在Eclipse中创建了SpringDBTest项目
      2.1   在Eclipse“窗口\首选项\java\构建路径\用户库”中建立用户库"spring",选择spring开发包spring-framework-1.2中的dist目录下的所有jar文件,完成后在项目中"配置构建路径\\库\\添加库\用户库\spring"    
     2.2   建立spring配置文件myspring.xml
           配置数据源

">

       class="org.springframework.jdbc.core.JdbcTemplate">
  
   
  

 

 
       class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
     
      org.gjt.mm.mysql.Driver
     

     
      jdbc:mysql://localhost:3306/mytest
     

     
      root
     

     
      root
     

 


 2.3 新建一个SqlStatement类存放操作数据库的语句,包括新建表格,插入数据,查询
package test;
public 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";
}
 2.4 新建类SpringtoReseltSetInfo类,对应查询所得到的数据记录
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;
 }
 
}
2.5 建立测试类Test,连接,查询,输出数据
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.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowCountCallbackHandler;
public class test {
 public static void main(String[] args) {
  ClassPathResource 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.println(str[i] + " ");
  }
  //获取数据表中的数据
  final ArrayList list = new ArrayList();
  jt.query(SqlStatement.selectSql, new RowCallbackHandler(){
   public void processRow(ResultSet rs) throws SQLException {
         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("\n" + "" + sri.getTemplatename());
  }
  System.out.print("\n完成");
 } 
}
注:在连接mysql数据库的过程中,一定要导入mysql的驱动程序:mysql-connector-java-3.1.14-bin.jar.
此时,运行程序test.java,出现如下异常:
提示信息:
2009-9-14 20:49:58 org.springframework.core.CollectionFactory
信息: JDK 1.4+ collections available
2009-9-14 20:49:58 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [myspring.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Line 14 in XML document from class path resource [myspring.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Attribute "destory-method" must be declared for element type "bean".
org.xml.sax.SAXParseException: Attribute "destory-method" must be declared for element type "bean".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.addDTDDefaultAttrsAndValidate(XMLDTDValidator.java:1306)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1971)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:795)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:878)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:250)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:292)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:222)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:173)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:148)
at org.springframework.beans.factory.xml.XmlBeanFactory.(XmlBeanFactory.java:73)
at org.springframework.beans.factory.xml.XmlBeanFactory.(XmlBeanFactory.java:61)
at test.Test.main(Test.java:17)
在网上搜索了很久,才找到如下的解决方法:
连接时一定要导入spring-framework-1.2\spring-framework-1.2.7\lib\jakarta-commons\下的四个包,commons-collections,commons-dbcp,commons-pool,commons-logging.他们对于连接过程很重要,在开发过程中,在这里卡了很长时间,因为我在spring核心包内并不包括这几个jar文件.
到此,运行成功了O(∩_∩)O~
3.完成后的项目输出如下:
2009-9-14 22:40:18 org.springframework.core.CollectionFactory
信息: JDK 1.4+ collections available
2009-9-14 22:40:19 org.springframework.core.CollectionFactory
信息: Commons Collections 3.x available
2009-9-14 22:40:19 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [myspring.xml]
结果集中的列数量:2
结果集中的行数量:6
结果集中的结果:
id
cname
1
name1
2
test2
3
test3
1
name1
2
test2
3
test3
完成
阅读(7109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~