JDBC(Java Data Base Connectivity:java数据库连接):它定义了一组标准的操作数据库的接口,既然是接口,那它就是一种规范,是Java操作数据库的技术规范。
Java数据库编程有两步常用操作:
1.加载(或注册)JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”); 推荐这种方式,不会对具体的驱动类产生依赖。
DriverManager.registerDriver(com.mysql.jdbc.Driver); 会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
2.建立数据库Connection
Connection conn = DriverManager.getConnection(url, user, password);DriverManager是一个驱动管理器,内部有一个驱动注册表(Map结构),可以向其注册多个JDBC驱动。
举例说明1:
/*** @author lhy* @description 数据库工具类*/public class DBUtil {// 创建连接public static Connection createConn() {Connection conn = null;try {// 加载驱动程序Class.forName("com.mysql.jdbc.Driver");// 获取连接(这里用户名为root,密码为空)conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}// 创建回话,获取预处理语句(可以防止sql语句注入)public static PreparedStatement prepare(Connection conn, String sql) {PreparedStatement ps = null;try {ps = conn.prepareStatement(sql);} catch (SQLException e) {e.printStackTrace();}return ps;}// 关闭连接public static void close(Connection conn) {if (conn != null) {try {conn.close();conn = null;} catch (SQLException e) {e.printStackTrace();}}}// 关闭回话public static void close(Statement st) {if (st != null) {try {st.close();st = null;} catch (SQLException e) {e.printStackTrace();}}}// 关闭查询结果集public static void close(ResultSet rs) {if (rs != null) {try {rs.close();rs = null;} catch (SQLException e) {e.printStackTrace();}}}}
下面用户表为例,调用Statement对象的executeQuery()方法或executeUpdate()方法,让DBMS 执行具体的SQL语句,以便对数据执行查询、增、删、改等操作;
我们先建好一张用户表(user,数据库为test)
创建实体类(User):
public class User {private int id;private String username;private String password;public User() {}public User(int id, String username, String password) {this.id = id;this.username = username;this.password = password;}public int getId() {return id;}public void setId(int id) {this.id = id;}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;}@Overridepublic String toString() {return "User [id=" + id + ", password=" + password + ", username="+ username + "]";}}
/*** @author lhy* @description 对用户的CRUD相关操作*/public class UserDao {// 添加用户public void add(User u) {Connection conn = DBUtil.createConn();String sql = "insert into user values(null,?,?)";PreparedStatement ps = DBUtil.prepare(conn, sql);try {ps.setString(1, u.getUsername());ps.setString(2, u.getPassword());ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}DBUtil.close(ps);DBUtil.close(conn);}// 根据Id删除用户public void deleteById(int id) {Connection conn = DBUtil.createConn();String sql = "delete from user where id=?";PreparedStatement ps = DBUtil.prepare(conn, sql);try {ps.setInt(1, id);ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}DBUtil.close(ps);DBUtil.close(conn);}// 删除用户public void delete(User u) {deleteById(u.getId());}// 更新用户public void update(User u) {Connection conn = DBUtil.createConn();String sql = "update user set username=?,password=? where id=?";PreparedStatement ps = DBUtil.prepare(conn, sql);try {ps.setString(1, u.getUsername());ps.setString(2, u.getPassword());ps.setInt(3, u.getId());ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}DBUtil.close(ps);DBUtil.close(conn);}// 根据查询用户public User loadById(int id) {Connection conn = DBUtil.createConn();String sql = "select * from user where id=?";PreparedStatement ps = DBUtil.prepare(conn, sql);User user = null;ResultSet rs = null;try {ps.setInt(1, id);rs = ps.executeQuery();if (rs.next()) {user = new User();user.setId(rs.getInt("Id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));}} catch (SQLException e) {e.printStackTrace();}DBUtil.close(rs);DBUtil.close(ps);DBUtil.close(conn);return user;}// 查询所有用户信息public List<User> listUser() {Connection conn = DBUtil.createConn();String sql = "select * from user";PreparedStatement ps = DBUtil.prepare(conn, sql);List<User> list = new ArrayList<User>();ResultSet rs = null;try {rs = ps.executeQuery();while (rs.next()) {User user = new User();user.setId(rs.getInt("Id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));list.add(user);}} catch (SQLException e) {e.printStackTrace();}DBUtil.close(rs);DBUtil.close(ps);DBUtil.close(conn);return list;}}
客户端(测试类):
public class TestUser {public static void main(String[] args) {User user = new User();user.setUsername("张三");user.setPassword("123");UserDao userDao = new UserDao();// userDao.add(user);//添加用户// userDao.deleteById(1);// 删除Id为1的用户// userDao.update(new User(2, "李四", "1234546"));// 更新Id为2的用户信息// System.out.println(userDao.loadById(2)); // 查询Id为2的用户信息// 列出所有的用户List<User> list = userDao.listUser();for (User u : list) {System.out.println(u);}}}
Java的数据库编程比较简单,这里就不再赘述。
结束语:
Javase基础部分就到这了,之后会更新 Java的反射、注解、代理、设计模式、jsp、Struts、Hibernate、Spring等内容。相信学完了Javase基础之后,对后面的学习会更加轻松。
如果觉得《Java学习系列(十九)Java面向对象之数据库编程》对你有帮助,请点赞、收藏,并留下你的观点哦!