# JDBC-MySQL

🐴

# 导入MySQL-jdbc驱动包

在使用java操作MySQL之前需要我们对MySQL有一定的了解MySQL常用语法, 另外我们还需要再下面几件事:

# 初始化驱动包

我们完成上面的步骤后,需要再项目中初始化MySQL-jdbc驱动包,我们使用Class.forName("com.mysql.jdbc.Driver"); 来初始化驱动

public class JDBC{
  public static void main(String[] args){
    try{
        // 初始化驱动
        // 如果忘了导入,就会报ClassNotFoundException 错误
        Class.forName("com.mysql.jdbc.Driver");
    }catch (ClassNotFoundException e){
        e.printStackTrace();
    }
  }
}

# 建立数据库连接

javaConnection 表示数据库的连接,该方法的创建方式:

Connection c = DriverManager.getConnection(url,user,password);

Connection中常用的对象有

方法 描述
createStatement() 创建向数据库发送sql的statement对象。
prepareStatement(sql) 创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql) 创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit) 设置事务是否自动提交。
commit() 在链接上提交事务。
rollback() 在此链接上回滚事务。

在建立数据库前我们需要确定数据库的位置,账户以及密码等。比如这些信息如下

  • 数据库ip地址:127.0.0.1
  • 数据库端口号:3306 (一般默认)
  • 数据库名称:students
  • 账户:root
  • 密码:admin

知道以上信息后,java连接MySQL数据库如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBC{
  public static void  main(String[] args){
    try{
        // 初始化驱动
        // 如果忘了导入,就会报ClassNotFoundException 错误
        Class.forName("com.mysql.jdbc.Driver");
    }catch (ClassNotFoundException e){
        e.printStackTrace();
    }
    
    // 相关数据
    final String IP =  "127.0.0.1";
    final int PORT = 3306;
    final String DB_URL = "jdbc:mysql://" + IP + ":" +PORT +"/students?characterEncoding=UTF-8";
    final String USER_NAME = "root";
    final String PASSWORD = "admin";

    try{
       // 连接数据库
        Connection c = DriverManager.getConnection(DB_URL,USER_NAME,PASSWORD);
    }catch (SQLException e){
        e.printStackTrace();
    }
  }
}

# 执行SQL语句

执行SQL需要先建立执行对象,我们这里讲两种,一种时通过Statement创建的对象,另一种就是使用PreparedStatement创建的对象。他们有又几个常用的方法如下表:

方法 描述
executeQuery(String sql) 用于向数据发送查询语句。
executeUpdate(String sql) 用于向数据库发送insert、update或delete语句
execute(String sql) 用于向数据库发送任意sql语句
addBatch(String sql) 把多条sql语句放到一个批处理 中。
executeBatch() 向数据库发送一批sql语句执行。
  • executeQuery 主要用于单个结果集语句(常配合SELECT语句)
  • execute 方法可以执行查询语句,然后通过getResultSet,将结果集取出来,execute返回的值是布尔值,true表示执行的是查询语句,而false表示的是增删改语句
  • executeUpdate 方法不能执行查询语句,返回的值是int, 表示多少数据受到了影响

# Statement对象

使用Statement执行

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

try(
  // 连接数据库
  Connection c = DriverManager.getConnection(DB_URL,USER_NAME,PASSWORD);
  Statement s = c.createStatement();
){
    String sql = "insert into student(name,age,score) values("+
                    "'小明'" + ","+
                    23 + ","+
                    70 +
                    ")";

    // 使用execute发送要执行sql
    s.execute(sql);

}catch (SQLException e){
    e.printStackTrace();
}

# PreparedStatement对象

PreparedStatement也是用来执行sql语句的,它表示预编译SQL对象 只不过PreparedStatement对象需要先创建执行语句,在向该对象中设置要存储的数据。

使用PreparedStatement对象执行

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;

// 代码

String sql = "insert into student(name,age,score) values(?,?,?)";
try(
  // 连接数据库
  Connection c = DriverManager.getConnection(DB_URL,USER_NAME,PASSWORD);
  PreparedStatement p = c.preparedStatement(sql); // 创建PreparedStatement
){
    // 使用execute发送要执行sql
    p.setString(1,"小明"); // 从1开始
    p.setInt(2,23);
    p.setFloat(3,89.5f);

    p.execute();
}catch (SQLException e){
    e.printStackTrace();
}

# Statement与PreparedStatement

从上面我们可以看出StatementPreparedStatement语法使用上是有区别的,

  • Statement需要字符串拼接要插入的数据与sql语句,而PreparedStatement是先设置好sql语句,在对值进行设置
  • PreparedStatement的性能要比Statement更快
  • PreparedStatement的代码可读性要比Statement更好
  • PreparedStatement的书写方式更好的防止SQL注入式攻击

# 常见执行方式

# execute

execute方法可以向数据库发送任意的sql语句,execute返回的值是布尔值,true表示执行的是查询语句,而false表示的是增删改语句。

// 删除
String sql = "delete Students where id=1";
statement.execute(sql);

使用execute查询数据时,提供了一个ResultSet方法,来获取结果集,该结果集中常用的方法有:

方法 描述
next() 移动到下一行
previous() 移动到前一行
absolute(int row) 移动到指定行
beforeFirst() 移动resultSet的最前面。
afterLast() 移动到resultSet的最后面

操作如下:

import java.sql.*

// 变量s 为 Statement
String sql = "select * from student";
s.execute(sql);
ResultSet rs =  s.getResultSet();

rs.absolute(3);
System.out.println(rs.getInt("age")); // 打印第三个数据的age

while (rs.next()){
    System.out.println(rs.getString("name"));
}

# executeUpdate

executeUpdateexecute功能差不多,只不过executeUpdate 不能够进行查询。

# executeQuery

executeQuery 常用于执行sql查询语句,只能执行select语句

import java.sql.*

// 变量s 为 Statement
String sql = "select * from student";
s.executeQuery(sql);
ResultSet rs =  s.getResultSet();

rs.absolute(3);
System.out.println(rs.getInt("age")); // 打印第三个数据的age

while (rs.next()){
    System.out.println(rs.getString("name"));
}

// 获取总页数操作
String sql2 = "select count(*) from hero";
ResultSet rs2 = s.executeQuery(sql2);
int total = 0;
while (rs2.next()) {
    total = rs2.getInt(1);
}
最近更新时间: 7/2/2021, 11:27:27 AM