JDBC
1、什么是JDBC?
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
- ##JDBC代码如下(经典6步):
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import com.tee.util.jdbcUtil;
/**
*模拟用户登录案例
*Statement 存在安全隐患
*PrepareStatement
*
*/
public class LoginUser {
/*
* 1、提示用户输入用户名和密码,并接收它们
* 2、根据用户名和密码访问数据库,查询指定用户名和密码的用户
* 3、若是口令正确,允许登录
* 4、若是查询不到记录,提示用户名或密码不正确
*/
public static void main(String[] args) {
// * 1、提示用户输入用户名和密码,并接收它们
Scanner sc = new Scanner(System.in);
System.out.println("please login");
System.out.println("please input account name:");
String user = sc.nextLine();
System.out.println("please input password:");
String pwd = sc.nextLine();
//* 2、根据用户名和密码访问数据库,查询指定用户名和密码的用户
login(user,pwd);
}
/**
* 根据用户名和密码查询user表中的用户信息
* @param user 用户名
* @param pwd 密码
*/
private static void login(String user, String pwd) {
Connection conn = null ;
Statement stat = null;
ResultSet rs = null;
try {
//注册驱动并获取链接 对象
conn = jdbcUtil.getConn();
//获取传输器并执行SQL并返回执行结果 获取一个容载SQL语句的传输器
stat = conn.createStatement();
String sql= "select * from user where" +" username ='"+user+"' and password='"+pwd+"';";
rs = stat.executeQuery(sql);
//处理
if(rs.next()){
System.out.println("登录成功");
}else {System.out.println("登录失败");}
} catch (Exception e) {
e.printStackTrace();
}finally {
jdbcUtil.close(conn, stat, rs);//使用工具类简化
}
}
##2、工具类代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbcUtil {
public static Connection getConn() {
//1、注册驱动并获取连接
/**
* 用于注册驱动并获取JDBC程序中的连接对象
* @return Connection 连接对象
*/
try {
Class.forName("com.mysql.jdbc.Driver"); //加载驱动
//获取连接 连接对象
Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql:///jt_db?characterEncoding=utf-8","root","root");//账号密码需要写到配置文件中,代码中不放变化常量参数
return conn;
} catch (Exception e) {
// TODO: handle exception
}
return null;//若是第一行抛异常了,就返回null
}
/**
* JDBC 工具类
* 这个方法用于释放JDBC中的资源
* @param conn 连接对象
* @param stat 传输器对象
* @param rs 结果集对象
*/
public static void close(Connection conn,Statement stat,ResultSet rs) {
// 6、释放资源 要一个一个关,一个一个try
try {
if(rs != null){//若是rs = null,则close会报空指针异常
rs.close(); //遍历勾不着就在外面定义声明
}
} catch (SQLException e) {
rs = null; //要rs.close一直抛异常 ,rs 对象没有指向,变成游离对象,不定时垃圾回收。 rs.close 立即回收释放
}
try {
if(stat != null){stat.close(); //main函数不要使用throws抛异常,抛给JVM不会处理的
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
conn = null;
}
try {
if(conn != null){
conn.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}