JDBC基本使用入门以及工具类

1.JDBC:

1. 概念:Java DataBase Connectivity Java 数据库连接,Java 语言操作数据库

	* JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可

		以使用这套接口(JDBC)变成,真正执行的代码是驱动jar包中的实现类。

2. 入门:MYSQL(数据库为例)

	* 步骤:
		1.导入驱动jar包
			* 右键项目 --- > Build Path --- >  Configure Build Path... --- > Libraries  ---> Add External JARs...
		2.注册驱动
			Class.forName("com.mysql.jdbc.Driver");
		3.获取数据库连接对象 Connection
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称" , "用户名" , "密码");
		4.定义sql
			String sql = "insert into student values ('张三' , '男' , 18)";
		5.获取执行sql语句的对象 Statement
			Statement stmt = conn.createStatement();
		6.执行sql , 接受返回结果
			int length = stmt.executeUpdate(sql);
		7.处理结果	
			System.out.println(length);
		8.关闭
			stmt.close();
			conn.close();

	* 注意:如果出现 Could not create connection to database server 异常  这是因为jar包版本与数据库不一致造成
		可以将 mysql驱动名改成:com.mysql.cj.jdbc.Driver 
	* 处理如下: 我这里使用的是	mysql - 8.0.12 版本
	  	
		* Class.forName("com.mysql.cj.jdbc.Driver");
	
		* Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称?useSSL=false&serverTimezone=UTC" , "用户名" , "密码");
			
**3.详解各个对象:**

	1.DriverManager :驱动管理对象
		* 功能:
		       1.注册驱动
			static void registerDriver(Driver driver)
			注意:mysql5之后的驱动jar包加载可以省略 
		       2.获取数据库连接
			static Connection getConnction(String url , String user , String pwd)
			     * url :
				语法:jdbc:mysql://ip地址 : 端口号/数据库名称
				细节:如果ip地址是本机号,端口是3306 则可以简写为 jdbc:mysql:///数据库名称
	2.Connection :数据库连接对象
		1. 功能:
			1.获取sql 对象
			    * Statement createStatement();
			    * PreparedStatement prepareStatement(String sql);
			2. 管理事务:
			    * 开启事务:setAutoCommit(Boolean s);
			    * 提交事务:commit();
			    * 回滚事务:rollback();
	3.Statement:执行sql对象
		1. 执行sql语句
			1.boolean execute(String sql) :可以执行任意SQL语句
			2.int executeUpdate(String sql) : 执行DML(insert , update , delete) 语句 DDL(create, alter , drop )语句
			3.ResultSet executeQuery(String sql) :执行DQL语句 (Select)
	4.ResultSet:返回结果集对象
		* next() : 游标向下移动一行
		* getXxx(参数):获取数据
		    * Xxx :代表数据类型:int getInt()   , String getString();
		    * 参数:
			1. int : 代表列的编号, 从1开始   getString(1) 获取第一列的值
			2. String : 代表列名称 : getDouble("age");
	5.PreparedStatement:执行sql对象	
		1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全隐患
			1. 用户随便输入 , 'a' = 'a' 恒等式
			2. sql:select * from T_project where Project_id = '2003-01' and Project_name = '教学大楼' or 'a' = 'a' -- 恒等式存在
		2.解决sql诸如问题:使用 PreparedStatement 对象来解决
		3.预编译的SQL:参数使用  ?作为占位符	
		4.步骤:
			1.导入驱动jar包
				* 右键项目 --- > Build Path --- >  Configure Build Path... --- > Libraries  ---> Add External JARs...
			2.注册驱动
				Class.forName("com.mysql.jdbc.Driver");
			3.获取数据库连接对象 Connection
				Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称" , "用户名" , "密码");
			4.定义sql
				String sql = "insert into student values ('?' , '?' , ?)";
			5.获取执行sql语句的对象 Statement
				PreparedStatement ps= conn.prepareStatement(sql );
			6.执行sql , 接受返回结果
				int length = ps.executeUpdate();
			7.处理结果	
				System.out.println(length);
			8.关闭
				stmt.close();
				conn.close();

2.JDBC控制事务:

1.事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,那么这个业务操作要么同时成功,要么同时失败
2.操作 :
	1.开启事务
	2.提交事务
	3.回滚事务
3.使用Connection对象来管理事务
	* 开启事务:setAutoCommit(boolean autoCommit) : 调用该方法设置参数为false , 即开启事务
		* 在执行sql之前开启事务
	* 提交事务:commit()
		* 当所有sql执行完毕之后
	* 回滚事务:rollback();
		* 出现异常时回滚
  • 事务案例:这里演示最简便的写法 以便于理解
Connection conn = null;
		Statement stmt = null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			//3.获取数据库连接对象 Connection
			 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=UTC" , "root" , "123456");
			//3.1开启事务
			conn.setAutoCommit(false);
			//4.定义sql
			String sql = "insert into student values (null ,'张三' , '男' ,'2018-01-02' ,  18 , 'asd')";
			//5.获取执行sql语句的对象 Statement
			 stmt = conn.createStatement();
			//6.执行sql , 接受返回结果
			int length = stmt.executeUpdate(sql);
			//7.处理结果
			System.out.println(length);
			//8.提交
			conn.commit();
			
		} catch (Exception e) {
			//事务回滚
					if(conn != null)
						try {
							conn.rollback();
						} catch (SQLException e1) {
							e1.printStackTrace();
						}
			e.printStackTrace();
		}finally{
			//9.关闭
			if(stmt != null){
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
		}

3.JDBC工具类:(基于原型)

这里给出实例代码:

private static String url ;
		private static String username ;
		private static String password ;
		private static String driver ;
	/**
	 * @param _Project_id
	 * @return
	 */
	static{
			try {
				//读取 properties
				Properties pro = new Properties();
				//2.加载文件
				//3.加载进内存
				pro.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("db.properties").getPath()));
				//3.获取值
				url = pro.getProperty("url");
				username = pro.getProperty("username");
				password = pro.getProperty("password");
				driver = pro.getProperty("driver");
				Class.forName(driver);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
	}
		public static Connection getConn() throws SQLException{
			return DriverManager.getConnection(url,username,password);
	}	


db.properties 配置文件如下:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&serverTimezone=UTC
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
maxIdle=8
minIdle=3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章