java使用mysql-connector连接mysql。实现简单的增删改查
这是一个简单的Java数据库操作项目,实现了对用户表( user1 )的基本CRUD(增删改查)操作。项目采用了两种不同的实现方式:部分类继承自,部分类独立实现所有功能,用于对比代码量差异。项目结构实体类 :User.java- 存储用户信息基础数据访问类 :- 提供数据库连接、SQL执行和连接关闭等公共方法继承实现类 :(查询操作,42行)(插入操作,25行)非继承实现类 :(删除操作,69行)
·
代码
- 代码结构
├── lib\
│ ├── mysql-connector-j-8.0.33.jar
│ └── mysql-connector-java-5.1.38.jar
├── src\
│ ├── com\
│ │ └── company\
│ │ ├── BaseDao.java
│ │ ├── DeleteSql.java
│ │ ├── InsertSql.java
│ │ ├── Main.java
│ │ ├── SelectSql.java
│ │ └── UpdateSql.java
│ └── pojo\
│ └── User.java
└── wangke.iml
如果继承 BaseDao 就不需要写重复的代码。本文演示了继承和不继承的代码量。用于比对比
- 实体类
public class User {
private Integer uid;
private String username;
private String password;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
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;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
- 连接数据库工具类
package com.company;
import java.sql.*;
public class BaseDao {
Connection connection;
PreparedStatement ps;
ResultSet rs;
// 数据的地址
String url = "jdbc:mysql://127.0.0.1:3306/test";
//数据库的用户名
String username = "root";
//数据库的密码
String password = "1234";
//创建链接
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void getConnection() {
try {
connection = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
//执行SQL
//增删改
public int executeUpdate(String sql, Object... objs) {
getConnection();
try {
ps = connection.prepareStatement(sql);
//传入参数
for (int i = 1; i <= objs.length; i++) {
ps.setObject(i, objs[i - 1]);
}
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
//查
public ResultSet executeQuery(String sql, Object... objs) {
getConnection();
try {
ps = connection.prepareStatement(sql);
//传入参数
for (int i = 1; i <= objs.length; i++) {
ps.setObject(i, objs[i - 1]);
}
return ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//关闭连接
public void close() {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
- 查询
import pojo.User;
import java.sql.*;
public class SelectSql extends BaseDao {
public User getUser(String sql, Object... objs) throws SQLException {
ResultSet rs = this.executeQuery(sql, objs);
User user = new User();
while (rs.next()) {
user.setUid(rs.getInt("uid"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
this.close();
return user;
}
private void close(PreparedStatement ps, Connection connection, ResultSet resultSet) throws SQLException {
resultSet.close();
ps.close();
connection.close();
}
public static void main(String[] args) {
SelectSql selectSql = new SelectSql();
String sql = "select *from user1 where username=?";
User user = null;
try {
user = selectSql.getUser(sql, "张三");
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(user);
}
}
- 新增
import java.sql.SQLException;
public class InsertSql extends BaseDao{
//添加数据
public int addUser(){
String sql = "insert into user1 (uid ,username,password) values(?,?,?)";
int i= this.executeUpdate(sql,10,"老九","123456");
this.close();
return i;
}
public static void main(String[] args) throws SQLException,ClassNotFoundException{
InsertSql insertSql = new InsertSql();
insertSql.addUser();
}
}
- 删除
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeleteSql {
// 数据的地址
String url = "jdbc:mysql://127.0.0.1:3306/text";
//数据库的用户名
String username = "root";
//数据库的密码
String password = "1234";
static {
//加载驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private Connection getConnection() {
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public void init() throws ClassNotFoundException, SQLException {
//创建链接
Connection connection = getConnection();
//执行Sql语句并返回结果集
String sql = "delete from user1 where uid=?";
//预编译
PreparedStatement ps = connection.prepareStatement(sql);
//传入参数
ps.setObject(1, 7);
//影响行数
int i = ps.executeUpdate();
//解析结果
System.out.println("影响行数" + i);
//关闭连接
close(ps, connection);
}
private void close(PreparedStatement ps, Connection connection) throws SQLException {
ps.close();
connection.close();
}
public static void main(String[] args) {
DeleteSql deleteSql = new DeleteSql();
try {
deleteSql.init();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- 修改
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UpdateSql {
// 数据的地址
String url = "jdbc:mysql://127.0.0.1:3306/day23";
//数据库的用户名
String username = "root";
//数据库的密码
String password = "1234";
static {
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private Connection getConnection() {
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public void init() throws ClassNotFoundException, SQLException {
//创建链接
Connection connection = getConnection();
//执行Sql语句并返回结果集
String sql = "update user1 set username=? where uid=?";
//预编译
PreparedStatement ps = connection.prepareStatement(sql);
//传入参数
ps.setObject(1, "田七");
ps.setObject(2, 8);
//影响行数
int i = ps.executeUpdate();
//解析结果
System.out.println("影响行数" + i);
//关闭连接
close(ps, connection);
}
private void close(PreparedStatement ps, Connection connection) throws SQLException {
ps.close();
connection.close();
}
public static void main(String[] args) {
UpdateSql updateSql = new UpdateSql();
try {
updateSql.init();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- 查询2
public class Main {
public static void main(String[] args) throws SQLException {
SelectSql selectSql=new SelectSql();
String sql="select *from user1 where username=?";
User user =selectSql.getUser(sql,"张三") ;
System.out.println(user);
}
}
项目概述
这是一个简单的Java数据库操作项目,实现了对用户表( user1 )的基本CRUD(增删改查)操作。项目采用了两种不同的实现方式:部分类继承自 BaseDao.java ,部分类独立实现所有功能,用于对比代码量差异。
项目结构
- 实体类 :
User.java- 存储用户信息 - 基础数据访问类 :
BaseDao.java- 提供数据库连接、SQL执行和连接关闭等公共方法 - 继承实现类 :
SelectSql.java(查询操作,42行)InsertSql.java(插入操作,25行)
- 非继承实现类 :
DeleteSql.java(删除操作,69行)UpdateSql.java(更新操作,69行)
- 测试类 :
Main.java- 测试查询功能 代码量对比分析
-
继承方式优势 :
- 继承类代码量显著减少:SelectSql(42行)和InsertSql(25行)平均约33.5行
- 直接复用BaseDao中的公共方法(如数据库连接、SQL执行、关闭连接)
- 代码更简洁、可读性更好
-
非继承方式劣势 :
- 非继承类代码量明显更多:DeleteSql(69行)和UpdateSql(69行)均为69行
- 重复实现相同功能(如加载驱动、获取连接、关闭连接)
- 代码冗余、维护成本高
-
对比结果 :
- 非继承类平均代码量(69行)约为继承类(33.5行)的2.06倍
- 继承方式减少了约51.5%的代码量 结论
通过对比可以清晰看到,面向对象编程中的继承机制能有效减少代码量、提高代码复用性和可维护性。本项目中,继承BaseDao.java的类比独立实现的类减少了约一半的代码量,充分体现了继承的优势。
更多推荐


所有评论(0)