JDBC的介绍与使用
一、JDBC是什么
JDBC,全称是Java Database Connectivity,它是一套统一的基于Java语言的关系数据库编程接口规范,该规范允许你把SQL语句作为参数通过JDBC接口发送给远端数据库,远端数据库接受到你的SQL后进行语法分析、验证,然后执行、响应。
用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API
二、JDBC API的使用
- 导入jdbc连接jar包,如果本地MYSQL是5.x版本请使用5.x的驱动包
mysql-connector-java-8.0.18
- 注册驱动
#方案一 注册驱动
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
#方案二 通过反射加载驱动
Class.forName("com.mysql.cj.jdbc.Driver()");
- 获取连接
#jdbc.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase
username=root
password=root
#方式一
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=UTC","root","mysqlroot");
#方式二
#创建Properties对象
Properties info = new Properties();
#加载本地properties文件
info.load(new FileInputStream("jdbc.properties"));
string user = info.getProperty("user");
String passworld = info.getProperty("passworld");
String driver = info.getProperty("driver");
String url = info.getProperty("url");
#获取连接
Connection connection = DriverManager.getConnection(url,user,passworld);
- 创建执行SQL语句的命令对象
// 使用Statement 创建执行对象,适用于执行一次或不带参数的 SQL,存在 SQL 注入风险 -->
Statement statement = connection.createStatement();
// 使用PreparedStatement 创建预编译执行对象,适用于复杂 SQL 创建,没有SQL 注入风险
PreparedStatement statement = connection.prepareStatement(sql);
String sql = "select count(*) from admin where username=? and password=?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, username);//设置第一个占位符的值
statement.setString(2, password);//设置第二个占位符的值
- 执行操作
// 只针对增删改返回受影响的行数
int update = statement.executeUpdate(sql);
// 查询返回结果集
ResultSet rs = statement.executeQuery();
// 执行任意sql语句,返回boolean
boolean bol= statement.execute();
- ResultSet结果对象接口
-
next();下移一行,返回当前行是否有值
-
prevlous();上移一行,返回当前行是否有值
-
getXX(列索引列名|别名);返回对应列的值,接收类型为XX
-
getObject(列索引列名|别名);返回对应列的值,接收类型为Object
- ResultSetHandler接口
- BeanHandler:将结果集的第一行,封装成对象,并返回 new BeanHandler<>(xx.class)
- BeanListHandler:将结果集中的所有行,封装成对象的集合,并返回 new BeanListHandler<>(xx.class)
- ScalarHandler:将结果集中的第一行第一列,以Object形式返回 new ScalarHandler()
- QueryRunner类使用
QueryRunner queryRunner = new QueryRunner();
String sql = "select * from emp";
Object[] objects = queryRunner.query(connection, sql, new ArrayHandler());
for (Object object : objects) {
if (object != null) {
System.out.print(object.toString());
}
}
#update(connection,sql,params);执行任何增删改语句
#params 为参数
#query(connection sql,ResultSetHandler,params);执行任何查询语句
#ResultSetHandler 返回结果对象关系映射器
三、具体示例
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtil {
//静态代码块
static {
ClassLoader classLoader = JDBCUtil.class.getClassLoader();
InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
try {
properties.load(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
}
private static String driver;
private static String url;
private static String username;
private static String password;
//获取连接
public static Connection getConnection() {
//Driver driver;
Connection connection=null;
//String url="jdbc:mysql://localhost:3306/user";
try {
// driver = new Driver();
// DriverManager.registerDriver(driver);
Class.forName(driver);
connection= DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
//关闭连接
public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
if(connection!=null)
{
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null)
{
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(resultSet!=null)
{
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//登录测试
public static void login(){
Connection connection = JDBCUtil.getConnection();
String sql="select * from user where account=? and password=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,account);
preparedStatement.setString(2,password);
ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.next())
{
String name=resultSet.getString("account");
System.out.println(name+"登录成功!");
}
else
{
System.out.println("登录失败!");
}
JDBCUtil.close(connection, preparedStatement, resultSet);
}
public static void main(String[] args){
JdbcUtil.login();
}
}