ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day44_JDBC

2021-01-06 21:01:44  阅读:170  来源: 互联网

标签:语句 JDBC String 数据库 jdbc static sql day44


JDBC概念

JDBC常用类

JDBC涉及到的各个接口

JDBC事务

JDBC概念

​ Java DataBase Connectivity 使用Java语言连接数据库的技术

​ 本质:就是官方定义的一套操作数据库的规范(规则,封装了大量接口,各个数据库厂商去实现这套接口,提供了各种数据库驱动jar包,来完成连接数据库操作数据库的功能)

​ 快速入门:

​ 步骤:

		//1.导入数据库驱动 jar包
		//2.注册驱动   Driver  com.mysql.jdbc.Driver.class
		Class.forName("com.mysql.jdbc.Driver");//通过该类的路径反射生成该类的字节码对象
		//3.获取数据库的连接对象  Connection           jdbc[jdbc协议]:mysql[mysql协议]://127.0.0.1[ip地址]:3306[数据库端口号]/school[指定数据库]", "root"[登陆账号], "root"[登陆密码]
		Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/school", "root", "root");//连接数据库的地址,账号,密码
		//4.准备sql语句             
		String sql = "update role set r_id = 12306 where r_name = '张三' ";//核心
		//5.获取执行sql语句的执行对象 Statement
		Statement statement = connection.createStatement();
		//6.通过statement执行sql
		int count = statement.executeUpdate(sql);
		//判断 如果count > 0则执行成功
		
		if (count>0) {
			System.out.println("数据库更新成功");
		}else {
			System.out.println("数据库更新失败");
		}
		
		//把打开的连接对象关闭
		//先打开后关闭    后打开先关闭
		statement.close();
		connection.close();

介绍JDBC使用到的包和类

  1. java.sql :所有与JDBC访问数据库相关的类和接口

  2. javax.sql :用到数据库连接池 数据库的拓展包,提供数据库操作的额外功能 ,如连接池


    DriverManager类 :驱动管理,注册驱动,获取数据库的连接对象

    Connection接口:连接对象,用于创建执行sql的对象---Satatement / PreparedStatement

    Statement接口:sql语句执行对象,用于将sql语句发送给数据库服务器

    PreparedStatement接口:sql语句执行对象,是satatement 的子接口

    ResultSet:用于封装从数据库查询出来的结果值

DriverManager:

  • ​ 自JDBC3开始,可以不注册驱动这直接使用。class.forName();

  • ​ Connection getConnection ("irp",userUsername, password)

    可以获取到数据库的连接对象

  • ​ Connection getConnection(String url;Properties info):通过连接字符串和属性对象获取数据连接对象

  • ​ " jdbc:mysql://127.0.0.1:3306/school", "root", "root") " 如果数据库的服务器在本地中,省略掉ip地址和端口号 jdbc:mysql:///数据库名称(数据名称?[参数名 = 参数值])

  • ​ 如果数据传输引发乱码,后面使用参数 characterEncoding = utf8 jdbc:mysql:///数据库名称(数据名称? characterEncoding = utf8 )

Connection接口

​ 连接数据库,它是一个接口,由具体的厂商提供具体实现类,代表的是一个连接对象

  • ​ Statement createStatment()创建一个sql执行对象
  • ​ PrepareStatement prepareStatement()创建一个sql预处理对象

Statement接口

​ 用来执行sql语句,本质是把sql语句发送给数据库服务器

  • ​ int executeUpdate(String sql) 用于把sql语句发送给服务器,执行增删改操作。返回值int是影响数据库的记录行数
  • ​ ResultSet executeQuery(String sql)用于把sql语句发送给服务器,执行查询操作。返回值ResultSet 查询返回的结果集

释放资源

​ 需要释放的资源对象:ResultSet对象 Statement对象 Connection对象

​ 顺序:先开后关 后开先关 ResultSet--->Statement--->Connection

​ 使用finally语句块,一定会被加载到,但不能单独使用,需要搭配try语句块

常用数据库类型和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.util.Date

备注: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类需要和数据库中的类进行一一映射

    • 表中的列名和model类中的属性名保持一致
    • 表中的列字段数据类型和model类中的属性数据类型保持一致
  • 操作:数据库java31中的 account表

    • 需要创建封装层中的model类 -----> Account类

​ 表与实体类的对应关系如图所示:

项目分层

​ 合理的分层能够使项目的开发和维护更方便

标签:语句,JDBC,String,数据库,jdbc,static,sql,day44
来源: https://www.cnblogs.com/mitoris/p/14243404.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有