2021.1.6 - JDBC - JDBC使用的常用类 - JDBC中涉及到的各个接口 - JDBC事务

时间:2021-01-08 11:23:58   收藏:0   阅读:0

1.JDBC概念

技术图片

快速入门连接

技术图片
注意:最核心的就是sql语句,因为其他的基本上都是不变的,只有sql语句变得多啊

回忆昨天:

介绍JDBC快速入门使用到的包和类

  1. java.sql:所有与JDBC访问数据库相关的数据和接口都在此包之中

    • DriverManager;是一个类 , 驱动管理功能,注册驱动,获取数据库链接对象

    • Connection;是一个接口 , 连接对象,用于创建执行sql对象Statement,PreparedStatement对象

    • Statement;是一个接口,,,sql语句执行对象,用于将sql语句发送个数据库服务器

    • PreparedStatement: sql语句执行对象

    • ResultSet :是一个接口,结果集,把数据库查询出来的数据封装到集合里面

  2. javax.sql:用到数据库连接池,是数据库扩展包,提供数据库一些额外操作,比如:连接池

  3. DriverManager

    1. 从JDBC3往后,我们可以不用写注册驱动,也就是Class.forName,但是还是建议书写

    2. Connection DriverManager.getConnection(url,user,password):可以获得数据库的连接对象

      也可以通过Connection DriverManager.getConnection(String url,Properties info):通过连接字符串和属性对象,可以获得数据库的连接对象

    • user:登陆数据库用户名
    • password:登陆数据库的密码
    • url:数据库连接路径:对于mysql而言::-->jdbc:mysql://服务器ip地址:端口号/数据库名称 --->如果是本地服务器可以省略IP地址和端口号-->jdbc:mysql:///数据库名称----->如果出现乱码jdbc:mysql:///数据库名称?characterEncoding=utf8.
    • 驱动路径: com.mysql.jdbc.Driver
  4. Connection接口
    作用:连接数据库,是一个接口,由具体的厂商提供具体的实现类,代表一个连接对象

    • createStatement():创建一个sql执行对象
    • PrepareStatement prepareStatement();
      Statement接口
      ? 作用:用来执行sql语句,本质是把sql语句发送给数据库服务器

PreparedStatement

- 操作:

释放资源

常用数据库数据类型和Java类型对照

sql jdbc方法 java
int getInt() int
bigInt getLong() long
bit getBoolean() boolean
varchar getString() String
date/time/TimeStamp getDate/getTime/getTimeStamp java.util.Date/java.sql.Time/java.sql.Timestamp
double getDouble() double

备注:java.sql.Date/Time/TimeStamp(时间戳)三个共同的父类是----->java.util.Date

数据库工具类 DBUtil

`
// 数据库工具类
public class DBUtil {
// 定义四个常量值
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql:///java31?characterEncoding=utf8";
private static final String USER = "root";
private static final String PASSWORD = "root";
// 定义JDBC常用类和接口
private static Connection con = null;
private static Statement st = null;
private static PreparedStatement ps = null;
private static ResultSet set = null;

	static {
		try {
			Class.forName(DRIVER);
			con = DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	// 针对查询的功能
	public static ResultSet select(String sql,Object[] args) {
		//String sql2   =  "select * from account where u_name = ? and password = ?"; 
		try {
			// 获取预处理对象
			 ps = con.prepareStatement(sql);
			 // 使用sql语句中的占位符  ?
			 // 遍历数组
			 // 占位符 在sql中是有前后顺序的   u_name对应的问号 索引是 1 password对应的问号就是2
			 for (int i = 0; i < args.length; i++) {
				// 把问号提换成具体的数据
				ps.setObject(i+1, args[i]);
			}
		   // 执行sql语句 获取结果值
		   set = ps.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return set;
	}
	// 针对更新的功能  insert update delete  executeUpdate()
	public static int update(String sql,Object[] args) {
		// 获取预处理对象
		// 定义一个变量 用来记录印象数据库表的行数
		int count = 0;
		 try {
			ps = con.prepareStatement(sql);
			 // 使用sql语句中的占位符  ?
			 // 遍历数组
			 // 占位符 在sql中是有前后顺序的   u_name对应的问号 索引是 1 password对应的问号就是2
			 for (int i = 0; i < args.length; i++) {
				// 把问号提换成具体的数据
				ps.setObject(i+1, args[i]);
			}
		   // 执行sql语句 获取结果值
		   count = ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 返回给调用处 
		return count;
	}	
	// 关闭连接的方法
	public static void closeAll() {
		// 关闭时 先关闭ResultSet
			if (set != null) {
				try {
					set.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (st != null) {
				try {
					st.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (con != null) {
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}

}

`
表与类的关系

model类
技术图片
Account类
技术图片
表与实体类的对应关系如图所示:
技术图片

项目分层
? 合理的分层能够使项目的开发和维护更方便
技术图片

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!