创建SQL语令
create table User1(
id int primary key not null auto_increment,
username varchar(20),
password varchar(20)
);
eclipse中详细步骤
导入jar包 分别有数据库连接包、c3p0包、c3p0依赖包、DbUtils包
jar的网盘分享地址为:https://pan.baidu.com/s/1PRFNCJfUUHDyNlpT-oxjVA
提取码:u9rb
编写c3p0-config.xml文件
com.mysql.jdbc.Driver
jdbc:mysql:///chu1
root
szxy
5
20
创建utils包、service包、bean包、test包
public class JdbcUtils{
public static Datasource ds= null;
static {
ds= new ComboPooledDataSource("pool");
}
public static DataSource getDataSource(){
return ds;
}
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
public static void close(Connection conn ,Statement stmt,ResultSet set){
close();
}
}
domain实体类
package com.h3.domain;
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = 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;
}
}
service类
public class JdbcService {
//DButils的QueryRunner去池中找数据
private QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
public int addUser(String username, String password) throws SQLException {
String sql = "insert into user values (null,?,?)";
int row = qr.update(sql, username, password);
return row;
}
public int deleteUser(int id) throws SQLException {
String sql = "delete from user where id = ?";
int row = qr.update(sql, id);
return row;
}
public int updateUser(int id, String password) throws SQLException {
String sql="update user set password =? where id =?";
int row = qr.update(sql,password,id);
return row;
}
//查看所有的信息
// BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
public void selectAll() throws SQLException {
String sql = "select * from user";
// qr.ResultSetHandler 这是接口 BeanListHander 是实现类
// BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
// 把结果集转为一个 Bean 的 List, 并返回.。Bean的类型在创建
// BeanListHanlder对象时以 Class对象的方式传入,可以适应列的别名来映射 JavaBean 的属性名
// query(String sql, Object[] params, ResultSetHandler rsh):
// 方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
List user = qr.query(sql, new BeanListHandler(User.class));
for (User u : user) {
System.out.println(u.getId() + "--" + u.getUsername() + "--" + u.getPassword());
}
}
//把结果集转为一个 Bean,并返回
//Bean的类型在创建BeanHandler 对象时以 Class 对象的方式传入 BeanHandler(Class type)。
//BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
public User selectOneUser(int id) throws SQLException {
String sql = "select * from user where id = ?";
User u = qr.query(sql, new BeanHandler(User.class), id);
return u;
}
// ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。
// 可以返回指定列的一个值或返回一个统计函数的值,比如count(1)
public void select(String xing) throws SQLException {
String sql = "select count(*) from user where username like ? ";
long count = qr.query(sql, new ScalarHandler<>(), xing + "%");
System.out.println(count);
}
}
测试类
public class JdbcTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
JdbcService service = new JdbcService();
try {
for (; ; ) {
System.out.println("请输入 1.添加 2.删除 3.修改 4.查所有 5.查单人 6.查姓X的人 7.退出");
switch (sc.next()) {
case "1":
System.out.println("请输入用户名");
String username = sc.next();
System.out.println("请输入密码");
String password = sc.next();
int addRow = service.addUser(username, password);
if (addRow > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
break;
case "2":
System.out.println("请输入id");
int delId = sc.nextInt();
int delRow = service.deleteUser(delId);
if (delRow > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
break;
case "3":
System.out.println("请输入id");
int updateId = sc.nextInt();
System.out.println("请输入新密码");
String newPwd = sc.next();
int updateRow = service.updateUser(updateId, newPwd);
if (updateRow > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
break;
case "4":
service.selectAll();
break;
case "5":
System.out.println("请输入id");
int selectId = sc.nextInt();
User u = service.selectOneUser(selectId);
if (u == null) {
System.out.println("查无此人");
} else {
System.out.println(u.getId() + "--" + u.getUsername() + "--" + u.getPassword());
}
break;
case "6":
System.out.println("请输入姓");
String xing = sc.next();
service.select(xing);
break;
case "7":
System.out.println("再见");
return;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
#相关的知识点:
为了简化Jdbc技术的操作-----DBUtils
Apache组织提供的一个对JDBC进行简单封装的开源工具类库
作用:DBUtils主要负责转载驱动、关闭连接的工作
dbutil的作用 不用自己关闭资源
DBUtils就是为了简化JDBC的快发而产生的开发工具包.对JDBC的一种封装
用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
在开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,所以通常用连接池结束,来共享连接Connection.这样就不用每次都创建连接,释放链接了,这些操作都交给连接池.
QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。它包含以下几个方法:
query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
query (String sql, Object[] params, ResultSetHandler rsh):方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
query(Connection conn, String sql, ResultSetHandler rsh):执行无需参数的选择查询。
update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。
ResultSetHandler 的作用: QueryRunner 的 query 方法的返回值最终取决于 query 方法的 ResultHandler 参数的 hanlde 方法的返回值。
BeanListHandler: 把结果集转为一个 Bean 的 List, 并返回.。Bean的类型在创建 BeanListHanlder对象时以 Class对象的方式传入,可以适应列的别名来映射 JavaBean 的属性 名: String sql = "SELECT id, name customerName, email, birth " + “FROM customers WHERE id = ?”; BeanListHandler(Class type)。
BeanHandler: 把结果集转为一个 Bean,并返回.。Bean的类型在创建BeanHandler 对象时以 Class 对象的方式传入 BeanHandler(Class type)。
MapHandler: 把结果集转为一个 Map 对象, 并返回。若结果集中有多条记录, 仅返回 第一条记录对应的Map对象.。Map的键: 列名(而非列的别名), 值: 列的值。
MapListHandler: 把结果集转为一个 Map 对象的集合, 并返回.。Map的键: 列名(而非列的别名), 值: 列的值。
ScalarHandler: 可以返回指定列的一个值或返回一个统计函数的值,比如count(1)。