注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 小五思科技术学习笔记之SSH
 帮助

spring中连接mysql数据库


2008-04-03 17:56:00
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhanglulu.blog.51cto.com/352763/69802
今天做了一个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
           配置数据源
<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://localhost:3308/myspringtest</value>
  </property>
  
  <property name="username">
   <value>root</value>
  </property>
  
  <property name="password">
   <value>123</value>
  </property>
  </bean>
</beans>
    2.3 新建一个SqlStatement类存放操作数据库的语句,包括新建表格,插入数据,查询
package test;
public abstract class SqlStatement {
 final public static String createSql = "create table  if not exists 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,'name2')";
 final public static String insertData3 = "insert into mytable values(3,'name3')";
 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.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowCountCallbackHandler;
public class Test {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 自动生成方法存根
  Resource resource = new ClassPathResource("myspring.xml");
  BeanFactory factory = new XmlBeanFactory(resource);
  JdbcTemplate jt = (JdbcTemplate) factory.getBean("dbtest");
  // create the database
  jt.execute(SqlStatement.createSql);
  // insert the data
  jt.execute(SqlStatement.insertData1);
  jt.execute(SqlStatement.insertData2);
  jt.execute(SqlStatement.insertData3);
  // get the datasheet info
  RowCountCallbackHandler rcch = new RowCountCallbackHandler();
  jt.query(SqlStatement.selectSql, rcch);
  System.out.println("ColumnCount in ResultSet:" + rcch.getColumnCount());
  System.out.println("RowCount in ResultSet:" + rcch.getRowCount());
  System.out.println("ResultSet data:");
  // get the column name
  String[] str = rcch.getColumnNames();
  for (int i = 0, length = str.length; i < length; i++)
   System.out.print(str[i] + "  ");
  // get the data in datasheet
  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, size = list.size(); i < size; i++) {
   SpringtoResultSetInfo sri = (SpringtoResultSetInfo) list.get(i);
   System.out.print("\n"+" " + sri.getId());
   System.out.print("    " + sri.getTemplatename());
  }
  System.out.println("\n完成");
 }
}
 
 
在连接mysql数据库的过程中,一定要导入mysql的驱动程序,我把它和spring,struts,hibernate等jar文件专门存放在一个目录中,需要导入的时候很方便.
 
连接的时候,一个很重要的问题出现了,连接时一定要导入spring-framework-1.2\spring-framework-1.2.7\lib\jakarta-commons\下的四个包,common-collections,common-dbcp,common-pool,他们对于连接过程很重要,在开发过程中,在这里卡了很长时间,因为我在spring核心包内并不包括这几个jar文件,虚拟机总是反复的抛出同一个异常:2008-4-3 18:04:39 org.springframework.core.CollectionFactory <clinit>
信息: JDK 1.4+ collections available
2008-4-3 18:04:39 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: Error registering bean with name 'dataSource' defined in class path r
esource [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)
 at org.springframework.util.ClassUtils.forName(ClassUtils.java:109)
 at org.springframework.beans.factory.support.BeanDefinitionReaderUtils.createBeanDefinition(BeanDefinitionReaderUtils.java:65)
 at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:466)
 at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:432)
 at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitions(DefaultXmlBeanDefinitionParser.java:347)
 at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.registerBeanDefinitions(DefaultXmlBeanDefinitionParser.java:197)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:295)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:223)
 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.<init>(XmlBeanFactory.java:73)
 at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:61)
 at test.Test.main(Test.java:22),显示数据源不能加载,BasicDataResource并不在spring的核心包内,仔细的查找,发现在common-dbcp包内
还有一个常用的是common-logging,它用于日志记录,不过,在这里没有用到.
3.完成后的项目输出如下:
2008-4-3 18:07:56 org.springframework.core.CollectionFactory <clinit>
信息: JDK 1.4+ collections available
2008-4-3 18:07:56 org.springframework.core.CollectionFactory <clinit>
信息: Commons Collections 3.x available
2008-4-3 18:07:56 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [myspring.xml]
2008-4-3 18:07:57 org.springframework.jdbc.core.JdbcTemplate throwExceptionOnWarningIfNotIgnoringWarnings
警告: SQLWarning ignored: java.sql.SQLWarning: Table 'mytable' already exists
ColumnCount in ResultSet:2
RowCount in ResultSet:3
ResultSet data:
id  cname 
 1    name1
 2    name2
 3    name3
完成

本文出自 “似水年华” 博客,请务必保留此出处http://zhanglulu.blog.51cto.com/352763/69802





    文章评论
 
2008-04-06 10:57:03
学习了。。

2008-05-07 10:09:37
好文章。支持

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: