07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao




创建day14数据库,创建user.sql表:

A
创建数据库 day14

B
创建数据表
users

create
table users

(

   
id int
primary
keyauto_increment,

   
username varchar(20),

   
password
varchar(20)

);


添加依赖的jar包

c3p0-0.9.1.2.jar

mysql-connection-java-5.0.8-bin.jar

commons-beanutils-1.8.0.jar

commons-logging.jar


编写c3p0-config.xml

<?xml
version="1.0"
encoding="utf-8"?>

<c3p0-config>

   
<default-config>

      
<property
name="initialPoolSize">5</property>

      
<property
name="maxPoolSize">20</property>

      
<property
name="driverClass">com.mysql.jdbc.Driver</property>

      
<property
name="jdbcUrl">jdbc:mysql://localhost:3306/day14</property>

      
<property
name="user">root</property>

      
<property
name="password">123456</property>

   
</default-config>

   
<named-config
name="toto">

      
<property
name="initialPoolSize">5</property>

      
<property
name="maxPoolSize">20</property>

      
<property
name="driverClass">com.mysql.jdbc.Driver</property>

      
<property
name="jdbcUrl">jdbc:mysql://localhost:3306/day14</property>

      
<property
name="user">root</property>

      
<property
name="password">123456</property>

   
</named-config>

</c3p0-config>

4
编写User.java

package cn.toto.domain;

 

public
class User {

   
private
int
id;

   
private String
username;

   
private String
password;

   
public
int getId() {

      
return
id;

   
}

   
public
void setId(int
id) {

      
this.id
= id;

   
}

   
public String getUsername() {

      
return
username;

   
}

   
public
void setUsername(String username) {

      
this.username
= username;

   
}

   
public
String getPassword() {

      
return
password;

   
}

   
public
void setPassword(String password) {

      
this.password
= password;

   
}

   
public User() {

      
super();

   
}

}

5
编写jdbcUtils.java

package cn.toto.utils;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

import javax.sql.DataSource;

 

import cn.toto.exception.DaoException;

 

import com.mchange.v2.c3p0.ComboPooledDataSource;

 

public class JdbcUtils {

   
private static DataSource ds;

   

   
static {

      
//ds = new ComboPooledDataSource();//默认的缺省的配置

      
ds = new ComboPooledDataSource("toto");//配置文件中设置的内容

   
}

   

   
//获取与指定数据的连接

   
public static DataSource getSource(){

      
return ds;

   
}

   

   
//获得与指定数据库的连接

   
public static Connection getConnection() throws SQLException {

      
//从连接池返回一个连接

      
return ds.getConnection();

   
}

   
//释放资源

   
public static void release(ResultSet rs,Statement stmt,Connection conn) {

      
if(rs!=null){

          
try{

             
rs.close();

          
}catch(SQLException e){

             
e.printStackTrace();

          
}

          
rs = null;

      
}

      
if(stmt!=null){

          
try{

             
stmt.close();

          
}catch(SQLException e){

             
e.printStackTrace();

          
}

          
stmt=null;

      
}

      
if(conn!=null){

          
try{

             
conn.close();

          
}catch(SQLException e){

             
e.printStackTrace();

          
}

          
conn = null;

      
}

   
}

   

   
//写一个通过的增删改方法

   
public static boolean update(String sql,Object[] params) {

      
Connection conn = null;

      
PreparedStatement pstmt = null;

      
ResultSet rs = null;

      

      
try {

          
//获得连接

          
conn = getConnection();

          
//写SQL

          
//预编译sql

          
pstmt = conn.prepareStatement(sql);

          
//替换参数

          
int pos = 1;//设置一个脚标

          
//for(Object param : params)   这样写是有错误的,会有空指针异常,要写成如下的方法:

          
for(int i=0;params!=null&&i<params.length;i++)

             
pstmt.setObject(i+1, params[1]);//由于不知道是什么类型的,故可以用Object

 

          
//发送sql

          
int num = pstmt.executeUpdate();

          

          
//返回结果

          
if(num>0)

             
return true;

          
return false;

      
} catch (SQLException e) {

          
throw new DaoException(e);

      
}finally{

          
release(rs,pstmt,conn);

      
}

   
}

   
//实现一个通用的查询方法

   
public static Object query(String sql,Object[] params,ResultSetHandler handler){

      
Connection conn = null;

      
PreparedStatement pstmt = null;

      
ResultSet rs = null;

      
try{

          
conn = getConnection();

          
//写sql

          
//预编译sql

          
pstmt = conn.prepareStatement(sql);

          
//替换参数

          
for(int i=0;params!=null&&i<params.length;i++)

             
pstmt.setObject(i+1, params[1]);//由于不知道是什么类型的,故可以用Object

 

          
//发送sql

          
rs = pstmt.executeQuery();

          
//处理结果集

          

          
/*我们在方法中需要一种功能让调用者里调用

          
 * 在方法的内部都有一个模块不会写,有变化,需要留给调用者来处理*/

          

          
//这时我们需要用一种设计模式策略模式 TreeSet

          
//TreeSet  实现排序,只是实现了部分功能(二叉树,还有没实现的)

          
//(元素的比较)
让我们传入比较器来实现

          
//让我们传入比较器实现Comparator的compare方法

          
/*元素的自然顺序 
实现Comparable接口的compareTo方法*/

          

          
//向调用者要一个结果集处理器

          
Object result = handler.handle(rs);//调用结果处理器的handle方法,它返回的结果就是我们想要的。将结果集变成了一个对象

          
return result;

      
}catch(SQLException e){

          
throw new DaoException(e);

      
}finally {

          
release(rs,pstmt,conn);

      
}

   
}

}  

   
//写一个通过的增删改方法

   
public static boolean update(String sql,Object[] params) {

      
Connection conn = null;

      
PreparedStatement pstmt = null;

      
ResultSet rs = null;

      

      
try {

          
//获得连接

          
conn = getConnection();

          
//写SQL

          
//预编译sql

          
pstmt = conn.prepareStatement(sql);

          
//替换参数

          
int pos = 1;//设置一个脚标

          
for(Object param : params)

             
pstmt.setObject(pos, param);//由于不知道是什么类型的,故可以用Object

          

          
//发送sql

          
int num = pstmt.executeUpdate();

          

          
//返回结果

          
if(num>0)

             
return true;

          
return false;

      
} catch (SQLException e) {

          
throw new DaoException(e);

      
}finally{

          
release(rs,pstmt,conn);

      
}

   
}

}

6
编写UserDao.java

package cn.toto.dao;

 

import
java.sql.ResultSet;

import
java.sql.SQLException;

import
java.util.ArrayList;

import java.util.List;

 

import cn.toto.domain.User;

import
cn.toto.exception.DaoException;

import cn.toto.utils.BeanHandler;

import cn.toto.utils.BeanListHandler;

import cn.toto.utils.JdbcUtils;

import
cn.toto.utils.ResultSetHandler;

 

public
class UserDao {

 

   
public List<User> getAll() {

      
//写sql

      
String sql = "select * from users";

      
//封装参数

      

      
//实现结果集处理器
也可以用默认的实现类

      
List list = (List) JdbcUtils.query(sql, null,
new BeanListHandler(User.class));

      

 

      
return
list;

   
}

   

   
public User find(int
id){

      
String sql = "select * from users where id = ?";

      
//调用方法

      
User user = (User) JdbcUtils.query(sql, new
Object[]{id}, new BeanHandler(User.class));

      

      
return user;

   
}

   

   
public
boolean
insert(User user) {

      
/*//写Sql

      
String sql = "insert into users(username,password) values(?,?)";

      
//封装参数

      
Object[] params = new Object[2];

      
params[0] = user.getUsername();

      
params[1] = user.getPassword();

      
//调用新方法

      
boolean b = JdbcUtils.update(sql, params);

      
return b;*/

      

      
String sql = "insert into users(username,password) values(?,?)";

      
boolean b = JdbcUtils.update(sql,
new Object[]{user.getUsername(),user.getPassword()});

      
return b;

   
}

   

   
public
boolean update(User user) {

      
String sql = "update users set username=?,password=? where id=?";

      

      
return JdbcUtils.update(sql,
new Object[]{

             
user.getUsername()

             
,user.getPassword()

             
,user.getId()

      
});

   
}

   

   
public
boolean delete(int
id) {

      
String sql = "delect from users where id=?";

      

      
return JdbcUtils.update(sql,
new Object[]{id});

   
}

}

7
编写自定义异常:DaoException.java

package cn.toto.exception;

 

public
class DaoException
extends RuntimeException {

 

   
private
static
final
long
serialVersionUID = 1L;

 

   
public DaoException() {

   

   
}

 

   
public DaoException(String message) {

      
super(message);

   
}

 

   
public DaoException(Throwable cause) {

      
super(cause);

   

   
}

 

   
public DaoException(String message, Throwable cause)
{

      
super(message, cause);

   

   
}

}

8
编写BeanHandler.java

在测试类中所有的类中都用到的数据可以写在@BeforeClass中。

package cn.toto.utils;

 

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import
java.sql.SQLException;

 

import org.apache.commons.beanutils.BeanUtils;

 

import
cn.toto.domain.User;

import cn.toto.exception.DaoException;

 

public
class
BeanHandler implements
ResultSetHandler {

   
private
Class clazz;

   
public BeanHandler(Class clazz) {

      
this.clazz
= clazz;

   
}

   

   
//将结果集的第一行数据封装到bean返回,要想返回,得加一个返回的类型,上面的代码就是获得类型的代码

   
public Object handle(ResultSet rs) {

      
try {

          
if(rs.next()){

             
Object bean = this.clazz.newInstance();
//根据传入的创建一个相应类型的bean

             
//获得元数据

             
ResultSetMetaData metaData = rs.getMetaData();

             
int columnCount = metaData.getColumnCount();

             
for(int
i=1;i<=columnCount;i++) {

                 
//根据列的编号获得列名

                 
String name = metaData.getColumnName(i);

                 
//根据列名获得这一行中这一列的值

                 
Object value = rs.getObject(name);

                 
//使用beanutils实现属性的封装

                 
BeanUtils.setProperty(bean, name, value);

             
}

             
//返回bean

             
return bean;

          
}

          
return
null;

      
} catch (Exception e) {

          
throw
new DaoException(e);

      
}

   
}

}

9
编写BeanListHandler.java

package cn.toto.utils;

 

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import
java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

 

import org.apache.commons.beanutils.BeanUtils;

 

import cn.toto.exception.DaoException;

 

//它的功能是将数据封装到bean,然后再将数据封装到List集合中

public
class BeanListHandler
implements ResultSetHandler {

   
private
Class clazz;

   
public BeanListHandler(Class clazz){

      
this.clazz
= clazz;

   
}

   

   
//实现接口,要实现接口中的方法中。

   
//将结果集的每一行封装到bean,将bean加入一个List返回

   
public Object handle(ResultSet rs) {

      

      
try{

          
List list = new
ArrayList();

          
while(rs.next()){

             
Object bean = this.clazz.newInstance();

             
//知道列名 
把列名作为属性来用

             

             
//获得结果集的元数据

             
ResultSetMetaData metaData = rs.getMetaData();

             
//获得列的数量

             
int columnCount = metaData.getColumnCount();

             
for(int
i=1;i<=columnCount;i++){

                 
//获得类名

                 
String columnName = metaData.getColumnName(i);

                 
//获得列对应的值   
注意现在结果集的游标是指向某一行的

                 
Object value = rs.getObject(columnName);

                 
BeanUtils.setProperty(bean, columnName, value);

             
}

             
//将bean存入List集合

             
list.add(bean);

          
}

          
return list;

      
}catch(Exception e){

          
throw
new DaoException(e);

      
}

      

   
}

}

10
编写ResultSetHandler.java

package cn.toto.utils;

 

import java.sql.ResultSet;

 

public
interface ResultSetHandler {

 

   
Object handle(ResultSet rs);

}

12
编写UserDaoTest.java

package junit.test;

 

import java.util.List;

 

import org.junit.Test;

 

import cn.toto.dao.UserDao;

import cn.toto.domain.User;

 

public
class UserDaoTest {

 

   
private UserDao
dao =
new UserDao();

   
@Test

   
public
void testInsert() {

      
User user = new User();

      
 

      
user.setUsername("zhangsan");

      
user.setPassword("11111111");

      

      
boolean b =
dao.insert(user);

      
System.out.println(b);

   
}

   
@Test

   
public
void testGetAll() {

      
List all = dao.getAll();

      
System.out.println(all);

   
}

   
@Test

   
public
void testFind() {

      
User user = dao.find(0);

      
System.out.println(user);

   
}

}

 

时间: 2024-08-30 16:39:30

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao的相关文章

在改版的Spring官网下载所需的jar包

[本文转载于:在改版的Spring官网下载所需的jar包] 1.第一步:打开官网:http://www.springsource.org/download/community   2.第二步:点击"SPRING FRAMEWORK"图片       3.第三步:点击"小猫"图标     4.第四步:拉到页面中部的位置,找到"Downloading Artifacts",点击下面的"downloading Spring artifacts

在xml文件中 如何实现shindig 的 gadgets 工程与数据库交互

问题描述 googleshindig的gadgets在xml文件中,如何实现与数据库交互?求大神指点....

Intellij IDEA 添加jar包的三种方式

intellij很好用但是对于用习惯了eclipse的童鞋来说有些不习惯,下面是intellij导入jar包的几种方法. Intellij IDEA 添加jar包的三种方式   一.直接复制:(不推荐) 方法:直接将硬盘上的jar包复制粘贴到项目的lib目录下即可. 注意: 1.对于导入的eclipse项目,该方式添加的jar包没有任何反应,用make编译项目会报错 2.对于在idea中创建的项目,该方式添加jar包,编译不报错,但是打开Structure会有"...jar ... is mis

jquery ui如和动态的 从数据库动态添加选项卡

问题描述 jquery ui如和动态的 从数据库动态添加选项卡 求解 小弟不知道该怎么写,求思路 谢谢了. jquery ui如和动态的 从数据库动态添加选项卡 我要从数据库取列表填充给 选项卡 谢谢 解决方案 你按照jqueryui的html代码,生成需要的结构就好了 $(function() { $( "#tabs" ).tabs(); }); </script> <div id="tabs"> <ul> <li>

databasename-安卓 数据库创建表的使用

问题描述 安卓 数据库创建表的使用 安卓 最近做的安卓程序中需要好几张表 我想要像java一样在一个数据库中创建 几张表 ,但是不知道是不行还是我做的有问题,实现不了 我的程序创建表的databasename都一样,然后表名称不一样,我以为这样就是在一个数据库 中创建几张表,但是程序报错,只有一张表创建成功了,从其他表中获取数据 时都说no such table 求指教 解决方案 你是自建数据库.db文件吧?可以去下几个网上的demo看看,应该不难.

使用XML文件记录操作日志

xml 记录应用程序的操作日志可以使用数据库.文本文件.XML文件等.我这里介绍的是使用 XML 文件记录操作日志.我觉得使用 XML 记录操作日志有如下几点好处:1. 不占用数据库的空间,可以任意的删除历史操作日志.2. DataTable 可以方面的读入 XML 文件,DataTable 也可以方便的保存为 XML 文件.3. 查看日志方便,可以直接打开 XML 文件查看,也可以读入 DataTable,然后通过程序查看. 在 VS2005 中使用 XML 文件记录操作日志方法如下:1. 建

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

[正文] 首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(b

Java源代码打成可执行jar包后连接不上sql2000数据库。在eclipse里能连上。求大神帮助,感谢

问题描述 因目前在手机中发的贴,无法贴图.不知各位大神是否遇到过这情况.. 解决方案 解决方案二:没有错误信息,很难判断什么问题解决方案三:你的包中有没有将sqlserver的驱动包一起打包进去,如果没有一起打包进去的话,那你运行的时候需要带上-cp参数,并将驱动jar带上.解决方案四:打的jar包中有一个META-INFMANIFEST.MF文件,其中有一个class-path属性,这个属性后面跟上要依赖的jar包的路径和名称就可以了,如果跟当前执行jar在同一个目录下面,那么class-pa

Java使用JDBC驱动连接MySQL数据库_java

Java使用JDBC驱动连接MySQL数据库的步骤: 1.下载驱动,导入jar包 2.加载驱动 3.设置连接 连接成功后就是一些对数据库中数据的操作 1.下载驱动,导入jar包 当你看到jdbc目录下有相应的jar包说明第一步操作已经完成. 2.加载驱动 3.设置连接 import java.sql.Connection; import java.sql.DriverManager; public class DB_Helper { public static void main(String[