使用JDBC連線MySQL資料庫並且完成增刪改查完整程式碼
阿新 • • 發佈:2018-12-08
完整路徑截圖:
**//BaseDao.java檔案**
package cn.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
/**
* 1.四個常量 driver 驅動 url 連線地址 username資料庫登入名 password 密碼
*/
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/myschool?characterEncoding=utf-8";
private static final String USERNAME = "root";
private static final String PASSWOED = "root";
// 2.static塊載入驅動類
static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 3.用DriverManager獲取資料庫連線物件Connection
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWOED);
}
// 4.用connection物件獲取preparedStatement預編譯執行物件
public PreparedStatement createPreparedStatement(Connection conn,
String sql, Object... params) throws SQLException {
PreparedStatement pstmt = conn.prepareStatement(sql);
if (params != null && params.length > 0) {
int i = 1;// 標識“?”佔位符的位置,預設為1,表示第一個?
for (Object p : params) {
pstmt.setObject(i, p);
i++;
}
}
return pstmt;
}
// 5.公用的DML語句執行方法,執行增、刪、改,返回影響行數
public int excuteDML(String sql, Object... params) {
// 獲取Connection連線物件
Connection conn = null;
// 獲取編譯執行物件
PreparedStatement pstmt = null;
int result = 0;
try {
conn = this.getConnection();
pstmt = this.createPreparedStatement(conn, sql, params);
result = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this.closeAll(conn, pstmt, null);
}
return result;
}
protected void closeAll(Connection conn, PreparedStatement stmt,
ResultSet rs) {
if (rs != null) {
try {
rs.close();// 關閉結果集
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 關閉連線物件和執行物件
this.closeConnAndPstmt(conn, stmt);
}
} else {
this.closeConnAndPstmt(conn, stmt);
}
}
private void closeConnAndPstmt(Connection conn, PreparedStatement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
**//StudentServlet.java檔案**
package cn.servlet;
import java.util.List;
import java.util.Scanner;
import cn.entit.Student;
import cn.service.StudentService;
import cn.service.impl.StudentServiceImpl;
public class StudentServlet {
// 定義業務邏輯層介面,指向業務邏輯層實現類
private static StudentService studentService = new StudentServiceImpl();
/**
* 表示控制層:學生表
*
* @param args
* 作用:傳遞使用者輸入的資訊,呼叫後臺業務邏輯層程式碼,實現增刪改查
*
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
do {
System.out.println("請選擇操作型別:1.新增2.刪除3.修改4.查詢5.學號查詢");
int choose = input.nextInt();
switch (choose) {
case 1:
addStudent(input);// 新增
break;
case 2:
delStudent(input);// 刪除
break;
case 3:
insStudent(input);// 修改
break;
case 4:
selStudent();// 查詢
break;
case 5:
// 學號查詢
selectStudentByNo(input);// 查詢
break;
default:
System.out.println("無效輸入");
break;
}
} while (true);
}
private static void selectStudentByNo(Scanner input) {
System.out.println("請輸入您要查詢的學號:");
Integer studentNo = input.nextInt();
List<Student> students = studentService.selectStudentByNo(studentNo);
for (Student s : students) {
System.out.println("學號:" + s.getStudentNo() + "\t姓名"
+ s.getStudentName() + "\t手機號:" + s.getPhone() + "\t生日"
+ s.getBornData());
}
}
private static void selStudent() {
List<Student> students = studentService.selStudent();
for (Student s : students) {
System.out.println("學號:" + s.getStudentNo() + "\t姓名"
+ s.getStudentName() + "\t手機號:" + s.getPhone() + "\t生日"
+ s.getBornData());
}
}
// 修改
private static void insStudent(Scanner input) {
System.out.println("請輸入要修改的學號:");
Integer studentNo = input.nextInt();
System.out.println("請輸入要修改的密碼:");
String loginPwd = input.next();
Student student = new Student();
student.setStudentNo(studentNo);
student.setLoginPwd(loginPwd);
int result = studentService.insStudent(student);
if (result > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失敗");
}
}
// 刪除
private static void delStudent(Scanner input) {
System.out.println("請輸入要刪除的學號");
int studentNo = input.nextInt();
int result = studentService.delStudent(studentNo);
if (result > 0) {
System.out.println("刪除成功");
} else {
System.out.println("刪除失敗");
}
}
// 新增
private static void addStudent(Scanner input) {
// Scanner input = new Scanner(System.in);
System.out.println("請輸入學號:");
Integer studentNo = input.nextInt();
System.out.println("請輸入登入密碼:");
String loginPwd = input.next();
System.out.println("請輸入學生姓名:");
String studentName = input.next();
System.out.println("請輸入性別:");
String sex = input.next();
System.out.println("請輸入年級編號:");
Integer gradelD = input.nextInt();
Student student = new Student(studentNo, loginPwd, studentName, sex,
gradelD);
// 呼叫業務邏輯層新增學生資訊,獲取影響行數
int result = studentService.addStudeng(student);
if (result > 0) {
System.out.println("新增成功");
} else {
System.out.println("新增失敗");
}
}
}
**//StudentService.java檔案**
package cn.service;
import java.util.List;
import cn.entit.Student;
public interface StudentService {
int addStudeng(Student student);
int delStudent(int studentNo);
int insStudent(Student student);
List<Student> selStudent();
List<Student> selectStudentByNo(Integer studentNo);
}
**//StudentServiceImpl.java檔案**
package cn.service.impl;
import java.util.ArrayList;
import java.util.List;
import cn.dao.StudentDao;
import cn.dao.impl.StudengDaoImpl;
import cn.entit.Student;
import cn.service.StudentService;
/**
* 業務邏輯層實現類:學生表 作用:傳遞的引數合法性,及業務邏輯分支判斷,呼叫資料訪問層實現CRUD
*/
public class StudentServiceImpl implements StudentService {
// 建立資料訪問層介面物件,指向資料訪問層實現類
private StudentDao studentDao = new StudengDaoImpl();
@Override
public int addStudeng(Student student) {
int result = 0;// 影響行數
if (student != null) {
if (student.getStudentNo() != null) {
// 當資料合法時,呼叫資料訪問層,執行CRUD
result = studentDao.addStudent(student);
}
}
return result;
}
@Override
public int delStudent(int studentNo) {
int result = 0;// 影響行數
if (studentNo >= 9999 && studentNo <= 100000) {
// 當資料合法時,呼叫資料訪問層,執行CRUD
result = studentDao.delStudent(studentNo);
}
return result;
}
@Override
public int insStudent(Student student) {
int result = 0;// 影響行數
if (student != null) {
if (student.getStudentNo() != null) {
// 當資料合法時,呼叫資料訪問層,執行CRUD
result = studentDao.insStudent(student);
}
}
return result;
}
@Override
public List<Student> selStudent() {
return studentDao.selStudent();
}
@Override
public List<Student> selectStudentByNo(Integer studentNo) {
List<Student> list=new ArrayList<Student>();
if (studentNo >= 9999 && studentNo <= 100000) {
// 當資料合法時,呼叫資料訪問層,執行CRUD
list = studentDao.selectStudentByNo(studentNo);
}
return list;
}
}
**//Student.java檔案**
package cn.entit;
import java.util.Date;
/**
* 學生表實體類
*
* @author Administrator
*
*/
public class Student {
private Integer studentNo;// 學號
private String loginPwd;// 登入密碼
private String studentName;// 學生姓名
private String sex;// 性別
private Integer gradelD;// 年級編號
private String phone;// 手機號
private String address;// 地址
private Date bornData;// 出生日期
private String email;// 郵箱
private String identityCard;// 身份證號
public Student() {
// TODO Auto-generated constructor stub
}
public Student(Integer studentNo, String loginPwd, String studentName,
String sex, Integer gradelD, String phone, String address,
Date bornData, String email, String identityCard) {
super();
this.studentNo = studentNo;
this.loginPwd = loginPwd;
this.studentName = studentName;
this.sex = sex;
this.gradelD = gradelD;
this.phone = phone;
this.address = address;
this.bornData = bornData;
this.email = email;
this.identityCard = identityCard;
}
public Student(Integer studentNo, String loginPwd, String studentName,
String sex, Integer gradelD) {
super();
this.studentNo = studentNo;
this.loginPwd = loginPwd;
this.studentName = studentName;
this.sex = sex;
this.gradelD = gradelD;
}
public Integer getStudentNo() {
return studentNo;
}
public void setStudentNo(Integer studentNo) {
this.studentNo = studentNo;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getGradelD() {
return gradelD;
}
public void setGradelD(Integer gradelD) {
this.gradelD = gradelD;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Date getBornData() {
return bornData;
}
public void setBornData(Date bornData) {
this.bornData = bornData;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getIdentityCard() {
return identityCard;
}
public void setIdentityCard(String identityCard) {
this.identityCard = identityCard;
}
}
**//StudentDao.java檔案**
package cn.dao;
import java.util.List;
import cn.entit.Student;
public interface StudentDao {
int addStudent(Student student);
int delStudent(int studentNo);
int insStudent(Student student);
List<Student> selStudent();
List<Student> selectStudentByNo(Integer studentNo);
}
//StudengDaoImpl.java檔案
package cn.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import cn.dao.StudentDao;
import cn.entit.Student;
import cn.utils.BaseDao;
/**
* 資料訪問層實現類:學生表
*
* @author Administrator 作用:呼叫jdbc連線,執行增刪改查方法,實現資料持久化操作
*/
public class StudengDaoImpl extends BaseDao implements StudentDao {
// 全域性的資料庫3個物件,連線、執行、結果集
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
@Override
public int addStudent(Student student) {
String sql = "insert into student(studentNo, loginPwd, studentName, sex,gradelD)value (?,?,?,?,?)";
Object[] params = { student.getStudentNo(), student.getLoginPwd(),
student.getStudentName(), student.getSex(),
student.getGradelD() };
return this.excuteDML(sql, params);
}
@Override
public int delStudent(int studentNo) {
String sql = "delete from student where studentNo=?";
Object[] params = { studentNo };
return this.excuteDML(sql, params);
}
@Override
public int insStudent(Student student) {
String sql = "update student set loginPwd=? where studentNo=?";
Object[] params = { student.getLoginPwd(), student.getStudentNo() };
return this.excuteDML(sql, params);
}
@Override
public List<Student> selStudent() {
List<Student> list = new ArrayList<Student>();
try {
conn = this.getConnection();// 1.獲取資料庫連線物件
String sql = "select studentNo,studentName,phone,bornData from student";
pstmt = this.createPreparedStatement(conn, sql);// 2.獲取預編譯執行物件
rs = pstmt.executeQuery();// 3.執行查詢語句DQL
while (rs.next()) {
Student student = new Student();
student.setStudentNo(rs.getInt("studentNo"));
student.setStudentName(rs.getString("studentName"));
student.setPhone(rs.getString("phone"));
student.setBornData(rs.getDate("bornData"));
list.add(student);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this.closeAll(conn, pstmt, rs);
}
return list;
}
@Override
public List<Student> selectStudentByNo(Integer studentNo) {
List<Student> list = new ArrayList<Student>();
try {
conn = this.getConnection();// 1.獲取資料庫連線物件
String sql = "select studentNo,studentName,phone,bornData from student where studentNo=?";
pstmt = this.createPreparedStatement(conn, sql);// 2.獲取預編譯執行物件
pstmt.setInt(1, studentNo);
rs = pstmt.executeQuery();// 3.執行查詢語句DQL
while (rs.next()) {
Student student = new Student();
student.setStudentNo(rs.getInt("studentNo"));
student.setStudentName(rs.getString("studentName"));
student.setPhone(rs.getString("phone"));
student.setBornData(rs.getDate("bornData"));
list.add(student);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this.closeAll(conn, pstmt, rs);
}
return list;
}
}
//資料庫student表截圖
本文原創與:美推網,請勿轉載。