JDBC全称是Java DataBase Connectivity,顾名思义是用来java用来连接数据库的。
用JDBC访问数据库需要第三方类,所以首先需要导入第三方类的jar包,不同的数据库提供了不同的jar包,可以在官网下载。
下载了jar,将其复制在项目lib文件下,然后添加到library。
JDBC编程步骤:
//1.通过反射加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建链接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/people?useSSL=true&characterEncoding=utf8","root","root");
//3.编写sql语句
String sqlstr = "SELECT * FROM tb_userinfo"
//4.创建Statement或者PreparedStatement
PreparedStatement pstmt =conn.prepareStatement(sqlstr);
//5.执行sql
//6.处理结果集(增删改没有)
//7.关闭连接资源 (一定不要忘了)
避免编写重复代码,一般将获取连接和关闭连接资源封装起来。
表结构,表名tb_userinfo
demo结构如下:
DBUtil类
import java.sql.*;
public class DBUtil {
//创建连接
public static Connection getConnection(){
Connection conn = null;
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接 数据库名people
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/people? useSSL=true&characterEncoding=utf8","root","root");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭连接资源
public static void close(ResultSet rs, PreparedStatement pstmt, Connection con){
try {
if(rs!=null) {
rs.close();
}
if(pstmt!=null) pstmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(PreparedStatement stmt, Connection con){
close(null,stmt,con);
}
public static void close( Connection con) {
close(null,con);
}
}
UserInfo类
public class UserInfo {
private int userid;
private String username;
private int userage;
public int getUserid() { return userid; }
public void setUserid(int userid) { this.userid = userid; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public int getUserage() { return userage; }
public void setUserage(int userage) { this.userage = userage; }
public UserInfo(int userid, String username, int userage) {
this.userid = userid;
this.username = username;
this.userage = userage;
}
@Override
public String toString() {
return "("+userid+","+username+","+userage+")";
}
}
UserInfoDAO类
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserInfoDAO {
//查询全部
public List<UserInfo> getUserInfo(){
List<UserInfo> list = new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection(); //获取连接
String sqlstr = "SELECT * FROM tb_userinfo"; //编写sql
pstmt =conn.prepareStatement(sqlstr); //预编译sql
rs = pstmt.executeQuery(); //执行sql命令获取结果集
while(rs.next()){ //如果有数据,rs.next()返回true
list.add(new UserInfo(rs.getInt("id"),rs.getString("name"),rs.getInt("age")));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(rs,pstmt,conn);
}
return list;
}
//添加记录
public void insertUserInfo(UserInfo userInfo) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBUtil.getConnection();
String sqlstr = "insert into tb_userinfo values(?,?,?)";
pstmt = conn.prepareStatement(sqlstr);
pstmt.setInt(1, userInfo.getUserid());
pstmt.setString(2, userInfo.getUsername());
pstmt.setInt(3, userInfo.getUserage());
pstmt.execute(); //执行sql
} catch (SQLException e){
e.printStackTrace();
}finally {
DBUtil.close(pstmt,conn);
}
}
//更新
public void updateUserInfo(UserInfo userInfo) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBUtil.getConnection(); //获取连接
String sqlstr =
"update tb_userinfo set name=? , age=? where id=?"; //编写sql
pstmt =conn.prepareStatement(sqlstr); //预编译sql
pstmt.setInt(3,userInfo.getUserid()); //填坑,补?处的值
pstmt.setString(1,userInfo.getUsername());
pstmt.setInt(2,userInfo.getUserage());
pstmt.executeUpdate(); //执行sql
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(pstmt,conn);
}
}
//删除
public void deleteUserInfo(int id) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBUtil.getConnection(); //获取连接
String sqlstr = "delete from tb_userinfo where id=?"; //编写sql
pstmt =conn.prepareStatement(sqlstr); //预编译sql
pstmt.setInt(1,id); //填坑,补?处的值
pstmt.executeUpdate(); //执行sql
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(pstmt,conn);
}
}
public void deleteUserInfo(UserInfo userInfo){
deleteUserInfo(userInfo.getUserid());
}
}
Control类
public class Control {
public void add(){
UserInfoDAO uDao = new UserInfoDAO();
Scanner scanner = new Scanner(System.in);
System.out.print("输入要添加的id:");
int id = scanner.nextInt();
System.out.print("输入要添加的name:");
String name = scanner.next();
System.out.print("输入要添加的age:");
int age = scanner.nextInt();
UserInfo userInfo = new UserInfo(id,name,age);
uDao.insertUserInfo(userInfo);
}
public void query(){
UserInfoDAO uDao = new UserInfoDAO();
List<UserInfo> userInfos = uDao.getUserInfo();
System.out.println(userInfos.toString());
}
public void del(){
UserInfoDAO uDao = new UserInfoDAO();
Scanner scanner = new Scanner(System.in);
System.out.print("输入要删除的id:");
int id = scanner.nextInt();
uDao.deleteUserInfo(id);
}
public void update(){
UserInfoDAO uDao = new UserInfoDAO();
Scanner scanner = new Scanner(System.in);
System.out.print("输入要修改的id:");
int id = scanner.nextInt();
System.out.print("输入要修改的name:");
String name = scanner.next();
System.out.print("输入要修改的age:");
int age = scanner.nextInt();
UserInfo userInfo = new UserInfo(id,name,age);
uDao.updateUserInfo(userInfo);
}
public static void main(String[] args) {
Control c = new Control();
Scanner scan = new Scanner(System.in);
while(true){
System.out.println("--------------------------");
System.out.println("1.查询\n2.添加\n3.修改\n4.删除\n5.退出");
System.out.print("选择你需要的操作:");
int select = scan.nextInt();
switch(select){
case 1:c.query();
break;
case 2:c.add(); c.query();
break;
case 3:c.update(); c.query();
break;
case 4: c.del(); c.query();
break;
case 5: System.exit(0);
}
}
}
}