Java学习系列(十九)Java面向对象之数据库编程
2013-11-26 15:46
701 查看
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:
下面用户表为例,调用Statement对象的executeQuery()方法或executeUpdate()方法,让DBMS 执行具体的SQL语句,以便对数据执行查询、增、删、改等操作;
我们先建好一张用户表(user,数据库为test)
创建实体类(User):
Java的数据库编程比较简单,这里就不再赘述。
结束语:
Javase基础部分就到这了,之后会更新 Java的反射、注解、代理、设计模式、jsp、Struts、Hibernate、Spring等内容。
相信学完了Javase基础之后,对后面的学习会更加轻松。
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; } @Override public 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面向对象之数据库编程
- Java学习系列(十九)Java面向对象之数据库编程
- Java学习系列(十三)Java面向对象之界面编程
- Java学习系列(十三)Java面向对象之界面编程
- Java学习系列(十三)Java面向对象之界面编程
- Java学习系列(十)Java面向对象之I/O流(上)
- Java学习系列(十一)Java面向对象之I/O流(下)
- Java学习系列(四)Java面向对象之修饰符、封装、继承、多态详解
- Java学习系列(十二)Java面向对象之序列化机制及版本
- Java学习系列(十)Java面向对象之I/O流(上)
- Java学习系列(十一)Java面向对象之I/O流(下)
- Java学习系列(五)Java面向对象之抽象类、接口、内部类、枚举类详解
- Java学习系列(十二)Java面向对象之序列化机制及版本
- Java学习系列(二十)Java面向对象之反射详解
- Java学习系列(六)Java面向对象之Jar命令、正则表达式、国际化详解
- Java学习系列(十五)Java面向对象之细谈线程、线程通信(下)
- Java学习系列(十四)Java面向对象之细谈线程、线程通信(上)
- Java学习系列(十五)Java面向对象之细谈线程、线程通信(下)
- Java学习系列(五)Java面向对象之抽象类、接口、内部类、枚举类详解
- Java学习系列(七)Java面向对象之集合框架详解(上)