密码
package com.xp.jdbc.connection;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
/**
* jdbc链接数据库
* @author xiongpan
* 2017年2月5日
*/
public class JDBCConnectionDBDemo {
//连接数据库的URL jdbc协议:数据库子协议:主机:端口/连接的数据库 //
private final String url = "jdbc:mysql://localhost:3306/day17";
//用户名、密码
private String user="root";
private String password="xiongpan";
/**
* 第一种方法
* @throws SQLException
*/
@Test
public void test1() throws SQLException{
//1.创建驱动程序类对象
Driver driver=null;
driver=new com.mysql.jdbc.Driver();
//Driver driver2=new org.gjt.mm.mysql.Driver(); //旧版本
Properties props=new Properties();
props.setProperty("user", user);
props.setProperty("password", password);
//2.连接数据库,返回连接对象
Connection conn = driver.connect(url, props);
System.out.println(conn);
}
/**
* 使用驱动管理器类连接数据库(注册了两次,没必要)
* @throws Exception
*/
@Test
public void test2() throws Exception{
Driver driver = new com.mysql.jdbc.Driver();
//Driver driver2 = new com.oracle.jdbc.Driver();
//1.注册驱动程序(可以注册多个驱动程序)
DriverManager.registerDriver(driver);
//DriverManager.registerDriver(driver2);
//2.连接到具体的数据库
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
/**
* (推荐使用这种方式连接数据库)
* 推荐使用加载驱动程序类 来 注册驱动程序
* @throws Exception
*/
@Test
public void test3() throws Exception{
//Driver driver = new com.mysql.jdbc.Driver();
//通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
//Driver driver2 = new com.oracle.jdbc.Driver();
//1.注册驱动程序(可以注册多个驱动程序)
//DriverManager.registerDriver(driver);
//DriverManager.registerDriver(driver2);
//2.连接到具体的数据库
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
}
2.4 jdbc接口核心的API
package com.xp.jdbc.connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
/**
* 使用statement对象执行静态的sql语句
*/
public class StatementDemo {
private String url="jdbc:mysql://localhost/day17";
private String user="root";
private String password="xiongpan";
/**
* 执行DDL语句(创建表)
*/
@Test
public void test(){
Statement stmt=null;
Connection conn=null;
try {
//1.注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象
conn=DriverManager.getConnection(url, user, password);
//3.创建statement对象
stmt=conn.createStatement();
//4.准备sql语句
String sql="CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))";
//5.返回结果
int count = stmt.executeUpdate(sql);
//6.输出返回结果
System.out.println("影响了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
//7.关闭链接(顺序,后打开的先关闭)
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
}
四、使用statement执行DML语句
package com.xp.jdbc.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* jdbc工具类
*/
public class JdbcUtil {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driverClass = null;
/**
* 静态代码块中(只加载一次)
*/
static{
try {
//读取db.properties文件
Properties props = new Properties();
/**
* . 代表java命令运行的目录
* 在java项目下,. java命令的运行目录从项目的根目录开始
* 在web项目下, . java命令的而运行目录从tomcat/bin目录开始
* 所以不能使用点.
*/
//FileInputStream in = new FileInputStream("./src/db.properties");
/**
* 使用类路径的读取方式
* / : 斜杠表示classpath的根目录
* 在java项目下,classpath的根目录从bin目录开始
* 在web项目下,classpath的根目录从WEB-INF/classes目录开始
*/
InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
//加载文件
props.load(in);
//读取信息
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
driverClass = props.getProperty("driverClass");
//注册驱动程序
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
System.out.println("驱程程序注册出错");
}
}
/**
* 抽取获取连接对象的方法
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 释放资源的方法
*/
public static void close(Connection conn,Statement stmt){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(rs!=null)
try {
rs.close();
} catch (SQLException e1) {
e1.printStackTrace();
throw new RuntimeException(e1);
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
package com.xp.jdbc.connection;
import java.sql.Connection;
import java.sql.Statement;
import org.junit.Test;
import com.xp.jdbc.util.JdbcUtil;
/**
* 使用statement执行DMLsql语句
*/
public class StatementDMLSql {
private String url = "jdbc:mysql://localhost:3306/day17";
private String user = "root";
private String password = "xiongpan";
/**
* 增加
*/
@Test
public void testInsert() {
Connection conn = null;
Statement stmt = null;
try {
// 通过工具类获取连接对象
conn = JdbcUtil.getConnection();
// 3.创建Statement对象
stmt = conn.createStatement();
// 4.sql语句
String sql = "INSERT INTO student(NAME,gender) VALUES('张三','男')";
// 5.执行sql
int count = stmt.executeUpdate(sql);
System.out.println("影响了" + count + "行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭资源
/*
* if(stmt!=null) try { stmt.close(); } catch (SQLException e) {
* e.printStackTrace(); throw new RuntimeException(e); }
* if(conn!=null) try { conn.close(); } catch (SQLException e) {
* e.printStackTrace(); throw new RuntimeException(e); }
*/
JdbcUtil.close(conn, stmt);
}
}
/**
* 修改
*/
@Test
public void testUpdate() {
Connection conn = null;
Statement stmt = null;
// 模拟用户输入
String name = "陈六";
int id = 3;
try {
/*
* //1.注册驱动 Class.forName("com.mysql.jdbc.Driver");
*
* //2.获取连接对象 conn = DriverManager.getConnection(url, user,
* password);
*/
// 通过工具类获取连接对象
conn = JdbcUtil.getConnection();
// 3.创建Statement对象
stmt = conn.createStatement();
// 4.sql语句
String sql = "UPDATE student SET NAME='" + name + "' WHERE id="
+ id + "";
System.out.println(sql);
// 5.执行sql
int count = stmt.executeUpdate(sql);
System.out.println("影响了" + count + "行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭资源
/*
* if(stmt!=null) try { stmt.close(); } catch (SQLException e) {
* e.printStackTrace(); throw new RuntimeException(e); }
* if(conn!=null) try { conn.close(); } catch (SQLException e) {
* e.printStackTrace(); throw new RuntimeException(e); }
*/
JdbcUtil.close(conn, stmt);
}
}
/**
* 删除
*/
@Test
public void testDelete() {
Connection conn = null;
Statement stmt = null;
// 模拟用户输入
int id = 3;
try {
/*
* //1.注册驱动 Class.forName("com.mysql.jdbc.Driver");
*
* //2.获取连接对象 conn = DriverManager.getConnection(url, user,
* password);
*/
// 通过工具类获取连接对象
conn = JdbcUtil.getConnection();
// 3.创建Statement对象
stmt = conn.createStatement();
// 4.sql语句
String sql = "DELETE FROM student WHERE id=" + id + "";
System.out.println(sql);
// 5.执行sql
int count = stmt.executeUpdate(sql);
System.out.println("影响了" + count + "行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭资源
/*
* if(stmt!=null) try { stmt.close(); } catch (SQLException e) {
* e.printStackTrace(); throw new RuntimeException(e); }
* if(conn!=null) try { conn.close(); } catch (SQLException e) {
* e.printStackTrace(); throw new RuntimeException(e); }
*/
JdbcUtil.close(conn, stmt);
}
}
}
五、statement执行DQL查询语句
package com.xp.jdbc.connection;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
import com.xp.jdbc.util.JdbcUtil;
/**
* 使用Statement执行DQL语句(查询操作)
*/
public class StatementDQLSql {
@Test
public void test1(){
Connection conn = null;
Statement stmt = null;
try{
//获取连接
conn = JdbcUtil.getConnection();
//创建Statement
stmt = conn.createStatement();
//准备sql
String sql = "SELECT * FROM student";
//执行sql
ResultSet rs = stmt.executeQuery(sql);
//移动光标
/*boolean flag = rs.next();
flag = rs.next();
flag = rs.next();
if(flag){
//取出列值
//索引
int id = rs.getInt(1);
String name = rs.getString(2);
String gender = rs.getString(3);
System.out.println(id+","+name+","+gender);
//列名称
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+","+name+","+gender);
}*/
//遍历结果
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+","+name+","+gender);
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt);
}
}
}
六、preparedstatement
package com.xp.jdbc.connection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
import com.xp.jdbc.util.JdbcUtil;
public class PreparedSQLDemo {
/**
* 增加
*/
@Test
public void testInsert() {
Connection conn = null;
PreparedStatement stmt = null;
try {
//1.获取连接
conn = JdbcUtil.getConnection();
//2.准备预编译的sql
String sql = "INSERT INTO student(NAME,gender) VALUES(?,?)"; //?表示一个参数的占位符
//3.执行预编译sql语句(检查语法)
stmt = conn.prepareStatement(sql);
//4.设置参数值
/**
* 参数一: 参数位置 从1开始
*/
stmt.setString(1, "李四");
stmt.setString(2, "男");
//5.发送参数,执行sql
int count = stmt.executeUpdate();
System.out.println("影响了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt);
}
}
/**
* 修改
*/
@Test
public void testUpdate() {
Connection conn = null;
PreparedStatement stmt = null;
try {
//1.获取连接
conn = JdbcUtil.getConnection();
//2.准备预编译的sql
String sql = "UPDATE student SET NAME=? WHERE id=?"; //?表示一个参数的占位符
//3.执行预编译sql语句(检查语法)
stmt = conn.prepareStatement(sql);
//4.设置参数值
/**
* 参数一: 参数位置 从1开始
*/
stmt.setString(1, "王五");
stmt.setInt(2, 9);
//5.发送参数,执行sql
int count = stmt.executeUpdate();
System.out.println("影响了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt);
}
}
/**
* 删除
*/
@Test
public void testDelete() {
Connection conn = null;
PreparedStatement stmt = null;
try {
//1.获取连接
conn = JdbcUtil.getConnection();
//2.准备预编译的sql
String sql = "DELETE FROM student WHERE id=?"; //?表示一个参数的占位符
//3.执行预编译sql语句(检查语法)
stmt = conn.prepareStatement(sql);
//4.设置参数值
/**
* 参数一: 参数位置 从1开始
*/
stmt.setInt(1, 9);
//5.发送参数,执行sql
int count = stmt.executeUpdate();
System.out.println("影响了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt);
}
}
/**
* 查询
*/
@Test
public void testQuery() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
//1.获取连接
conn = JdbcUtil.getConnection();
//2.准备预编译的sql
String sql = "SELECT * FROM student";
//3.预编译
stmt = conn.prepareStatement(sql);
//4.执行sql
rs = stmt.executeQuery();
//5.遍历rs
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+","+name+","+gender);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
//关闭资源
JdbcUtil.close(conn,stmt,rs);
}
}
}
PreparedStatement vs Statment
七、callablestatement
创建存储过程
DELIMITER $
CREATE PROCEDURE pro_findById(IN sid INT)
BEGIN
SELECT * FROM student WHERE id=sid;
END $;
DELIMITER $
CREATE PROCEDURE pro_findById2(IN sid INT,sname VARCHAR(20))\
BEGIN
SELECT NAME INTO sname FROM student WHERE id=sid;
END $
CALL pro_findById2(1,@NAME);
SELECT @NAME;
package com.xp.jdbc.connection;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import org.junit.Test;
import com.xp.jdbc.util.JdbcUtil;
public class CablleStatementDemo {
/**
* 调用带有输入参数的存储过程
* CALL pro_findById(4);
*/
@Test
public void test1(){
Connection conn = null;
CallableStatement stmt = null;
ResultSet rs = null;
try {
//获取连接
conn = JdbcUtil.getConnection();
//准备sql
String sql = "CALL pro_findById(?)"; //可以执行预编译的sql
//预编译
stmt = conn.prepareCall(sql);
//设置输入参数
stmt.setInt(1, 6);
//发送参数
rs = stmt.executeQuery(); //注意: 所有调用存储过程的sql语句都是使用executeQuery方法执行!!!
//遍历结果
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+","+name+","+gender);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt ,rs);
}
}
/**
* 执行带有输出参数的存储过程
* CALL pro_findById2(5,@NAME);
*/
@Test
public void test2(){
Connection conn = null;
CallableStatement stmt = null;
ResultSet rs = null;
try {
//获取连接
conn = JdbcUtil.getConnection();
//准备sql
String sql = "CALL pro_findById2(?,?)"; //第一个?是输入参数,第二个?是输出参数
//预编译
stmt = conn.prepareCall(sql);
//设置输入参数
stmt.setInt(1, 6);
//设置输出参数(注册输出参数)
/**
* 参数一: 参数位置
* 参数二: 存储过程中的输出参数的jdbc类型 VARCHAR(20)
*/
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
//发送参数,执行
stmt.executeQuery(); //结果不是返回到结果集中,而是返回到输出参数中
//得到输出参数的值
/**
* 索引值: 预编译sql中的输出参数的位置
*/
String result = stmt.getString(2); //getXX方法专门用于获取存储过程中的输出参数
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt ,rs);
}
}
}
九、各种数据库连接
JDBC的URL=协议名+子协议名+数据源名。
a协议名总是“jdbc”。
b子协议名由JDBC驱动程序的编写者决定。
c数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
---------------------------SQLServer------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
--------------------------DB2--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000
-------------------------------------------------------
十、通讯录jdbc版
package com.xp.contactsys_web.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtil {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driverClass = null;
/**
* 静态代码块中(只加载一次)
*/
static{
try {
//读取db.properties文件
Properties props = new Properties();
/**
* . 代表java命令运行的目录
* 在java项目下,. java命令的运行目录从项目的根目录开始
* 在web项目下, . java命令的而运行目录从tomcat/bin目录开始
* 所以不能使用点.
*/
//FileInputStream in = new FileInputStream("./src/db.properties");
/**
* 使用类路径的读取方式
* / : 斜杠表示classpath的根目录
* 在java项目下,classpath的根目录从bin目录开始
* 在web项目下,classpath的根目录从WEB-INF/classes目录开始
*/
InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
//加载文件
props.load(in);
//读取信息
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
driverClass = props.getProperty("driverClass");
//注册驱动程序
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
System.out.println("驱程程序注册出错");
}
}
/**
* 抽取获取连接对象的方法
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 释放资源的方法
*/
public static void close(Connection conn,Statement stmt){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(rs!=null)
try {
rs.close();
} catch (SQLException e1) {
e1.printStackTrace();
throw new RuntimeException(e1);
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
package com.xp.contactsys_web.entity;
/**
* 联系人类
* @author xiongpan
*/
public class Contact {
private String id;
private String name;
private String gender;
private int age;
private String phone;
private String email;
private String qq;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
@Override
public String toString() {
return "Contact [age=" + age + ", email=" + email + ", gender="
+ gender + ", id=" + id + ", name=" + name + ", phone=" + phone
+ ", qq=" + qq + "]";
}
}
package com.xp.contactsys_web.dao;
import java.util.List;
import com.xp.contactsys_web.entity.Contact;
/**
* 联系人接口
* @author xiongpan
* 2017年2月5日
*/
public interface ContactDao {
public void addContact(Contact contact);//添加联系人
public void updateContact(Contact contact);//修改联系人
public void deleteContact(String id);//删除联系人
public List findAll(); //查询所有联系人
public Contact findById(String id);//根据编号查询联系人
public boolean checkContact(String name);//根据姓名查询是否重复
}
package com.xp.contactsys_web.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import com.xp.contactsys_web.dao.ContactDao;
import com.xp.contactsys_web.entity.Contact;
import com.xp.contactsys_web.util.JdbcUtil;
public class ContactDaoImpl implements ContactDao {
/**
* 添加联系人
*/
@Override
public void addContact(Contact contact) {
Connection conn = null;
PreparedStatement stmt = null;
try{
//获取连接
conn = JdbcUtil.getConnection();
String sql = "INSERT INTO contact(id,NAME,gender,age,phone,email,qq) VALUES(?,?,?,?,?,?,?)";
//创建PreparedStatement
stmt = conn.prepareStatement(sql);
String id = UUID.randomUUID().toString().replace("-", "");
//设置参数
stmt.setString(1, id);
stmt.setString(2, contact.getName());
stmt.setString(3, contact.getGender());
stmt.setInt(4, contact.getAge());
stmt.setString(5, contact.getPhone());
stmt.setString(6, contact.getEmail());
stmt.setString(7, contact.getQq());
//执行
stmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt);
}
}
/**
* 修改联系人
*/
@Override
public void updateContact(Contact contact) {
Connection conn = null;
PreparedStatement stmt = null;
try{
//获取连接
conn = JdbcUtil.getConnection();
String sql = "UPDATE contact SET NAME=?,gender=?,age=?,phone=?,email=?,qq=? WHERE id=?";
//创建PreparedStatement
stmt = conn.prepareStatement(sql);
//设置参数
stmt.setString(1, contact.getName());
stmt.setString(2, contact.getGender());
stmt.setInt(3, contact.getAge());
stmt.setString(4, contact.getPhone());
stmt.setString(5, contact.getEmail());
stmt.setString(6, contact.getQq());
stmt.setString(7, contact.getId());
//执行
stmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt);
}
}
/**
* 删除联系人
*/
@Override
public void deleteContact(String id) {
Connection conn = null;
PreparedStatement stmt = null;
try{
//获取连接
conn = JdbcUtil.getConnection();
String sql = "DELETE FROM contact WHERE id=?";
//创建PreparedStatement
stmt = conn.prepareStatement(sql);
//设置参数
stmt.setString(1, id);
//执行
stmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt);
}
}
/**
* 查询所有联系人
*/
@Override
public List findAll() {
Connection conn=null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
//获取链接
conn=JdbcUtil.getConnection();
String sql = "SELECT * FROM contact";
stmt=conn.prepareStatement(sql);
rs=stmt.executeQuery();
List list=new ArrayList();
while(rs.next()){
Contact c = new Contact();
c.setId(rs.getString("id"));
c.setName(rs.getString("name"));
c.setGender(rs.getString("gender"));
c.setAge(rs.getInt("age"));
c.setPhone(rs.getString("phone"));
c.setEmail(rs.getString("email"));
c.setQq(rs.getString("qq"));
list.add(c);
}
return list;
} catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt ,rs);
}
}
/*
* 根据id编号查找联系人
*/
@Override
public Contact findById(String id) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try{
//获取连接
conn = JdbcUtil.getConnection();
String sql = "SELECT * FROM contact where id=?";
//创建PreparedStatement
stmt = conn.prepareStatement(sql);
stmt.setString(1, id);
//执行
rs = stmt.executeQuery();
Contact c = null;
if(rs.next()){
c = new Contact();
c.setId(rs.getString("id"));
c.setName(rs.getString("name"));
c.setGender(rs.getString("gender"));
c.setAge(rs.getInt("age"));
c.setPhone(rs.getString("phone"));
c.setEmail(rs.getString("email"));
c.setQq(rs.getString("qq"));
}
return c;
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt ,rs);
}
}
/**
* 检测是否存在重名的联系人
*/
@Override
public boolean checkContact(String name) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try{
//获取连接
conn = JdbcUtil.getConnection();
String sql = "SELECT * FROM contact where name=?";
//创建PreparedStatement
stmt = conn.prepareStatement(sql);
stmt.setString(1, name);
//执行
rs = stmt.executeQuery();
if(rs.next()){
return true;
}else{
return false;
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt ,rs);
}
}
}
package com.xp.contactsys_web.service;
import java.util.List;
import com.xp.contactsys_web.entity.Contact;
import com.xp.contactsys_web.exception.NameRepeatException;
public interface ContactService {
public void addContact(Contact contact)throws NameRepeatException;//添加联系人
public void updateContact(Contact contact);//修改联系人
public void deleteContact(String id);//删除联系人
public List findAll(); //查询所有联系人
public Contact findById(String id);//根据编号查询联系人
}
package com.xp.contactsys_web.service.impl;
import java.util.List;
import com.xp.contactsys_web.dao.ContactDao;
import com.xp.contactsys_web.dao.impl.ContactDaoImpl;
import com.xp.contactsys_web.entity.Contact;
import com.xp.contactsys_web.exception.NameRepeatException;
import com.xp.contactsys_web.service.ContactService;
public class ContactServiceImpl implements ContactService{
//ContactDao dao = new ContactDaoImpl();
ContactDao dao = new ContactDaoImpl();
public void addContact(Contact contact) throws NameRepeatException {
//执行业务逻辑判断
if(dao.checkContact(contact.getName())){
//重复
/**
* 注意: 如果业务层方法出现任何业务异常,则返回标记(自定义异常)到servlet
*/
throw new NameRepeatException("姓名重复,不可使用");
}
//如果不重复,才执行添加方法
dao.addContact(contact);
}
public void deleteContact(String id) {
dao.deleteContact(id);
}
public List findAll() {
return dao.findAll();
}
public Contact findById(String id) {
return dao.findById(id);
}
public void updateContact(Contact contact) {
dao.updateContact(contact);
}
}
package com.xp.contactsys_web.exception;
public class NameRepeatException extends Exception {
private static final long serialVersionUID = 1L;
public NameRepeatException(String msg){
super(msg);
}
}
package com.xp.contactsys_web.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xp.contactsys_web.entity.Contact;
import com.xp.contactsys_web.service.ContactService;
import com.xp.contactsys_web.service.impl.ContactServiceImpl;
public class ListContactServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.从xml中读取出联系人数据
ContactService service = new ContactServiceImpl();
List list = service.findAll();
//2.把结果保存到域对象中
request.setAttribute("contacts", list);
//3.跳转到jsp页面
request.getRequestDispatcher("/listContact.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.xp.contactsys_web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xp.contactsys_web.entity.Contact;
import com.xp.contactsys_web.exception.NameRepeatException;
import com.xp.contactsys_web.service.ContactService;
import com.xp.contactsys_web.service.impl.ContactServiceImpl;
public class AddContactServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//1.接收参数
String name = request.getParameter("name");
String gender = request.getParameter("gender");
String age = request.getParameter("age");
String phone = request.getParameter("phone");
String email = request.getParameter("email");
String qq = request.getParameter("qq");
//封装成Contact对象
Contact contact = new Contact();
contact.setName(name);
contact.setGender(gender);
contact.setAge(Integer.parseInt(age));
contact.setPhone(phone);
contact.setEmail(email);
contact.setQq(qq);
ContactService service = new ContactServiceImpl();
//2.调用dao类的添加联系人的方法
try {
service.addContact(contact);
} catch (NameRepeatException e) {
//处理自定义业务异常
request.setAttribute("msg", e.getMessage());
request.getRequestDispatcher("/addContact.jsp").forward(request, response);
return;
}
//3.跳转到查询联系人的页面
response.sendRedirect(request.getContextPath()+"/ListContactServlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.xp.contactsys_web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xp.contactsys_web.entity.Contact;
import com.xp.contactsys_web.service.ContactService;
import com.xp.contactsys_web.service.impl.ContactServiceImpl;
public class QueryContactServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.接收id
String id = request.getParameter("id");
//2.调用service根据id查询联系人的方法
ContactService service = new ContactServiceImpl();
Contact contact = service.findById(id);
//3.把查询的结果保存到request域中
request.setAttribute("contact", contact);
//4.跳转到修改联系人的页面
request.getRequestDispatcher("/updateContact.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
}
}
package com.xp.contactsys_web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xp.contactsys_web.entity.Contact;
import com.xp.contactsys_web.service.ContactService;
import com.xp.contactsys_web.service.impl.ContactServiceImpl;
public class UpdateContactServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//1.接收参数
String id = request.getParameter("id");
String name = request.getParameter("name");
String gender = request.getParameter("gender");
String age = request.getParameter("age");
String phone = request.getParameter("phone");
String email = request.getParameter("email");
String qq = request.getParameter("qq");
//封装成Contact对象
Contact contact = new Contact();
contact.setId(id);
contact.setName(name);
contact.setGender(gender);
contact.setAge(Integer.parseInt(age));
contact.setPhone(phone);
contact.setEmail(email);
contact.setQq(qq);
//2.调用service修改联系人的方法
ContactService service = new ContactServiceImpl();
service.updateContact(contact);
//3.跳转到查询联系人的页面
response.sendRedirect(request.getContextPath()+"/ListContactServlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.xp.contactsys_web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xp.contactsys_web.service.ContactService;
import com.xp.contactsys_web.service.impl.ContactServiceImpl;
public class DeleteContactServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在火狐浏览器中以Get方式提交带参数的数据,会重复提交两次。
System.out.println("删除联系人");
//1.接收id
String id = request.getParameter("id");
//2.调用service删除联系人的方法
ContactService service = new ContactServiceImpl();
service.deleteContact(id);
//3.跳转到查询联系人的页面
response.sendRedirect(request.getContextPath()+"/ListContactServlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
<%@ page language="java" import="java.util.*,com.xp.contactsys_web.entity.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
查询所有联系人
查询所有联系人(jsp版本)
编号
姓名
性别
年龄
电话
邮箱
QQ
操作
${varSta.count }
${con.name }
${con.gender }
${con.age }
${con.phone }
${con.email }
${con.qq }
修改 删除
[添加联系人]
<%@ page language="java" import="java.util.*,com.xp.contactsys_web.entity.*" pageEncoding="utf-8"%>
添加联系人
添加联系人
<%@ page language="java" import="java.util.*,com.xp.contactsys_web.entity.*" pageEncoding="UTF-8"%>
My JSP 'updateContact.jsp' starting page
修改联系人