Java学习系列(十九)Java面向对象之数据库编程
来源:互联网 发布:域名中com代表什么 编辑:程序博客网 时间:2024/05/20 05:06
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;
- }
- @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系列1>初识Java之面向对象编程
- Java学习系列(十七)Java面向对象之开发聊天工具
- Java学习系列(十七)Java面向对象之开发聊天工具
- Java学习--面向对象编程
- Java面向对象编程学习
- java学习之面向对象编程-类与对象
- Java学习笔记之面向对象的Java编程
- java面向对象下:Java数据库编程
- java学习之路 之 面向对象编程-数组
- java学习之路 之 面向对象编程-面向对象-对象的关联
- Java并发编程系列之十九:原子操作类
- java学习之路 之 面向对象编程-面向对象与面向过程及面向对象的思想概念
- java中属性的权限问题
- 浅谈onInterceptTouchEvent、onTouchEvent与onTouch
- 医学图像处理控件ImageGear Medical功能大全
- 如何在django管理后台显示一个链接
- NYOJ44 子串和 【技巧题】
- Java学习系列(十九)Java面向对象之数据库编程
- 智能鞋垫 SuperShoes:我的目标是你的臭脚丫子
- 夕阳之林——梦
- tomcat启动的时候提示java.net.SocketException异常
- sim卡的EF 文件有何作用 ?
- Cocos2dx 3.0 交流篇
- boost库在工作(7)使用数组智能指针scoped_array
- FMDB多线程下"is currently in use" 或者 "database is locked" 已解决!
- 美好总是那么的短暂,我们不得去感慨。喜欢一个人