1。我需要一个有关存取图书(书名 出版年月) 的系统
public class Book { private int pbYear; private String name; public void setPbYear(int pbYear) { this.pbYear=pbYear; } public void setName(String name) { this.name=name; } public int getPbYear() { return pbYear; } public String getName() { return name; }
}
2。访问图书的DAO接口:package com.yinbodotcc;import java.util.*;
public interface IBookDao { public List<Book> select(String name); public void insertBook(Book book);
}
3。具体DAO实现
package com.yinbodotcc;
import java.util.*;import javax.sql.DataSource;
import java.sql.*;
public class BookDao implements IBookDao{ private DataSource ds; public void setDs(DataSource ds) { this.ds=ds; } public List<Book> select(String name) { Connection con=null; Statement st=null; List<Book> books=new ArrayList<Book>(); try { String sql="select * from book where name='"+name+"'"; con=ds.getConnection(); st=con.createStatement(); ResultSet rs=st.executeQuery(sql); while(rs.next()) { Book b=new Book(); b.setName(rs.getString("name")); b.setPbYear(rs.getInt("PbYear")); books.add(b); System.out.println("又找到一个"); } return books; } catch(SQLException e) { e.printStackTrace(); } finally { if(con!=null) { try{ con.close(); } catch(Exception e) { e.printStackTrace(); } } if(st!=null) { try{ st.close(); } catch(Exception e) { e.printStackTrace(); } } } return null; } public void insertBook(Book book) { Connection con=null; Statement st=null; try { String sql="insert into book(name,pbYear) values('"+book.getName()+"',"+book.getPbYear()+")"; con=ds.getConnection(); st=con.createStatement(); st.execute(sql); } catch(SQLException e) { e.printStackTrace(); } finally { if(con!=null) { try{ con.close(); } catch(Exception e) { e.printStackTrace(); } } if(st!=null) { try{ st.close(); } catch(Exception e) { e.printStackTrace(); } } } }
}
4。配置文件<?xml version="1.0" encoding="GBK"?><!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--如果把上面一行换为下面这个,就能用连接池了,且程序需用修改。推荐使用--><!--bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"--> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/yay</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>qwe123</value> </property></bean>
<bean id="bookDao" class="com.yinbodotcc.BookDao"> <property name="ds"> <ref bean="datasource"/> </property></bean></beans>
5。数据库的建立,create database yay:然后source一个脚本文件:create table book(id int(5) auto_increment primary key, name varchar(40) not null, pbYear int(8))注意: delete from book where id between 2 and 9;这句可能能帮助你重复试验,也减小数据库数据量。
6。测试用例:package com.yinbodotcc;import java.util.*;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Test { public static void main(String[]args) { Book book1=new Book(); book1.setName("Thinking in Java"); book1.setPbYear(20060808); Book book2=new Book(); book2.setName("Advanced Java game programming"); book2.setPbYear(20061008); Book book3=new Book(); book3.setName("Advanced Java game programming"); book3.setPbYear(20050808); ApplicationContext ac=new FileSystemXmlApplicationContext("spring-config.xml"); IBookDao ib=(IBookDao)ac.getBean("bookDao"); ib.insertBook(book1); ib.insertBook(book2); ib.insertBook(book3); List<Book> list=ib.select("Advanced Java game programming"); for(Book book:list) System.out.println(book.getName()+":"+book.getPbYear()); }
}
完成,呵呵,但是还是比较麻烦,于是我决定在下一课开始改进。