JDBC(操作数据库)
程序员文章站
2024-03-21 18:11:28
...
JDBC
简介:
Java database connectivity java数据库连接通过Java代码访问关系型数据库。
类和接口
DriverManager,Connection,Statement,ResultSet
首先通过DriverManager连接驱动获取Connection,连接后通过Statement执行sql语句,结果通过ResultSet获取
-
DriverManager
管理一组JDBC驱动程序的基本服务
作为初始化的一部分,DriverManger类会尝试加载在“jdbc.drivers”系统属性中引用的驱动程序类。方法:
主要API
-
Connection
与特定数据库的连接(回话)。在连接上下文中执行SQL语句并且返回结果。字段
方法:
主要API
createStatement(); -
Statement
用于执行静态SQL语句并且放回它所生产的结果。字段
方法:
重要API
executeQuery(String sql); -
ResultSet
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
ResultSet对象具有指向其当前数据行为的光标。next方法将光标移动到下一行。方法:
重要API
JDBC操作步骤:
- 加载数据库驱动
DriverManager > registerDriver(Driver drive); - 创建与数据库的连接
DriverManager > getConnection(String url,String user.String password); - 编写sql语句
- 执行sql语句
Statement > executeQuery(String sql); - 释放资源(关闭连接)
通过JDBC查询Mysql数据库
具体操作逻辑:注意变更:
JDBC释放资源
Statement相关API:
Connection相关API:
具体做法
JDBC增删改
-
增加
-
删除
-
修改
JDBC封装
配置文件:
相关代码
package com.itheima.jdbcdemo;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
static{
//加载配置文件信息
Properties properties = new Properties();
try {
properties.load(new FileInputStream("jdbc.properties"));
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 释放资源的工具方法
* @param resultSet 结果集
* @param statement
* @param connection 链接
*/
public static void releaseResource(ResultSet resultSet, Statement statement, Connection connection) {
try {
if(resultSet!=null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(statement!=null){
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 从配置文件中获取链接信息 简介到mysql服务端返回一个connection对象
* @return 代表链接的connection 对象
*/
public static Connection getConnection() {
try {
Class.forName(driver);
Connection connection = DriverManager.getConnection(url,username,password);
return connection;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
JDBC登录案例以及SQL注入处理
package com.itheima.jdbcdemo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class LoginDemo {
public static void main(String[] args) {
boolean isLogin = login("zhangsan' or '1==1", "asdfadsf");
// boolean isLogin = login("zhangsan", "123");
System.out.println(isLogin?"登陆成功":"登陆失败");
}
public static boolean login(String username,String password){
//获取链接
Connection connection = JDBCUtils.getConnection();
Statement statement = null;
try {
statement = connection.createStatement();
String sql = "select id from users where username =? and password = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//第一个? 用username去替换
preparedStatement.setString(1, username);
//第二个? 用password去替换
preparedStatement.setString(2, password);
ResultSet resultSet = preparedStatement.executeQuery();
//"select id from users where name ='zhangsan' and password = '123'";
//"select id from users where name ='zhangsan' or '1==1' and password = 'asdfadsf'";
//String sql = "select id from users where username = '"+username+"' and password = '"+password+"'";
//ResultSet resultSet = statement.executeQuery(sql);
//通过preparedStatement处理后变成了 select id from users where username ='zhangsan\' or \'1==1' and password = 'asdfadsf'
return resultSet.next();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
}
上一篇: mySQL批量插入删除操作
下一篇: 效率神器 tmux ,易学易用