基本使用步骤
1.注册驱动
2.获取连接
3.编写SQL语句
4.创建preparedstatement并且传入SQL语句结构
5.占位符赋值
6.发送SQL语句,并且获取结果
7.结果集解析
8关闭资源
使用API总结
1.注册驱动
方案1:调用静态方法,但是会注册两次
DriverManager.registerDriver(new com.mysql.cij.jdbc. Driver())
方案2:反射触发
Class.forName("com.mysql.cj.jdbc.Driver");
这个方法会注册两次驱动,后面有利用反射的方法注册驱动
2.获取连接
Connection connection =DriverManager.gerConnection(); 3 (String url, String user , String password) 2 (String url, Properties info(user password)) 1 (String url?user=账号&password=密码)
参数 url :
jdbc:数据库厂商名://IP地址:port/数据库名 (如果是本机数据库且port端口为默认的3306 的话 可以省略为 jdbc:数据库厂商名:///数据库名) 数据库厂商名可以为:mysql或orcale
3.创建statement
静态 :
Statement statement =connection .createStatement();
预编译 :
PreparedStatement preparedstatement = connection.preparedStatement(sql语句结构);
4.占位符赋值
preparedstatement.setObject(?的位置 从左到右 从1 开始,值)
5.发送SQL语句获取结果
int rows =excuteUpdate(); // 非DQL Rusultset = executeQurey();//DQL
6.查询结果集解析
//移动光标指向行数据 next();if(next()) while(next()) //获取列数据即可 get类型(int 列的下角标 从1 开始|int列的label(别名或者列名)) //获取列的信息 getMetadata() ; ResultsetMetaData对象 包含的就是列的信息 getColumnCount(); | getCloumLebal(index)
7.关闭资源
close();
完整实现代码:
package com.atguigu.api.preparedstatement;
import com.sun.org.apache.bcel.internal.generic.ACONST_NULL;
import org.junit.jupiter.api.Test;
import javax.sql.ConnectionEvent;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PSCURDPart {
// 测试方法需要导入junit的测试包
@Test
public void testInert() throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu", "root", "1234");
//3.编写SQL语句结果,动态值的部分使用?代替
String sql="insert into t_user(account,password,nickname) values(?,?,?);";
//4.创建preparedStatement,并且传入SQL语句结果
PreparedStatement preparedStatement=connection.prepareStatement(sql);
//5.占位符赋值
preparedStatement.setObject(1,"test");
preparedStatement.setObject(2,"test");
preparedStatement.setObject(3,"二狗子");
//6.发送SQL语句
int rows = preparedStatement.executeUpdate();
//7.输出结果
if(rows >0 ) System.out.println("数据插入成功! ");
else System.out.println("数据插入失败! ");
//8.关闭资源
preparedStatement.close();
connection.close();
}
@Test
public void testUpdate() throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
Connection connection=DriverManager.getConnection("jdbc:mysql:///atguigu","root","1234");
//3.编写SQL语句结果,动态值的部分使用?代替
String sql="update t_user set id = ? where account = ?;";
//4.创建preparedStatement,并且传入SQL语句结果
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//5.占位符赋值
preparedStatement.setObject(1,3);
preparedStatement.setObject(2,"test");
//6.发送SQL语句
int rows = preparedStatement.executeUpdate();
//7.输出结果
if(rows>0) System.out.println("数据修改成功! ");
else System.out.println("数据修改失败! ");
//8.关闭资源
preparedStatement.close();
connection.close();
}
@Test
public void testDelete() throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
Connection connection=DriverManager.getConnection("jdbc:mysql:///atguigu","root","1234");
//3.编写SQL语句结果,动态值的部分使用?代替
String sql="delete from t_user where id=?;";
//4.创建preparedStatement,并且传入SQL语句结果
PreparedStatement preparedStatement= connection.prepareStatement(sql);
//5.占位符赋值
preparedStatement.setObject(1,3);
//6.发送SQL语句
int i = preparedStatement.executeUpdate();
//7.输出结果
if(i>0) System.out.println("数据删除成功! ");
else System.out.println("数据删除失败! ");
//8.关闭资源
preparedStatement.close();
connection.close();
}
@Test
public void testSelect() throws Exception {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu", "root", "1234");
//3.编写SQL语句结果,动态值的部分使用?代替
String sql = "select id,account,password,nickname from t_user;";
//4.创建preparedStatement,并且传入SQL语句结果
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//5.占位符赋值
//6.发送SQL语句
ResultSet resultSet = preparedStatement.executeQuery();
//7.输出结果
List<Map> list = new ArrayList<>();
//获取当前结果及列的信息对象!
ResultSetMetaData metaData= resultSet.getMetaData();;
//有了它以后, 我们可以水平遍历列!
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
// 一行数据对应一个map
Map map = new HashMap();
//纯手动取值!!
// map.put("id", resultSet.getInt("id"));
// map.put("account", resultSet.getString("account"));
// map.put("password", resultSet.getString("password"));
// map.put("nickname", resultSet.getString("nickname"));
//自动遍历取值
for(int i=1;i<=columnCount;i++)
{
//获取指定下角标的值!
Object value = resultSet.getObject(i);
//获取指定下角标的列的名称!
String columnLabel = metaData.getColumnLabel(i);
map.put(columnLabel,value);
}
list.add(map);
}
//8.关闭资源
System.out.println("list =" + list);
resultSet.close();
preparedStatement.close();
connection.close();
}
}