介绍JDBC
java数据库连接(Java Database Connectivit),简称JDBC,主要的功能在java与数据库之间建立连接,相当于一个桥梁。是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
执行原理
Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动。
JDBC是接口,驱动是接口的实现类,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。
操作步骤
进行导包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
一、加载驱动
告诉jvm加载的是哪个数据库的驱动
二、建立连接
使用jdbc中的类完成对数据库的连接
三、产生传递sql命令的邮差对象
四、将sql命令交给mysql执行
五、关闭数据库的相应对象
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
//JDBC: Java DataBase Connection java数据库连接技术
public class Add1Test {
public static void main(String[] args) {
try{
//第一步:加载驱动,加载的是mysql数据库的驱动
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";//,3306是端口号,db1是数据库名也可以是其他
String user="root";
String password="123456";
//第二步:建立连接
Connection conn= DriverManager.getConnection(url,user,password);
//sql语句
String sql="INSERT INTO userinfo VALUES(52,'java','男',21,'北京',MD5('123'),1)";
//第三步:产生传递SQL命令的邮差对象
PreparedStatement ps=conn.prepareStatement(sql);
//第四步:将sql命令交由mysql执行
int result=ps.executeUpdate();//执行更新操作,返回受影响的行数
System.out.println("有"+result+"行受到影响");
//关闭数据库相应对象
ps.close();
conn.close();
}catch(ClassNotFoundException e){
System.out.println("类没有找到");
}catch (SQLException e){
System.out.println(e.getMessage());
}
}
}
java面向对象中使用jdbc实现增删改查
bean 包用来对属性进行封装
package bean;
//1、对应数据库中的表userInfo
//2、bean包中的类一般都以Info结尾,以表名开头,首字母大写
public class UserInfo {
/*
1、属性和表中的类意义对应
2、属性名首字母小写,驼峰
3、属性和列相对应
4、属性名尽量和列名一致 user_id-->userId
*/
private Integer userId;
private String userName;
private String userSex;
private Integer userAge;
private String userAddress;
private String userPass;
private Integer userState;
//写好一个封装类 get set 无参构造器 toString (Alt+insert)
public UserInfo() {
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public Integer getUserState() {
return userState;
}
public void setUserState(Integer userState) {
this.userState = userState;
}
@Override
public String toString() {
return "UserInfo{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userSex='" + userSex + '\'' +
", userAge=" + userAge +
", userAddress='" + userAddress + '\'' +
", userPass='" + userPass + '\'' +
", userState=" + userState +
'}';
}
}
db包用来建立连接和关闭连接
package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBManger {
/**这个能够获取到数据库的连接
*user
* @return
*/
public static Connection getConnecti0n(){
Connection conn=null;
try{
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3307/db1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";//db1是数据库名也可以是其他
String user="root";
String password="guo521wen";
//第二步:建立连接
conn= DriverManager.getConnection(url,user,password);
}catch(Exception e){
}
return conn;
}
public static void close(Connection conn, PreparedStatement ps, ResultSet rs){
try{
if(rs!=null){
rs.close();
}
ps.close();
conn.close();
}catch(Exception e){
}
}
}
dao包用来进行控制
package dao;
import bean.UserInfo;
import db.DBManger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/*
1、DAO:Data Access Object
2、一般以bean包的类名为前缀
3、dao包中负责执行CRUD操作
4、一个dao类负责一个表的CRUD,也可以说成是对一个bean类的CRUD
*/
public class UserInfoDAO {
private Connection conn;
private PreparedStatement ps;
private ResultSet rs;
//根据主键获取对应行
public UserInfo findUserById(int userId){
UserInfo ui=new UserInfo();
String sql="select *from userinfo where userid=?";
conn= DBManger.getConnecti0n();
try{
ps=conn.prepareStatement(sql);
ps.setInt(1,userId);
rs=ps.executeQuery();
if(rs.next()){
ui.setUserId(rs.getInt(1));
ui.setUserName(rs.getString(2));
ui.setUserSex(rs.getString(3));
ui.setUserAge(rs.getInt(4));
ui.setUserAddress(rs.getString(5));
}
}catch(Exception e){
}finally{
DBManger.close(conn,ps,rs);
}
return ui;
}
//获取到所有行数据
public List<UserInfo>findAllUser(){
List<UserInfo> list=new ArrayList<>() ;
String sql="select *from userinfo where userstate=1";
conn=DBManger.getConnecti0n();
try{
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
UserInfo ui=new UserInfo();
ui.setUserId(rs.getInt(1));
ui.setUserName(rs.getString(2));
ui.setUserSex(rs.getString(3));
ui.setUserAge(rs.getInt(4));
ui.setUserAddress(rs.getString(5));
list.add(ui);
}
}catch(Exception e){
}finally{
DBManger.close(conn,ps,rs);
}
return list;
}
//添加用户数据到数据库
public boolean saveUser(UserInfo ui){
boolean b=false;
String sql="insert into userinfo values(?,?,?,?,?,md5(?),1)";
conn=DBManger.getConnecti0n();
try{
ps=conn.prepareStatement(sql);
ps.setInt(1,ui.getUserId());
ps.setString(2,ui.getUserName());
ps.setString(3,ui.getUserSex());
ps.setInt(4,ui.getUserAge());
ps.setString(5,ui.getUserAddress());
ps.setString(6,ui.getUserPass());
int n=ps.executeUpdate();//记录更新的次数
if(n>0){
b=true;
}
}catch(Exception e){
}finally{
DBManger.close(conn,ps,null);
}
return b;
}
//删除指定用户,非推荐写法
public boolean removeUser(int userid){
boolean b=false;
String sql="delete from userinfo where userid=?";
conn=DBManger.getConnecti0n();
try{
ps=conn.prepareStatement(sql);
ps.setInt(1,userid);
int n=ps.executeUpdate();
if(n>0){
b=true;
}
}catch(Exception e){
}finally {
DBManger.close(conn,ps,rs);
}
return b;
}
//删除指定用户,推荐写法
public boolean deleteUser(int userid){
boolean b=false;
String sql="update userinfo set userstate=0 where userid=?";
conn=DBManger.getConnecti0n();
try{
ps=conn.prepareStatement(sql);
ps.setInt(1,userid);
int n=ps.executeUpdate();
if(n>0){
b=true;
}
}catch(Exception e){
}finally {
DBManger.close(conn,ps,rs);
}
return b;
}
//修改了指定用户的信息,不能修改密码
public boolean updateUser(UserInfo ui){
boolean b=false;
String sql="update userinfo set username=?,usersex=?,userage=?,useraddress=? where userid=?";
conn =DBManger.getConnecti0n();
try{
ps=conn.prepareStatement(sql);
ps.setString(1,ui.getUserName());
ps.setString(2,ui.getUserSex());
ps.setInt(3,ui.getUserAge());
ps.setString(4,ui.getUserAddress());
ps.setInt(5,ui.getUserId());
int n=ps.executeUpdate();
if(n>0){
b=true;
}
}catch(Exception e){
}finally {
DBManger.close(conn,ps,rs);
}
return b;
}
//分页显示数据
public List<UserInfo> findUserByPage(int page,int size){
List<UserInfo>list=new ArrayList<>();
String sql= "SELECT *FROM userinfo LIMIT ?,?";
conn=DBManger.getConnecti0n();
try{
ps=conn.prepareStatement(sql);
ps.setInt(1,(page-1)*size);
ps.setInt(2,size);
rs=ps.executeQuery();
while(rs.next()){
UserInfo ui=new UserInfo();
ui.setUserId(rs.getInt(1));
ui.setUserName(rs.getString(2));
ui.setUserSex(rs.getString(3));
ui.setUserAge(rs.getInt(4));
ui.setUserAddress(rs.getString(5));
list.add(ui);
}
}catch(Exception e){
}finally {
DBManger.close(conn,ps,rs);
}
return list;
}
}
test包进行测试
package test;
import bean.UserInfo;
import dao.UserInfoDAO;
import java.util.List;
public class test {
private static UserInfoDAO uidao=new UserInfoDAO();
public static void a(){
UserInfo ui=uidao.findUserById(54);
System.out.println(ui);
}
public static void b() {
List<UserInfo> list = uidao.findAllUser();
for (UserInfo ui : list) {//(泛型,被迭代对象,集合)
System.out.print(ui + "\t");
}
}
public static void c(){
UserInfo ui=new UserInfo();
ui.setUserId(81);
ui.setUserName("张三");
ui.setUserSex("男");
ui.setUserAge(18);
ui.setUserAddress("厦门");
boolean b=uidao.saveUser(ui);
if(b){
System.out.println("存储成功");
}
}
public static void d(){
boolean b=uidao.removeUser(54);
if(b){
System.out.println("删除成功");
}
}
public static void d2(){
boolean b=uidao.deleteUser(60);
if(b){
System.out.println("删除成功");
}
}
public static void e(){
UserInfo ui=new UserInfo();
ui.setUserId(81);
ui.setUserName("张");
ui.setUserSex("男");
ui.setUserAge(189);
ui.setUserAddress("厦门");
boolean b=uidao.updateUser(ui);
if(b){
System.out.println("修改成功");
}
}
public static void f(){
List<UserInfo> list = uidao.findUserByPage(1,10);
for (UserInfo ui : list) {//(泛型,被迭代对象,集合)
System.out.print(ui + "\t");
System.out.println();
}
}
public static void main(String[] args) {
//根据主键查找一行数据 a();
//查出所有数据 b();
//增加数据 c();
//删除数据 d();
//删除数据d2();
//修改数据e();
f();//分页显示数据
}
}