JDBC(Java 连接数据库)介绍

  • JDBC(Java DataBase Connectivity):Java连接数据库技术

  • JDBC是用于执行SQL语句的Java API,为多种关系型数据库提供统一访问,可以通过java代码操作数据库

  • 好处:各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发 . 可随时替换底层数据库,访问数据库的Java代码基本不变,导入数据库驱动jar包即可

执行步骤

![[Pasted image 20240921111850.png]]

1.注册驱动

Class.forName:动态加载类的方法,接受类名并返回class对象.

Class.forName("com.mysql.cj.jdbc.Driver");
  • Driver类中有注册驱动的代码,而且是静态代码,所以只要Driver类被调用,就会执行静态代码块.
static {  
    try {  
        DriverManager.registerDriver(new Driver());  
    } catch (SQLException var1) {  
        throw new RuntimeException("Can't register driver!");  
    }  
}
2.获取连接
  • 获取普通执行者对象:Statement createStatement();
  • 获取预编译执行者对象:PreparedStatement prepareStatement(String sql),SQL 查询使用 ? 作为占位符,然后通过 pstmt.setString(1, "Sales") 绑定参数,避免了 SQL 注入.
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database example", "root", "wjq");
3.定义sql
4.获取并执行sql
  • Statement:执行sql语句的对象.
    执行DML语句:int executeUpdate(String sql),返回int(影响的行数),可用来执行insert,update、delete语句。

    执行DQL语句:ResultSet executeQuery(String sql), 返回值ResultSet(结果集),用于执行select语句。

  • ResultSet:结果集对象
    判断结果集中是否还有数据:boolean next(),有数据返回true,并将索引向下移动一行,没有数据就返回false.
    获取结果集中的数据:XXX getXxx(“列名”), XXX代表数据类型), 例如:String getString(“name”); int getInt(“age”);

  • setString(int parameterIndex, String value) 用于设置 SQL 语句中的某个参数(占位符 ?)的值, parameterIndex 表示要设置的参数在 SQL 中的位置(从 1 开始),value :要设置的值.

Statement stat = conn.createStatement();
String sql = "SELECT * FROM works";
ResultSet rs = stat.executeQuery(sql);//执行查询语句

while(rs.next()) {
    System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}
//next():移动指针。如果存在下一行数据返回true,否则返回 false
5.关闭资源
 finally {
            // 关闭资源
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
JDBCUtils工具类:
JDBCUtils:
package StudentManagementProject;  
/*  
 * author: Warren */  
//jdbc工具类,封装了加载驱动,获取连接,关闭连接的方法  
  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.SQLException;  
  
public class jdbc{  
  
    private static final String URL = "jdbc:mysql://localhost:3306/database example";  //数据库地址  
    private static final String USERNAME = "root";  //数据库用户名  
    private static final String PASSWORD = "wjq";  // 数据库密码  
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";  // 使用驱动类  
  
    static {  
        try {  
            // 加载数据库驱动  
            Class.forName(DRIVER);  
        } catch (ClassNotFoundException e) {  
            throw new RuntimeException("Failed to load JDBC driver", e);  
        }  
    }  
  
    // 获取数据库连接  
    public static Connection getConnection() throws SQLException {  
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);  
    }  
  
    // 关闭数据库连接  
    public static void closeConnection(Connection connection, java.sql.Statement statement, java.sql.ResultSet resultSet) throws SQLException {  
        if (resultSet != null) {  
            resultSet.close();  
        }  
        if (statement != null) {  
            statement.close();  
        }  
        if (connection != null) {  
            connection.close();  
        }  
    }  
}
使用jdbc工具类
package StudentManagementProject;  
  
import StudentManagementProject.jdbc;  
  
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
/*  
 * author: Warren */public class pro {  
    public static void main(String[] args) {  
        Connection conn=null;  
        Statement statement=null;  
        ResultSet resultSet=null;  
        try {  
            Connection connection = jdbc.getConnection();//使用工具类中方法获取连接  
  
            String sql = "update works set name='jimm' where id=4";//定义sql  
  
            statement = connection.createStatement();//获取执行sql对象  
  
            int i = statement.executeUpdate(sql);//执行sql  
            System.out.println("受影响的行数为" + i);  
            String sql1 = "select * from works where name='Jimm'";  
  
            resultSet = statement.executeQuery(sql1);//获取结果集  
            while (resultSet.next()) {  
                //打印结果  
                System.out.println(resultSet.getString("name"));  
                System.out.println(resultSet.getString(3));;  
            }  
  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
        try {  
            jdbc.closeConnection(conn,statement,resultSet);  
        } catch (SQLException e) {  
            throw new RuntimeException(e);  
        }  
    }  
}

示例:

插入,修改,删除等:
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.Statement;  
  
public class haha {  
    public static void main(String[] args)throws Exception {  
        Connection connection = null;  
        Statement statement = null;  
  
        try {  
            // 1. 加载JDBC驱动  
            Class.forName("com.mysql.cj.jdbc.Driver");  
  
            // 2. 建立连接  
            String url = "jdbc:mysql://localhost:3306/database example";  
            String user = "root";  
            String password = "wjq";  
            connection = DriverManager.getConnection(url, user, password);  
  
            // 3. 创建Statement对象  
            statement = connection.createStatement();  
  
            // 4. 定义要执行的SQL插入语句  
            String sql = "INSERT INTO works VALUES(888, 'wjq', 'java工程师', 1111, 3532, 2754, 1, 355, 535, 6346);";  
  
  
            // 5. 执行插入操作,返回受影响的行数  
            int rowsInserted = statement.executeUpdate(sql);  
            System.out.println("插入的行数: " + rowsInserted);  
			 // 6. 执行删除操作,返回受影响的行数  
            //String sql = "DELETE FROM works WHERE 员工姓名 = 'warren' or 员工姓名 = 'Ricci'";  
            //int rowsDeleted = statement.executeUpdate(sql);  
            //System.out.println("删除的行数: " + rowsDeleted); 


            // 7. 执行修改操作并返回受影响的行数  
              //String sql = "UPDATE works SET 实发工资 = 28888 WHERE 职位 = '数据分析师'";  
            //int rowsUpdated = statement.executeUpdate(sql);  
            //System.out.println("更新的行数: " + rowsUpdated); 
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            // 6. 关闭资源  
            try {  
                if (statement != null) statement.close();  
                if (connection != null) connection.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}
查询:
package StudentManagementProject;  
  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.Statement;  
  
public class jdbc {  
    public static void main(String[] args) {  
        Connection connection = null;  
        Statement statement = null;  
        ResultSet resultSet = null;  
  
        try {  
            // 1. 加载JDBC驱动    
Class.forName("com.mysql.cj.jdbc.Driver");  
  
            // 2. 建立连接    
String url = "jdbc:mysql://localhost:3306/database example";  
            String user = "root";  
            String password = "wjq";  
            connection = DriverManager.getConnection(url, user, password);  
  
            // 3. 创建Statement(sql执行)对象    
statement = connection.createStatement();  
  
            // 4. 定义要执行的SQL查询语句    
String sql = "SELECT * FROM works";  
  
            // 5. 执行查询操作    
resultSet = statement.executeQuery(sql);  
  
            // 6. 处理查询结果    
while (resultSet.next()) {  
                // 根据列名或列索引获取列值    
String id = resultSet.getString("员工编号");  
                String name = resultSet.getString("员工姓名");  
                int lose = resultSet.getInt("旷工");  
                String position = resultSet.getString("职位");  
                double salary = resultSet.getDouble("实发工资");  
  
                // 打印查询结果    
System.out.println("员工编号: " + id + ", 员工姓名: " + name + ", 旷工: " + lose +  
                        ", 职位: " + position + ", 实发工资: " + salary);  
            }  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            // 7. 关闭资源    
try {  
                if (resultSet != null) resultSet.close();  
                if (statement != null) statement.close();  
                if (connection != null) connection.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值