JDBC概念和数据库驱动程序
a:JDBC概述
*JDBC(Java Data Base Connectivity java数据库连接)是一种用于执行SQL语句的Java api.
可以为多种多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据的标准规范。
总结:a.JDBC是java提供给开发人员的一套操作数据库的接口。b.数据库驱动就是实现该接口的实现类。
- java.util.date转换成java.sql.date。
//java.util.date--->java.sql.date
Date date = sort.getSdate();
//得到date对应的时间戳
long timestamp = date.getTime();
//通过时间戳创建java.sql.Date类型的对象
java.sql.Date sqlDate = new java.sql.Date(timestamp);
preparedStatement.setDate(4,sqlDate);
JDBC的开发步骤
- A: JDBC的开发步骤
- a: 步骤介绍
1.注册驱动
告知JVM使用的是哪一个数据库的驱动
2.获得连接
使用JDBC中的类,完成对MySQL数据库的连接
3.获得语句执行平台
通过连接对象获取对SQL语句的执行者对象
4.执行sql语句
使用执行者对象,向数据库执行SQL语句
获取到数据库的执行后的结果
5.处理结果
6.释放资源 一堆close()
- a: 步骤介绍
导入mysql数据库驱动程序jar包
导入mysql数据库驱动程序jar包。
执行insert语句获取结果集
注册数据库驱动程序
package com.company;
import java.sql.*;
/**
* Created by ttc on 18-1-22.
*/
public class JDBCDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.注册数据库驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 2.获取数据库的连接对象
String url="jdbc:mysql://localhost:3306/mybase";
String username ="root";
String password ="root";
Connection connection = DriverManager.getConnection(url,username,password);
// 3.获取SQL语句的执行对象
Statement statement = connection.createStatement();
// 4.执行SQL语句
String str = "INSERT INTO sort(sname,sprice,sdesc) VALUES('汽车用品',50000,'疯狂涨价')"
int row =statement.executeUpdate(str);
// 5.释放资源 一堆close()
statement.cancel();
connection.close();
}
}
执行select语句获取结果集
import java.util.Collections;
/**
* Created by ttc on 18-1-22.
*/
public class JDBC1Demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/mybase";
String username ="root";
String password ="root";
Connection connection = DriverManager.getConnection(url,username,password);
Statement statement =connection.createStatement();
String str = "select* from sort";
ResultSet resultSet = statement.executeQuery(str);
while (resultSet.next()== true){
System.out.println(resultSet.getInt("sid")+resultSet.getString("sname")
+resultSet.getDouble("sprice")+resultSet.getString("sdesc"));
}
resultSet.close();
statement.cancel();
connection.close();
}
}
- 查询与增删改相比多了获取一个结果集的步骤:
ResultSet resultSet = statement.executeQuery(str);
result.next();
SQL注入攻击
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("username")+" "+rs.getString("password"));
}
会产生SQL注入攻击,因此通常不采用这种方法
//执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败
String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?";
//调用Connection接口的方法prepareStatement,获取PrepareStatement接口的实现类
//方法中参数,SQL语句中的参数全部采用问号占位符
PreparedStatement pst = con.prepareStatement(sql);
a.PreparedStatement接口添加了处理 IN 参数的方法;
b.PreparedStatement:
可变参数的SQL,编译一次,执行多次,效率高;
安全性好,有效防止Sql注入等问题;
支持批量更新,批量删除;
JDBC的工具类和测试
package com.company;
import java.sql.*;
/**
* Created by ttc on 18-1-22.
*/
public class JDBCUtils {
// 与SQL数据库建立连接
private static Connection connection;
static{
try{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mybase";
String username="root";
String password="root";
connection = DriverManager.getConnection(url, username, password);
}catch(Exception ex){
throw new RuntimeException(ex+"数据库连接失败");
}
}
// 定义静态方法,返回数据库的连接对象
public static Connection getConnection(){
return connection;
}
// 关闭流
public static void close(Connection connection, Statement statement){
if (statement!=null){
try {
statement.cancel();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet connection, Statement statement, Connection resultSet){
if (resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!=null){
try {
statement.cancel();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//测试类
public static void main(String[] args) throws SQLException {
Connection connection = JDBCUtils.getConnection();
String str ="select* from sort";
PreparedStatement preparedStatement = connection.prepareStatement(str);
ResultSet resultSet =preparedStatement.executeQuery();
while (resultSet.next()==true){
System.out.println(resultSet.getString("sname"));
}
JDBCUtils.close(resultSet,preparedStatement,connection);
}
}
网友评论