JDBC技术
JDBC制定了统一的访问各类关系数据库的标准接口,为各家数据库厂商提供了标准接口的实现。需要注意的是,JDBC并不能直接访问数据库,需要借助于数据库厂商提供的JDBC驱动程序。
JDBC中常用的类和接口
JDBC中提供了丰富的类和接口,用于数据库编程,利用这些类和接口可以方便地进行数据访问和处理。这些类和接口都位于java.sql包中。
DriverManager类
DriverManager类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以调用。
Connection接口
通过DriverManager类的getConnection()方法可以获取Connection实例。Connection接口的常用方法如下:
方法 | 功能描述 |
createStatement | 创建Statement对象 |
prepareStatement() | 创建预处理对象preparedStatement |
Close() | 关闭连接 |
例:该类实现了与MySQL数据库建立连接,连接的数据库名称为db_jxc。
import java.sql.Connection; import java.sql.DriverManager; public class Demo{ //创建Connection对象 private Connection con=null; //数据库驱动路径 private String path="com.mysql.jdbc.Driver"; //指定连接数据库的url private String url="jdbc:mysql://localhost:3306/db_jxc"; //指定连接数据库的用户名 private String user="root"; //指定连接数据库的密码 private String psword="root"; public Connection getCon(){ try { Class.forName(path);//加载数据库驱动 //获取数据库连接 Connection con=DriverManager.getConnection(url,user,psword); if(con!=null) System.out.println("数据库连接成功"); }catch(Exception e) { e.printStackTrace(); } return con; } public static void main(String[] args){ Demo demo=new Demo(); demo.getCon(); } } |
Statement接口
Statement实例可以通过Connection实例的createStatement()方法获取。
Statement接口常用方法
方法 | 功能描述 |
Execute(String sql) | 执行静态select语句,返回多个结果集 |
executeQuery(String sql) | 执行给定的SQL语句,返回单个ResultSet对象 |
executeUpdate() | 该语句可以为INSERT、UPDATE、DELETE语句 |
Close() | 释放Statement实例占用的数据库和JDBC资源 |
例:查询数据
//import语句省略 public class Demo{ //数据库连接参数省略 public Connection getCon(){ try { Class.forName(path);//加载数据库驱动 //获取数据库连接 Connection con=DriverManager.getConnection(url,user,psword); if(con!=null) System.out.println("数据库连接成功"); String sql="select * from tb_user"; //创建Statement对象 Statement statement=con.createStatement(); //执行SQL语句 ResultSet resultSet=statement.executeQuery(sql); //遍历结果集 while(resultSet.next()) { String name=resultSet.getString("username"); String password=resultSet.getString("password"); System.out.println("username="+name); System.out.println("password="+password); } }catch(Exception e) { e.printStackTrace(); } return con; } public static void main(String[] args){ Demo demo=new Demo(); demo.getCon(); } } |
运行效果:
数据库连接成功
username=admin
password=123456
例:添加数据
//import语句省略 public class Demo{ //数据库连接参数省略 public Connection getCon(){ try { Class.forName(path);//加载数据库驱动 //获取数据库连接 Connection con=DriverManager.getConnection(url,user,psword); if(con!=null) System.out.println("数据库连接成功"); //添加数据 String sql="insert into tb_user values(null,'zhangshan',123)"; //创建Statement对象 Statement statement=con.createStatement(); //执行SQL语句 int n=statement.executeUpdate(sql); System.out.println("数据添加了"+n+"行。"); ResultSet resultSet=statement.executeQuery("select * from tb_user"); //遍历结果集 while(resultSet.next()) { String name=resultSet.getString("username"); String password=resultSet.getString("password"); System.out.println("username="+name); System.out.println("password="+password); } }catch(Exception e) { e.printStackTrace(); } return con; } public static void main(String[] args){ Demo demo=new Demo(); demo.getCon(); } } |
运行结果:
数据库连接成功
数据添加了1行。
username=admin
password=123456
username=zhangshan
password=123
例:修改数据
//import语句省略 public class Demo{ //数据库连接参数省略 public Connection getCon(){ try { Class.forName(path);//加载数据库驱动 //获取数据库连接 Connection con=DriverManager.getConnection(url,user,psword); if(con!=null) System.out.println("数据库连接成功"); //更新数据 String sql="update tb_user set username='lishi' " + "where username='zhangshan'"; //创建Statement对象 Statement statement=con.createStatement(); //执行SQL语句 int n=statement.executeUpdate(sql); System.out.println("数据修改了"+n+"行。"); ResultSet resultSet=statement.executeQuery("select * from tb_user"); //遍历结果集 while(resultSet.next()) { String name=resultSet.getString("username"); String password=resultSet.getString("password"); System.out.println("username="+name+",password="+password); } }catch(Exception e) { e.printStackTrace(); } return con; } public static void main(String[] args){ Demo demo=new Demo(); demo.getCon(); } } |
运行结果:
数据修改了1行。
username=admin,password=123456
username=lishi,password=123
PreparedStatement接口
PreparedStatement接口继承Statement接口,用于执行动态的SQL语句。可以通过Connection类的PreparedStatement()方法获取PreparedStatement对象。
PreparedStatement接口的常用方法
方法 | 功能描述 |
Execute() | 执行任何类型的SQL语句 |
executeQuery() | 执行SQL语句,返回结果集ResultSet |
executeUpdate() | 该语句必须是INSERT、UPDATE、DELETE |
setInt(int pIndex,int x) | 将参数位置上设置为给定的int型参数 |
setString(int pIndex,String str) | 将参数位置上设置为给定的String型参数 |
例子:查询数据
//import语句省略 public class Demo{ //数据库连接参数省略 public Connection getCon(String username){ try { Class.forName(path);//加载数据库驱动 //获取数据库连接 Connection con=DriverManager.getConnection(url,user,psword); if(con!=null) System.out.println("数据库连接成功"); //定义预编译语句 String sql="select password from tb_user where username=?"; //创建PreparedStatement对象 PreparedStatement statement=con.prepareStatement(sql); //设置预编译语句参数 statement.setString(1, username); //执行SQL语句 ResultSet resultSet=statement.executeQuery(); //遍历结果集 while(resultSet.next()) { String password=resultSet.getString("password"); System.out.println("该用户的密码:"+password); } }catch(Exception e) { e.printStackTrace(); } return con; } public static void main(String[] args){ Demo demo=new Demo(); demo.getCon("lishi"); } } |
运行结果:
数据库连接成功
该用户的密码:123
ResultSet接口
ResultSet接口类似于一张数据表,用来暂时存放数据查询操作所获得的结果集。在获取查询结果集时,可通过next()方法将指针向下移。如果存在下一行,该方法返回true,否则返回false。