Jdbc的一般性应用方法总结_jdbc总结
Jdbc的一般性应用方法总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“jdbc总结”。
Jdbc应用方法步骤小结
一、数据源。
MyDataSource.java 里面是连接数据库的相关方法,里面封装了连接参数,连接字符串,已经释放连接,返回连接,返回数据源等方法。(具体代码见附录)
二、接口层
UserDao.java里面是接口,没有具体的实现。全部是对User的增删改查接口。DaoFactory.java 是一个接口工厂,通过类加载器读取一个配置文件daoconfig.properties的读取,就知道具体实现类在哪里,该配置文件里面指明具体哪个文件是用来实现这个UserDao接口的类。
(具体代码见附录)
三、实现类
这个三个类都类里面都写了具体的对User增删改查的实现,当时,其中推荐第二中和第三种,尤其推荐第三种。(具体代码见附录)
四、实体层
这里面是具体的两个Bean,用来做测试用的。
总结:通过上面几个步骤,差不多就可以实现Jdbc操作数据库了。
本人愚笨,在此分享一点点学习心得的总结,里面还会有很多不足的地方,望评判指正,相互学习。高手绕过,新手一起学习。QQ:973519949
附录:
MyDataSource.java 文件清单 package cn.itcast.jdbc.datasource;
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.LinkedList;
//创建连接池
public cla MyDataSource {
private static String url = “jdbc:mysql://localhost:3306/jdbc”;private static String user = “root”;private static String paword = “”;
private static int initCount = 5;//为了保护数据库,我们定义初始化的链接数不超过5个
private static int maxCount = 10;//为了保护数据库,我们定义初始化的链接数不超过5个
private int currentCount = 0;private LinkedList connectionsPool = new LinkedList();
//创建连接
public MyDataSource(){
try {
for(int i = 0;i
connectionsPool.addLast(this.createConnection());
currentCount++;
}
} catch(SQLException e){
throw new ExceptionInInitializerError(e);
} }
//为程序提供创建连接的方法
public Connection getConnection()throws SQLException{
synchronized(connectionsPool){
//当连接池中还有连接可用,就直接返回一个连接
if(this.connectionsPool.size()>0)
return connectionsPool.removeFirst();
//当连接池中没有连接可用,而当前创建的连接数没有达到最大则创建一个连接返回
}
}
} if(this.currentCount
//为程序提供释放连接的方法 public void free(Connection conn){ this.connectionsPool.addLast(conn);}
private Connection createConnection()throws SQLException { return DriverManager.getConnection(url, user, paword);}
UserDao.java 文件清单
package cn.itcast.jdbc.domain;
import java.util.Date;
public cla User {
private int id;private String name;private Date birthday;private float money;
//需要有下面这个无参构造函数,因为好多地方直接new了这个对象 public User(){ }
public User(String name){ }
@Override
public String toString(){ this.name = name;
}
} return this.name;
public String showName(){ }
public int getId(){ } public void setId(int id){ } public String getName(){ } public void setName(String name){ } public Date getBirthday(){ } public void setBirthday(Date birthday){ } public float getMoney(){ } public void setMoney(float money){ } this.money = money;return money;this.birthday = birthday;return birthday;this.name = name;return name;this.id = id;return id;return this.name;
DaoFactory.java 文件清单 package cn.itcast.jdbc.dao;
import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;
public cla DaoFactory {
//工厂一般都使用单例模式
private static UserDao userdao = null;//这句必须放在下面一句的前面,要仔细分析工厂的这个执行过程
private static DaoFactory instance = new DaoFactory();
private DaoFactory(){
try {
Properties prop = new Properties();
//InputStream inStream = new FileInputStream(new File(“src/daoconfig.properties”));
//用下面的ClaLoader()方式更好,不光可以加载类,还可以读取文件,并且避免路径写死
InputStream inStream = DaoFactory.cla.getClaLoader().getResourceAsStream(“daoconfig.properties”);
prop.load(inStream);
String userDaoCla = prop.getProperty(“userDaoCla”);
Cla clazz = Cla.forName(userDaoCla);
userdao =(UserDao)clazz.newInstance();
} catch(Exception e){
throw new ExceptionInInitializerError(e);
}
}
public static DaoFactory getInstance(){
return instance;}
public UserDao getUserDao(){
return userdao;} }
NamedJdbcTemplateTestl.java 文件清单 package cn.itcast.jdbc.spring;
import javax.sql.DataSource;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;import org.springframework.jdbc.core.namedparam.SqlParameterSource;import org.springframework.jdbc.support.GeneratedKeyHolder;import org.springframework.jdbc.support.KeyHolder;
import cn.itcast.jdbc.JdbcUtils;import cn.itcast.jdbc.domain.User;
public cla NamedJdbcTemplateTest {
/**
* @param args
*
这里的方法用来插入数据或者更新数据后得到该记录的主键
*
实际开发中比较实用
*/
static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(JdbcUtils.getDatasource());
public static void main(String[] args){
// TODO Auto-generated method stub
}
static User findUser(User user){
//要执行的操作SQL语句
String sql = “select id,name,money,birthday from user where money>:money and id
//new参数源
SqlParameterSource ps = new BeanPropertySqlParameterSource(sql);
//用上面声明的命名参数对象named 执行一个方法,方法参数为sql语句,参数源,bean参数行映射
//将执行方法返回值放在一个Object对象中,这样,返回的结果本来就是Object类型,所以不用强转
Object u = named.queryForObject(sql, ps, new BeanPropertyRowMapper(User.cla));
//返回得到的结果,并且强转为User类型
return(User)u;}
static void addUser(User user){
String sql = ”insert into user(name,birthday,money)values(:name,:birthday,:money)“;
SqlParameterSource ps = new BeanPropertySqlParameterSource(sql);
//下面声明一个KeyHolder相当于一个Map,将named执行SQL语句后的返回结果保存起来
KeyHolder keyHolder = new GeneratedKeyHolder();
named.update(sql, ps, keyHolder);
//取出keyHolder里面的返回值
int id = keyHolder.getKey().intValue();
user.setId(id);} }
SimpleJdbcTemplateTest 文件清单 package cn.itcast.jdbc.spring;
import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;import org.springframework.jdbc.core.simple.ParameterizedRowMapper;import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import cn.itcast.jdbc.JdbcUtils;import cn.itcast.jdbc.domain.User;
public cla SimpleJdbcTemplateTest {
/**
* @param args
*
SimpleJdbcTemplate类的用法
*/
//同样是把这样的一个类的实例作为属性方式的进行声明
static SimpleJdbcTemplate simple = new SimpleJdbcTemplate(JdbcUtils.getDatasource());
public static void main(String[] args){
// TODO Auto-generated method stub
}
static User findUser(String name){
String sql = ”select id,name,money,birthday from user where name=?“;
//后面这个name是一个参数,这里是可变参数,如果有多个参数,这后面接着写
Object user = simple.queryForObject(sql, ParameterizedBeanPropertyRowMapper.newInstance(User.cla), name);
return(User)user;}
static T find(String name , Cla clazz){
String sql = ”select id,name,money,birthday from user where name=?";
//后面这个name是一个参数,这里是可变参数,如果有多个参数,这后面接着写
T user = simple.queryForObject(sql, ParameterizedBeanPropertyRowMapper.newInstance(clazz), name);
return user;} }
User.java 文件清单
package cn.itcast.jdbc.domain;
import java.util.Date;
public cla User {
private int id;private String name;private Date birthday;private float money;
//需要有下面这个无参构造函数,因为好多地方直接new了这个对象 public User(){ }
public User(String name){ }
@Override
public String toString(){
}
public String showName(){ } return this.name;return this.name;this.name = name;
} public int getId(){ } public void setId(int id){ } public String getName(){ } public void setName(String name){ } public Date getBirthday(){ } public void setBirthday(Date birthday){ } public float getMoney(){ } public void setMoney(float money){ } this.money = money;return money;this.birthday = birthday;return birthday;this.name = name;return name;this.id = id;return id;