版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
jdbc数据库连接并进行增删改查
1. 首先需要有一个数据库连接的jar包 mysql-connector-java-5.1.39-bin.jar
复制到创建的项目下
并点击Build Path -->Add To Build Path进行解压,就可进行使用
2. 创建一个连接工具类DBUtil.java。(单例模式)
driver = "com.mysql.jdbc.Driver":数据库连接jar包中的Driver类路径
url = "jdbc:mysql://localhost:3306/job_user_power":当前数据库路径,主机ip为localhost(本机),端口号默认3306,要连接的数据库名是:job_user_power. (这个数据库中是我的一个小项目,本文只摘用项目中的一张表进行jdbc的描述)
username = "root":数据库用户名
password = "admin":数据库密码
Connection con = null: 数据库连接对象
Class.forName(driver):加载驱动类
con = DriverManager.getConnection(url, username, password): 获取连接对象
//导包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/job_user_power";
private static String username = "root";
private static String password = "admin";
private static Connection con = null;// 返回数据库连接
/*静态资源只加载一次*/
static {
// 加载驱动类
try {
Class.forName(driver);
con = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (con != null) {
System.out.println("数据库连接成功!");
}
}
}
/*返回数据库连接对象*/
public static Connection getCon() {
return con;
}
}
3. 准备数据库
-- 创建users表
CREATE TABLE users(
uid INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(30),
uage INT,
-- 一个外键关联与(此文无关,本人项目中的代码段)
jid INT,
CONSTRAINT fk_users_job FOREIGN KEY(jid) REFERENCES job(jid)
);
-- 插入数据
INSERT INTO users VALUES(NULL,'小山',21,1);
INSERT INTO users VALUES(NULL,'小猛',21,2);
INSERT INTO users VALUES(NULL,'小莉',20,3);
INSERT INTO users VALUES(NULL,'小青',20,4);
INSERT INTO users VALUES(NULL,'小明',21,4);
INSERT INTO users VALUES(NULL,'小杰',20,5);
4. 操作数据库,对数据进行简单的增删改查
//导包
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
//导入第二步创建的DBUtil.java包
import cn.bjwlxy.utill.DBUtil;
//创建操作users表的类
public class UserData {
private Connection con = null;// 返回数据库连接对象
//构造方法中获取连接
public UserData() {
DBUtil dbUtil = new DBUtil();
con = dbUtil.getCon();
}
/**
* 增加数据
*/
public void insertData() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入该职员的姓名:");
String uname = sc.nextLine();
System.out.print("请输入该职员的年龄:");
String uage = sc.nextLine();
System.out.print("请输入该职员的岗位编号:");
String jid = sc.nextLine();
try {
String sql = "insert into users values(null,?,?,?)";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1, uname);
pst.setObject(2, uage);
pst.setObject(3, jid);
int executeUpdate = pst.executeUpdate();
if (executeUpdate == 1) {
System.out.println("添加职员成功!");
pst.close();//释放资源
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 删除数据
*/
public void dropData() {
try {
System.out.print("请输入要删除的职员编号:");
int uid = new Scanner(System.in).nextInt();
String sql = "delete from users where uid=?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1, uid);
int executeUpdate = pst.executeUpdate();
if (executeUpdate == 1) {
System.out.println("删除职员成功!");
pst.close();//释放资源
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 改正数据
*/
public void updateData() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入你要更改的职员编号:");
int uid = sc.nextInt();
System.out.print("请输入你将把编号为" + uid + "的岗位编号改正为:");
int jid = sc.nextInt();
try {
String sql = "update users set jid=? where uid=?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1, jid);
pst.setObject(2, uid);
int executeUpdate = pst.executeUpdate();
if (executeUpdate == 1) {
System.out.println("更改职员成功!");
pst.close();//释放资源
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 查看数据
*/
public void showData() {
try {
// Statement st = con.createStatement();
String sql = "select users.uid,users.uname,users.uage from users";
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
System.out.println("职员如下:");
System.out.println("\t编号" + "\t姓名" + "\t年龄");
String uid, uname, uage;
while (rs.next()) {
uid = rs.getString("uid");
uname = rs.getString("uname");
uage = rs.getString("uage");
System.out.println("\t" + uid + "\t" + uname + "\t" + uage);
}
//释放资源
pst.close();
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5. 测试
扫描二维码关注公众号,回复:
7659063 查看本文章
public static void Test() {
public static void main(String[] args){
//创建一个操作users表的类对象
UserData userData = new UserData();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("操作职员表:");
System.out.println("\t1.添加职员" + "\r\n\t2.删除职员" + "\r\n\t3.修改数据"
+ "\r\n\t4.查询职员"+"\r\n\t5.退出测试");
System.out.print("输入选择:");
int choose = sc.nextInt();
switch (choose) {
case 1:
userData.insertData();
break;
case 2:
userData.dropData();
break;
case 3:
userData.updateData();
break;
case 4:
userData.showData();
break;
case 5:
// 关闭数据库连接对象,释放资源
DBUtil.getCon().close();
break;
default:
System.out.println("输入错误!");
break;
}
}
}
}
测试结果:
工具类:采用单例模式,使用类中静态成员,保证数据库只需连接一次,减少数据库资源浪费。