一、基本概念
JDBC:官方定义的一套操作所有关系型数据库的规则,即接口各个数据库厂商去实现这套接口,提供数据库驱动jar包。可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
二、使用JDBC操作数据库的基本步骤
1.加载JDBC驱动
2.连接数据库
3.发送SQL语句
4.处理结果集
5.关闭数据库
1.加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
注:需要导入mysql_connector _java_5.1.36_bin.jar包
2.连接数据库
Connection con = DriverManager .getConnection("jdbc:mysql://127.0.0.1:3306/test","root","123456");
方法: static Connection getConnection(String url,String user,String password)
参数:
url : 指定连接的路径
语法:jdbc:mysql://IP地址(域名):端口号/数据库名称
例如:jdbc:mysql://localhost:3306/db20210907
细节: 如果连接的是本机的mysql服务器,并且mysql服务器默认端口号为3306,则url可以简写为:jdbc:mysql:///数据库名称
user : 用户名
password : 密码
常见错误
1.未导入驱动包。
2. URL写错了。写错了。
3.用户名密码错误。
4.驱动包的版本不兼容。
3.发送SQL语句
基本接口
(1)connection
功能:获取执行sql的对象/获取连接对象。
Statement createStatement()
PreparedStatement prepareStatement(String sql)
(2)Statement
实例:
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery("select * from user_data");
boolean execute(String sql) : 可以执行任意的sql(了解)
int executeUpdate(String sql) : 执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句–>没有返回值
返回值:影响的行数,可以通过影响的行数判断DML语句是否执行成功,返回值>0的则成功,反之,则失败。
ResultSet executeQuery(String sql) : 执行(select)语句
(3)PreparedStatement(继承自statement)
实例:
or使前面判断成立,从而使后面的语句全部忽略。从而形成SQL注入。
select * from tb_stu where name = ? and id = ?;
ps.setString(1,"小明"); //把动态SQL的第一个值设为小明。
ps.setInt(1,107); //把第2个问号的值设为107。
4.处理结果集
ResultSet接口常用方法
next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
Frist():使指针返回第一行。从头开始查
last():使指针返回最后一行。
同时,它有多种返回类型方法和两种重载方式。
返回类型:int getInt() , String getString(),Double getDouble(),Object getObject()……
重载方式:getString(String 列名),getString(int 第几列)
三、使用JDBC对数据库进行操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class test3 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Connection con = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager .getConnection("jdbc:mysql://127.0.0.1:3306/test","root","123456");
Statement stmt = null;
stmt = con.createStatement();
//插入
String sql = "insert into user_data (id,name,salary,age) values(5,'小唐','2000','18')";
int result1 = stmt.executeUpdate(sql);
System.out.println("有" + result1 +"行记录被修改 ");
//修改
String sql1 = "update user_data set name = '小小明' where id = 5";
int result1 = stmt.executeUpdate(sql1);
System.out.println("有" + result1 +"行记录被修改 ");
//删除
String sql2 = "delete from user_data where id = 5";
int result1 = stmt.executeUpdate(sql2);
System.out.println("有" + result1 +"行记录被修改 ");
} catch (ClassNotFoundException | SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}