JDBC介绍
JDBC ( Java Data Base Connectivity ) 是一 种 Java 访问 数据库 的技术,它提供 执行 SQL 语句的 Java API ,由 一组 类 和接口组成,可以为 不同的 数据库提供统一访问JDBC工作原理
JDBC应用编程
1、准备工作
安装 MySQL 创建数据库 ( db ) 及表 (user) 的结构、插入一条数据(可借助工具) 项目中引入连接 MySQL 的 JDBC 驱动 Jar 文件。 不同版本的 MySQL ,其 JDBC 驱动文件不同。 在 MyEclipse 的数据库浏览器视图 下,可视化方式创建 MySQL 数据库的连接。 这一步不是 必需的 , 也可使用 navicat for MySQL 等工具 。但是创建 连接的 作用是, JDBC 编程需要 使用这些连接参数2、JDBC编程步骤
(1)注册JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
或者DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Class.forName () 方法是要求 JVM 查找并加载指定的类到内存 中 MySQL 5.6/5.7 的 JDBC 驱动 类: com.mysql.jdbc.Driver MySQL 8.0 的驱动类: com.mysql.cj.jdbc.Driver(2)建立数据库连接Connection
String url="jdbc:mysql://localhost:3306/db";
String user="root";
String password="mysqladmin";
Connection conn=DriverManager.getConnection(url, user, password);
Connection 是 java.sql 包中的一个接口 通过调用 DriverManager 的静态方法 getConnection 可以创建 Connection 对象(3)创建并执行SQL语句Statement实际应用我们用的是PreparedStatement
Statement stmt=conn.createStatement(); //conn为上一步创建的连接
String sql="select * from user";
ResultSet rs=stmt.executeQuery(sql);
Connection 接口的 createStatement () 用于创建语句 Statement Statement 接口的 executeQuery (String sql ) 方法用于执行 sql 查询,返回值为 ResultSet 接口类型。(4)处理执行结果集ResultSet
while(rs.next()){ //rs为上一步返回的结果集
String name=rs.getString("username");
String pass=rs.getString("password");
System.out.printf("用户名:%s,口令:%s\n",name,pass);
}
结果集的 next() 方法返回一个 boolean 值 ,没有到达记录末尾时 ,返回 true ,否则返回 false 。结果集的getString(String columnLabel) ,该方法根据表中的列名获取当前记录指定列的值
(5)释放资源
rs.close(); //关闭结果集
stmt.close(); //关闭语句
conn.close(); //关闭连接
关闭资源的顺序是先 关闭结果 集,再 关闭 语句,最后 关闭 连接,后创建的先关闭。(与创建的顺序相反)JDBC实现增加、删除和修改操作
开发工具:myeclipse2014、MySQL8.0【MySQL】MySQL8.0安装教程: https://blog.csdn.net/Trista_1999/article/details/132678207
文件结构:
User类:
package javabean; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
UserDAO类:实现数据库连接和增删改查
package javabean; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class UserDAO { //查询 public static ListsearchAll() throws ClassNotFoundException, SQLException{ List users=new ArrayList<>(); //注册JDBC驱动程序 Connection conn = getConnection(); //创建并执行SQL语句PreparedStatement String sql="select* from user"; PreparedStatement ps=conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); //处理执行结果集ResultSet while(rs.next()){ String username = rs.getString("username"); String password = rs.getString("password"); User user=new User(); user.setUsername(username); user.setPassword(password); users.add(user); } //释放资源 rs.close(); ps.close(); conn.close(); return users; } //getConnection函数,注册JDBC驱动程序并建立数据库连接Connection private static Connection getConnection() throws ClassNotFoundException, SQLException { //注册JDBC驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/db"; //建立数据库连接Connection Connection conn=DriverManager.getConnection(url, "root", "root"); return conn; } //添加 public boolean add(User user) throws SQLException, ClassNotFoundException{ Connection conn = getConnection(); String sql="insert into user(username,password) values (?,?)"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, user.getUsername()); ps.setString(2, user.getPassword()); System.out.print(sql); int res=ps.executeUpdate(); ps.close(); conn.close(); return res==1; } //更新 public boolean update(User user) throws SQLException, ClassNotFoundException{ Connection conn = getConnection(); String sql="update user password=? where username=?"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, user.getPassword()); ps.setString(2, user.getUsername()); System.out.print(sql); int res=ps.executeUpdate(); ps.close(); conn.close(); return res==1; } //删除 public boolean delete(String username) throws SQLException, ClassNotFoundException{ Connection conn = getConnection(); String sql="delete from user where username=?"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1, username); System.out.print(sql); int res=ps.executeUpdate(); ps.close(); conn.close(); return res==1; } }