Jdbc简介:
JDBC 就是使用Java语言操作关系型数据库的一套API.全称是Java DataBase Connectivity.就是java数据库连接.
Jdbc使用
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取数据库连接
Connection conn = DriverManager.getConnection(url, username, password);
3.编写sql语句
String sql = “update…” ;
4.获取执行sql语句的对象
Statement stmt = conn.createStatement();
5.执行sql语句,并接收结果
stmt.executeUpdate(sql);
6.处理结果
7.释放资源
示例:
public class JdbcTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.注册驱动. 用到了java的spi机制.
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库的连接.
String url = "jdbc:mysql://127.0.0.1/db8";
String userName = "root";
String password = "1234";
//3.获取数据库连接.
Connection connection = DriverManager.getConnection(url, userName, password);
//4.编写sql语句.
String sql = "UPDATE account SET money=1000 WHERE id=1";
//5.获取执行sql语句的对象
Statement statement = connection.createStatement();
//6.执行sql语句,并接受结果.
int result = statement.executeUpdate(sql);
//7.处理结果.
System.out.println(result);
//8.释放资源.
statement.close();
connection.close();
}
}
Connection(连接对象)
作用1:获取执行的sql语句的对象.
-
获取普通的执行sql语句对象(存在注入攻击)
-
Statement createStatement();
-
-
获取预编译的执行sql语句对象(安全)
-
PreparedStatement prepareStatement(sql);
-
-
获取执行存储过程的对象
-
CallableStatement prepareCall(sql);
-
作用2:管理事务
-
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务
-
提交事务:commit();
-
回滚事务:rollback();
示例:
public class JdbcTranTest {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取数据库连接
String url = "jdbc:mysql://127.0.0.1/db6?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
// 3.编写sql语句
String sql1 = "UPDATE account SET money=money+500 WHERE name='李四'";
String sql2 = "UPDATE account SET money=money-500 WHERE name='张三'";
// 4.获取执行sql语句的对象
Statement stmt = conn.createStatement();
try {
//开启事务
conn.setAutoCommit(false);
//执行第一条sql语句
int result1 = stmt.executeUpdate(sql1);
System.out.println(result1);
// System.out.println(2/0); // 模拟异常
//执行第二条sql语句
int result2 = stmt.executeUpdate(sql2);
System.out.println(result2);
//如果到达此处,说明都执行成功了,则提交事务
conn.commit();
} catch (Exception e) {
//如果进到catch,说明出问题了,则回滚事务
conn.rollback();
e.printStackTrace();
}
// 7.释放资源
stmt.close();
conn.close();
}
}
Statement(执行者对象)
作用:用于执行sql语句,并返回结果
执行DML DDL语句
int executeUpdate(sql);
-
参数:要执行的sql语句
-
返回值:影响的行数。
执行DQL语句
ResultSet executeQuery(sql);
-
参数:要执行的sql语句
-
返回值:查询出的结果集
Result结果集对象
1.作用:用于封装查询出的数据结果
-
boolean next(); 判断是否还有数据
-
xxx getXxx(参数) 获取数据
-
xxx:数据类型;如:int getInt(参数) ; String getString(参数)
-
参数
-
int:列的编号,从1开始
-
String:列的名称
-
-
示例
public class JdbcTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.注册驱动. 用到了java的spi机制.
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库的连接.
String url = "jdbc:mysql://127.0.0.1/db8";
String userName = "root";
String password = "1234";
//3.获取数据库连接.
Connection connection = DriverManager.getConnection(url, userName, password);
//4.编写sql语句.
// String sql = "UPDATE account SET money=1000 WHERE id=1";
String sql = "SELECT * FROM account";
//5.获取执行sql语句的对象
Statement statement = connection.createStatement();
//6.执行sql语句,并接受结果.
// int result = statement.executeUpdate(sql);
ResultSet resultSet = statement.executeQuery(sql);
// 6.处理结果集
if (resultSet.next()) {
//根据编号获取.
System.out.println(resultSet.getInt(1) + "," + resultSet.getString(2));
//根据列名获取(推荐)
System.out.println(resultSet.getInt("id") + "," + resultSet.getString("name") + "," + resultSet.getInt("money"));
}
//7.处理结果.
// System.out.println(result);
//8.释放资源.
statement.close();
connection.close();
}
}
PreparedStatement
1.作用:将sql语句进行预编译,可以避免sql注入攻击
2.使用步骤:sql语句中的参数,使用?占位。例如:
String sql = "select * from user where username = ? and password = ?"
示例
public class PreparedStatementTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取数据库连接
String url = "jdbc:mysql://127.0.0.1/db8?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
String user = "zhangsan";
String pwd = "123";
String pwd2 = "hhh' or '1' = '1";
// 3.编写sql语句,参数使用?占位符
String sql = "SELECT * FROM tb_user WHERE username=? AND password=?";
System.out.println(sql);
PreparedStatement statement = conn.prepareStatement(sql);
//给占位符赋值.
statement.setString(1,user);
statement.setString(2,pwd);
//执行sql语句.
ResultSet resultSet = statement.executeQuery();
// 6.处理结果集
if(resultSet.next()) {
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
// 7.释放资源
resultSet.close();
statement.close();
conn.close();
}
}
数据库连接池-Druid使用
连接步骤
1:导入jar包(maven项目导入对应依赖)
2:定义配置文件
3:加载配置文件
4:获取数据库连接池对象
5:获取连接
6:执行操作
示例
public class DruidTest {
public static void main(String[] args) throws Exception {
//加载配置文件.
InputStream inputStream = DruidTest.class.getClassLoader().getResourceAsStream("druid.properties");
Properties properties = new Properties();
properties.load(inputStream);
//获取数据库连接对象.
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
//编写sql语句.
String sql = "SELECT * FROM account";
//获取预编译执行对象.
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getInt("id") + "," + resultSet.getString("name") + "," + resultSet.getInt("money"));
}
//释放资源
resultSet.close();
statement.close();
//注意:不是关闭连接,而是将连接归还连接池中
connection.close();
}
}
以上就是简单的介绍了关于数据库连接的介绍.如有不足或不对的地方还希望大家多多指教.