1.步骤
1.导入jar包
一般可以在百度直接搜索可以找到,如果对版本有要求的话进行相应版本的搜索,我这里是8.0.16版本的
点我也可以下载 2.加载驱动:
Class.forName("com.mysql.jdbc.Driver");
此时会抛出一个异常,可以根据idea的提示将其抛出。
3.通过驱动管理器获取连接对象
注意url中要带参数的话用?进行连接,连接第二个参数时使用&连接,在这里我已经将其乱码问题解决,大家可以放心使用,用户名称和密码根据自己设置的自行修改。
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&characterEncoding=utf-8","root","123456");
4.sql语句的编写:
String sql = "insert into t_fruit values(0,?,?,?,?)";
5.创建预处理命令:
PreparedStatement psmt = conn.prepareStatement(sql);
6.填充参数:
psmt.setString(1,"榴莲");
psmt.setInt(2,15);
psmt.setInt(3,100);
psmt.setString(4,"榴莲是一种神奇的水果");
6.执行更新(增删改),返回影响的行数
int count = psmt.executeUpdate();;
System.out.printf(count>0 ? "添加成功!" :"添加失败!");
7.释放资源(关闭链接,先关闭psmt,再关闭conn)
psmt.close();
conn.close();
2.增删改查的代码演示:
1.插入一个数:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class demo02 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.通过驱动管理器获取链接对象
// url中需要带参数用?连接第二个参数开始使用&连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&characterEncoding=utf-8","root","123456");
// 3.编写SQL语句
// id ,fanme,price,fcount,remark
String sql = "insert into t_fruit values(0,?,?,?,?)";
// 4.创建预处理命令
PreparedStatement psmt = conn.prepareStatement(sql);
// 5.填充参数
psmt.setString(1,"榴莲");
psmt.setInt(2,15);
psmt.setInt(3,100);
psmt.setString(4,"榴莲是一种神奇的水果");
// 6.执行更新(增删改),返回影响的行数
int count = psmt.executeUpdate();;
System.out.printf(count>0 ? "添加成功!" :"添加失败!");
// 7.释放资源(关闭链接,先关闭psmt,再关闭conn)
psmt.close();
conn.close();
}
}
2.更新一个数
import org.gjt.mm.mysql.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class demo03 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Fruit fruit = new Fruit(33, "猕猴桃", "它是水果之王");
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&characterEncoding=utf-8", "root", "123456");
String sql = "update t_fruit set fname =?,remark = ? where fid = ?";
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setString(1, fruit.getFname());
psmt.setString(2, fruit.getRemark());
psmt.setInt(3, fruit.getFid());
int count = psmt.executeUpdate();;
System.out.printf(count>0 ? "修改成功!" :"修改失败!");
psmt.close();
conn.close();
}
}
3.删除一个数
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class demo04 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&characterEncoding=utf-8", "root", "123456");
String sql ="delete from t_fruit where fid = ?";
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setInt(1,4);
int count = psmt.executeUpdate();;
System.out.printf(count>0 ? "删除成功!" :"删除失败!");
psmt.close();
conn.close();
}
}
5,查找所有列的信息:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
//JDBC查询所有列的信息
public class demo05 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&characterEncoding=utf-8", "root", "123456");
// 3.编写SQL语句
String sql ="select *from t_fruit ";
PreparedStatement psmt = conn.prepareStatement(sql);
// 5.执行查询返回的结果集
ResultSet rs = psmt.executeQuery();
// 6.解析结果集
List<Fruit> fruitList = new ArrayList<>();
while (rs.next()){
// 1表示读取当前行第一列的数据
// getint,因为这一列是int类型
// 也可以为结果集的列名
int fid = rs.getInt(1);
String fname =rs.getString("fname");
int price = rs.getInt(3);
int fcount = rs.getInt(4);
String remark = rs.getString(5);
Fruit fruit = new Fruit( fid,fname,price,fcount,remark);
fruitList.add(fruit);
}
rs.close();
psmt.close();
conn.close();
fruitList.forEach(System.out::println);
}
}
6.查找指定信息:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
//JDBC查寻指定的fid的库存记录
public class demo06 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&characterEncoding=utf-8", "root", "123456");
// 3.编写SQL语句
String sql ="select *from t_fruit where fid = ?";
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setInt(1,33);
// 5.执行查询返回的结果集
ResultSet rs = psmt.executeQuery();
// 6.解析结果集
if(rs.next()){
// 1表示读取当前行第一列的数据
// getint,因为这一列是int类型
// 也可以为结果集的列名
int fid = rs.getInt(1);
String fname =rs.getString("fname");
int price = rs.getInt(3);
int fcount = rs.getInt(4);
String remark = rs.getString(5);
Fruit fruit = new Fruit( fid,fname,price,fcount,remark);
System.out.println(fruit);
}
rs.close();
psmt.close();
conn.close();
}
}
其实这么多代码的演示就是修改sql语句,然后注意对获取数据的处理方式就行,
补充
为什要有预处理命令呢:
如果没有预处理命令的话,当处理用户输入进来的不规范的符号,就会使计算机在处理代码的时候将其认为时内部命令,从而不能达到原本的需求,增加预处理命令,就是为了防止不安全事件的发生。