JDBC操作数据库
一、在数据库中建库建表
二、编写程序
- 创建mysql包,存放DB_Helper类,用来连接数据库
- 创建Entity包,存放Emp类,作为用户的实体类
- 创建Dao包,存放EmpDao接口,用来定义方法
- 创建Dao_Impl包,存放接口的实现类EmpDaoImpl
- 创 Test包,存放 Test测试类
具体JDBC简介、架构以及详细的方法可以参考上一篇博客JDBC操作数据库
1.添加数据库信息:
(1)接口EmpDao 定义方法:
// 添加数据库信息
public int addEmp(Emp emp);
(2)接口实现类EmpDaoImpl 中书写方法:
// 添加数据库信息
@Override
public int addEmp(Emp emp) {
int result = 0;
Connection conn = DB_Helper.getConn();
String sql = "insert into emp values(?,?,?,?,?,?,?,?)";
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,emp.getEmpno());
ps.setString(2,emp.getEname());
ps.setString(3,emp.getJob());
ps.setString(4,emp.getMgr());
ps.setString(5,emp.getHiredate());
ps.setDouble(6,emp.getSal());
ps.setDouble(7,emp.getComm());
ps.setInt(8,emp.getDeptno());
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
(3)测试类Test 中运行:
// 在数据库中添加信息
int result = 0;
result = empno.addEmp(new Emp(15,"苏妲己","陪睡","111","2015-10-25",10000,10000,6));
if (result>0){
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
结果是:
2.删除数据库中的信息:
(1)接口EmpDao 定义方法:
// 删除数据库的信息
public int deleteEmp(int empno);
(2)接口实现类EmpDaoImpl 中书写方法:
// 删除数据库中的信息
@Override
public int deleteEmp(int empno) {
int result = 0;
Connection conn = DB_Helper.getConn();
String sql = "delete from emp where empno=?";
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,empno);
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
(3)测试类Test 中运行:
// 在数据库中删除信息
int result = empno.deleteEmp(14);
if (result>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
结果是:
3.修改数据库中的信息:
(1)接口EmpDao 定义方法:
// 修改数据库的信息
public int updateEmp(Emp emp);
(2)接口实现类EmpDaoImpl 中书写方法:
// 修改数据库中的信息
@Override
public int updateEmp(Emp emp) {
int result = 0;
Connection conn = DB_Helper.getConn();
String sql = "update emp set ename=?,job=?,mar=?,hiredate=?,sal=?,comm=?,deptno=? where empno=?";
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(8,emp.getEmpno());
ps.setString(1,emp.getEname());
ps.setString(2,emp.getJob());
ps.setString(3,emp.getMgr());
ps.setString(4,emp.getHiredate());
ps.setDouble(5,emp.getSal());
ps.setDouble(6,emp.getComm());
ps.setInt(7,emp.getDeptno());
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
(3)测试类Test 中运行:
// 在数据库中修改信息
int result = empno.updateEmp(new Emp(1,"狐狸","诱惑","111","2017-12.31",20000,1000,5));
if (result>0){
System.out.println("修改成功");
}else {
System.out.println("修改错误");
}
结果是:
4.批处理数据库信息:(同时处理多条信息)
(1)接口EmpDao 定义方法:
// 批处理数据库中的信息
public int[] addBatchEmp(List<Emp> list);
(2)接口实现类EmpDaoImpl 中书写方法:
// 批处理添加数据库信息
@Override
public int[] addBatchEmp(List<Emp> list) {
int[] result = null;
Connection conn = DB_Helper.getConn();
try {
conn.setAutoCommit(false);
String sql = "insert into emp values(?,?,?,?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
Iterator<Emp> it = list.iterator();
while (it.hasNext()){
Emp emp = it.next();
ps.setInt(1,emp.getEmpno());
ps.setString(2,emp.getEname());
ps.setString(3,emp.getJob());
ps.setString(4,emp.getMgr());
ps.setString(5,emp.getHiredate());
ps.setDouble(6,emp.getSal());
ps.setDouble(7,emp.getComm());
ps.setInt(8,emp.getDeptno());
ps.addBatch();
}
result = ps.executeBatch();
// 需要手动提交数据
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
(3)测试类Test 中运行:
// 批处理数据库中的信息
ArrayList<Emp> list1 = new ArrayList<>();
list1.add(new Emp(16,"张三","偷鸡","111","2014-10-25",8000,1000,2));
list1.add(new Emp(17,"李四","摸狗","111","2014-10-25",8000,1000,2));
int[] result = empno.addBatchEmp(list1);
if (result.length>0){
System.out.println("批处理数据成功");
}else {
System.out.println("批处理数据失败");
}
结果是:
5.连接信息文件properties:
(1)在根目录下面创建File 文件properties 然后输入信息:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/company?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
userName=root
pwd=123456
(2)编写程序运行:
package cn.zbw.Mysql;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DB_Helper {
// 三要素
public static final String URL="jdbc:mysql://localhost:3306/company?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
public static final String USERNAME="root";
public static final String PWD="123456";
// 定义连接的方法
public static Connection conn;
public static Connection getConn(){
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(URL,USERNAME,PWD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeConn(Connection conn){
// 关闭数据库的连接
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 输出连接数据库的内容
// System.out.println(getConn());
Properties pp = new Properties();
try {
pp.load(new FileInputStream("jdbc.properties"));
String driver = pp.getProperty("driver");
String url = pp.getProperty("url");
String userName = pp.getProperty("userName");
String pwd = pp.getProperty("pwd");
try {
Class.forName(driver);
try {
System.out.println(DriverManager.getConnection(url,userName,pwd));
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果是: