一、JDBC是什么?
JDBC(Java Data Base Connectivity) 是 Java 访问数据库的标准规范,程序员使用统一的代码,便可以访问到不同的数据库。
二、普通方法使用JDBC连接数据库
public class jdbc {
public static void main(String[] args) throws Exception{
// 1.注册驱动(可以省略从jdbc3开始)
Class.forName("com.mysql.jdbc.Driver");
// 2.获取连接 connection连接对象
String url="jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8";
Connection connection=DriverManager.getConnection(url,"root","root");
// 3.获取语句执行平台 Statement
Statement statement=connection.createStatement();
//4.传入需要执行的sql语句
String sql="select * from user ";
//(ResultSet是结果集对象,只有查询的时候会使用到)
ResultSet resultSet=statement.executeQuery(sql);
// 处理结果集对象 用resultSet
//while循环,遍历获取resultSet中的数据
while (resultSet.next()){
int id= resultSet.getInt("id");
String name= resultSet.getString("name");
System.out.println(id+name);
}
//关闭流,先开启的后关闭,跟栈的操作机制是一样的
resultSet.close();
statement.close();
con.close();
}
}
三、使用JDBC工具类连接数据库并进行一些列操作
JDBC工具类(JDBCUtils)
import java.sql.*;
import static java.lang.Class.forName;
public class JDBCUtils {
// 1.将连接信息定义为 字符串常量
public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/db1?characterEncoding=utf-8";
public static final String User = "root";
public static final String PASSWORD = "root";
// 2.静态代码块(静态代码块是一定可以执行的)(注册驱动是可以省略的因此该代码块理论上来说是可以省略的)
static {
try {
// 注册驱动
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//3.获取连接的静态方法
public static Connection getConnection(){
try {
//获取连接对象并返回
Connection connection = DriverManager.getConnection(URL, User, PASSWORD);
return connection;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
//关闭资源的方法(重载方法,执行查询操作的时候关闭的内容需要多一个流)
public static void close(Connection connection, Statement statement){
if(connection !=null && statement !=null ){
try{
statement.close();
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
public static void close(ResultSet resultSet,Connection connection, Statement statement){
if(connection !=null && statement !=null && resultSet !=null ){
try{
resultSet.close();
statement.close();
connection.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
通过JDBCUtils登录数据库
public class Test03 {
public static void main(String[] args) throws SQLException {
//获取连接
Connection connection= JDBCUtils.getConnection();
// 使用?占位符的方式来设置参数
String sql="select * from user where name=? and password=?";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
//3.获取用户输入的用户名和密码
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String name=sc.nextLine();
System.out.println("请输入密码:");
String pass=sc.next();
// 4.设置参数 使用setXXX(占位符的位置(整数),要设置的值)的方法设置占位符的参数
preparedStatement.setString(1,name); //设置第一个问号值为name
preparedStatement.setString(2,pass); //设置第二个问号值为pass
// 5.执行查询
ResultSet resultSet=preparedStatement.executeQuery();
if(resultSet.next()){
System.out.println("登录成功"+name);
}else{
System.out.println("登陆失败!");
}
// 6.关闭流操作(注意执行查询操作当中关闭流的时候多一个参数resultSet)
JDBCUtils.close(connection,preparedStatement,resultSet);
}
}
通过JDBCUtils向数据库中插入数据
public class Test04 {
public static void main(String[] args) throws SQLException {
//获取连接
Connection connection = JDBCUtils.getConnection();
// 使用?占位符的方式来设置参数
String sql="insert into user values (?,?);";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String name=sc.nextLine();
System.out.println("请输入密码:");
String pass=sc.next();
//设置参数 使用setXXX(占位符的位置(整数),要设置的值)的方法设置占位符的参数
preparedStatement.setString(1, name);
preparedStatement.setString(2, pass);
// 执行插入
System.out.println(sql);
// 更新数据
preparedStatement.executeUpdate();
System.out.println("插入成功!");
//关闭流
JDBCUtils.close(connection,preparedStatement);
}
}