java核心技术第三篇之JDBC第一篇
01.JDBC_两个重要的概念:
	1).什么是数据库驱动程序:由数据库厂商提供,面向某种特定的编程语言所开发的一套访问本数据库的类库。
	                         驱动包一般由两种语言组成,前端是:面向某种特定编程语言的语言;后端是:本数据库的语言。
				 可以方便开发人员使用自己的语言来访问本公司的数据库软件。
2).什么是JDBC:是由SUN公司提出一套Java访问数据库的一套标准。它物理上由一组类和接口组成。要求数据库厂商的驱动程序
	               必须遵守这套标准流程。也要求我们Java程序员也遵守这套流程。这样就使得我们Java程序员访问各种数据库软件
		       所使用的都是同一个流程。
02.JDBC_四个核心对象:
	1).DriverManager:用来获取连接对象
	2).Connection:一个连接对象,表示我们的程序和数据库之间的一个连接通道。
	3).Statement:SQL执行平台,用于发送SQL语句;
	4).ResultSet : 执行查询后将查询结果封装到ResultSet对象中,它就类似于一个集合。
JDBC是Java连接不同数据库的类库,它有三个核心功能:
1. 连接数据库;
2. 向数据库发送SQL语句;
3. 操作SQL语句的返回结果。
A 、 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。
 B 、 JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。
 C 、 JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。
 D 、 JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!
03.Java访问MySQL数据库:
	1).将驱动包复制到项目目录下,添加到构建路径。
	2).开发步骤:
		//1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2.获取连接对象
		Connection conn = DriverManager.getConnection(
							"jdbc:mysql://127.0.0.1:3306/hei66_day21", "root", "123");
		//3.获取SQL执行平台
		Statement stmt = conn.createStatement();
		//4.发送SQL语句,获取结果集
		String sql = "select * from city";
		ResultSet rs = stmt.executeQuery(sql);
		//5.处理结果集
		while(rs.next()){
			System.out.println(rs.getInt("cid") + "\t" + rs.getString("cname"));
		}
		//6.释放资源
		rs.close();
		stmt.close();
		conn.close();
JDBC操作数据库的使用步骤顺序
1.导入mysql的驱动程序通过DriverManger注册驱动
2.通过DriverManager获取连接对象Connection
3.通过Connection获取一个可以向数据库发送sql语句的对象Statement
4.通过Statement对象执行sql语句(select) 得到一个结果集ResultSet
5.遍历结果集ResultSet,得到数据表中的数据
6.释放资源
04.开发步骤的详细说明:
	1).注册驱动:
	2).获取连接对象:
		getConnection(连接字符串,用户名,密码)
	3).获取SQL执行平台--Statement
		Connection对象的createStatement()
	4).发送SQL语句【重点掌握】:
		Statement的:
		a).public int executeUpdate(String sql):用于发送添加(insert)、修改(update)、删除(delete)语句的。
		b).public ResultSet executeQuery(String sql):用于发送查询(select)语句的。
	5).处理结果集:如果是发送的查询语句,会获取一个ResultSet结果集【重点掌握】
		a).ResultSet-->next():让当前的游标位置下移一位;此方法会返回boolean值
		b).获取某列的值:推荐使用getXxx(String 字段名)
			ResultSet-->getInt(String 字段名)
			            getInt(int 字段索引):查询结果中的字段索引,是从1开始
getString(String 字段名)
				    getString(int 字段索引):
getObject(String 字段名)
				    getObject(int 字段索引):
	6).释放资源:
		ResultSet-->close()
		Statement-->close()
		Connection-->close()
05.JDBC工具类的编写:
标准版:
1.5JDBC工具类
“获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils。提供获取连接对象的方法,从而达到代码的重复利用。
该工具类提供方法:public static Connection getConn ()。代码如下:
public class JdbcUtils {
private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://localhost:3306/webdb_4";
	private static String user = "root";
	private static String password = "root";
static{
		try {
			//注册驱动
			Class.forName(driver);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
}
/**
	 * 获得连接
	 * @return
	 * @throws SQLException 
	 */
	public static Connection getConnection() throws  SQLException{
		//获得连接
		Connection conn = DriverManager.getConnection(url, user, password);
		return conn;
	}
/**
	 * 释放资源
	 * @param conn
	 * @param st
	 * @param rs
	 */
	public static void closeResource(Connection conn , Statement st , ResultSet rs){
if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
			}
		}
if(st != null){
			try {
				st.close();
			} catch (SQLException e) {
			}
		}
if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
			}
		}
}
//1.获取Connection对象--简单的代码复用,每次都会创建一个新的Connection对象
	public static Connection getConnection() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei66_day21","root","123");
		return conn;
	}
//2.释放所有资源
	public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
06.SQL语句的拼接:
	Scanner sc = new Scanner(System.in);
	System.out.println("学员姓名:");
	String stuName = sc.next();
	System.out.println("年龄:");
	int age = sc.nextInt();
	System.out.println("性别:");
	String sex = sc.next();
	System.out.println("身高:");
	double height = sc.nextDouble();
	System.out.println("地址:");
	String address = sc.next();
	System.out.println("电话:");
	String phoneNum = sc.next();
String sql = "insert into student values(null,'" + stuName + "'," + 
						age + ",'" + 
						sex + "'," + 
						height + ",'" + 
						address + "','" + 
						phoneNum + "')";
	System.out.println(sql);
	//1.获取连接
	Connection conn = JDBCUtils.getConnection();
	Statement stmt = conn.createStatement();
	int row = stmt.executeUpdate(sql);
	System.out.println("添加影响的行数:" + row);
	JDBCUtils.closeAll(null, stmt, conn);
07.SQL注入的问题:
	1.什么是SQL注入:用户输入的数据当中包含一些SQL的格式符号,如果我们不做处理,直接封装到SQL语句中,会导致
	                 SQL语句出错,或者是得到不正确的结果。
	2.解决方案:不使用Statement,改用:PreparedStatement,它是Statement的子接口,表示:预定义的SQL执行平台。
		    它能够将SQL语句和用户的数据分开管理,所以即使用户数据中包含SQL的格式符号,也不会解析为SQL的格式,所以
		    可以预防SQL注入的问题。
08.PreparedStatement的使用:
	1).获取PreparedStatement对象:
		....
		PreparedStatement ps = conn.prepareStatement(String 预处理的SQL语句);
		//填充参数
		ps.setString(1,xxx)
		ps.setInt(2,xxxx)
		//发送SQL语句
		ps.executeUpdate();//注意:这里是无参调用--执行添加、修改、删除
		ps.executeQuery();//无参。执行:查询
==============================================================================================================================
学习目标:
1.能够理解JDBC的概念:
	1.JDBC是Sun公司提出一套Java连接数据库的标准。它的物理上由一些类和接口组成。
2.能够使用DriverManager类
	Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei66_day21","root","123");
3.能够使用Connection接口
	获取SQL执行平台:
	1.Statement stmt = conn.createStatement();
	2.PreparedStatement ps = conn.parepareStatement(String 预处理的SQL语句)
4.能够使用Statement接口
	1.public int executeUpdate(String sql):执行添加,修改,删除语句;
	2.public ResultSet executeQuery(String sql):执行查询。
5.能够使用ResultSet接口
	...
	ResultSet rs = stmt.executeQuery("select * from student");
	while(rs.next()){
		rs.getInt(String 字段名称)
		rs.getInt(int 字段索引)
rs.getString(String 字段名称)
		rs.getString(int 字段索引)
	}
6.能够描述SQL注入的原理和解决方案:
	1.SQL注入的原理:在用户的数据中包含了SQL的格式符号,我们将数据直接拼接SQL语句,会导致SQL语句错误或者执行结果错误。
	2.解决方案:使用预处理的SQL执行平台:PreparedStatement
7.能够编写JDBC的工具类
	public class JDBCUtils{
		//1.获取连接对象的方法
		public static Connection getConnection(){
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei65_day21","root","123");
			return conn;
		}
		//2.关闭所有连接的方法
		public static void closeAll(ResultSet rs,Statement stmt,Connection conn) throws Exception{
			if(rs != null){
				rs.close();
			}
			if(stmt != null){
				stmt.close();
			}
			if(conn != null){
				conn.close();
			}
		}
	}
8.能够使用PreparedStatement编写CURD(增删改查)代码
	//1.添加
	public void save() throws Exception{
		//1.获取Connection对象
		Connection conn = JDBCUtils.getConnection();
		//2.获取预处理的SQL平台
		PreparedStatement ps = conn.prepareStatement("insert into student values(null,?,?,?,?,?,?)");
		//3.填充数据
		ps.setString(1, "汪峰");//第一个?的位置,填充:汪峰
		ps.setInt(2, 22);
		ps.setString(3, "男");
		ps.setDouble(4, 1.80);
		ps.setString(5, "北京");
		ps.setString(6, "00000000");
//4.执行SQL语句
		int row = ps.executeUpdate();
		System.out.println("添加影响的行数:" + row);
		//释放资源
		JDBCUtils.closeAll(null, ps, conn);
}
//2.修改
	public void update() throws Exception{
		//1.获取Connection对象
		Connection conn = JDBCUtils.getConnection();
		//2.获取预处理的SQL平台
		String sql = "update student set stuName = ? , age = ?, sex = ?, height = ?, address = ?, phoneNum = ? where id = ?";
		PreparedStatement ps = conn.prepareStatement(sql);
		//3.填充数据
		ps.setString(1, "撒贝宁");
		ps.setInt(2, 22);
		ps.setString(3, "男");
		ps.setDouble(4, 1.5);
		ps.setString(5, "北京");
		ps.setString(6, "77777777");
		ps.setInt(7, 3);
//4.执行SQL
		int row = ps.executeUpdate();
		System.out.println("修改影响的行数:" + row);
//5.释放资源
		JDBCUtils.closeAll(null, ps, conn);
	}
//3.查询
	public void findById() throws Exception{
		//1.获取Connection
		Connection conn = JDBCUtils.getConnection();
		//2.获取SQL执行平台
		PreparedStatement ps = conn.prepareStatement("select * from student where id = ?");
		//3.填充数据
		ps.setInt(1, 3);
		//4.执行查询
		ResultSet rs = ps.executeQuery();
		if(rs.next()){
			System.out.println(rs.getInt("id") + "\t" + rs.getString("stuName"));
		}
		//5.释放资源
		JDBCUtils.closeAll(null, ps, conn);
	}
//4.删除
	@Test
	public void deleteById() throws Exception{
		//1.获取Connection对象
		Connection conn = JDBCUtils.getConnection();
		//2.获取SQL执行平台
		PreparedStatement ps = conn.prepareStatement("delete from student where id = ?");
		ps.setInt(1, 3);
		//3.执行
		int row = ps.executeUpdate();
		System.out.println("删除影响的行数:" + row);
		//4.释放
		JDBCUtils.closeAll(null, ps, conn);
}
package cn.baidu.demo02_JDBC开发的增删改查;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
public class Demo {
	//1.添加
	public void save() throws Exception{
		//1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2.获取连接对象
		Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei66_day21","root","123");
		//3.获取SQL执行平台
		String sql = "insert into city values(null,'洛阳',3)";
		Statement stmt = conn.createStatement();
		int row = stmt.executeUpdate(sql);
		System.out.println("添加影响的行数:" + row);
		//4.释放资源
		stmt.close();
		conn.close();
	}
	//2.修改
	public void update() throws Exception{
		//1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2.获取连接对象
		Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei66_day21","root","123");
		//3.获取SQL执行平台
		String sql = "update city set cname = '信阳' where cname = '洛阳'";
		Statement stmt = conn.createStatement();
		int row = stmt.executeUpdate(sql);
		System.out.println("修改影响的行数:" + row);
		//4.释放资源
		stmt.close();
		conn.close();
	}
	//3.删除
	public void delete() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei66_day21","root","123");
		Statement stmt = conn.createStatement();
		String sql = "delete from city where cid = 7";
		int row = stmt.executeUpdate(sql);
		System.out.println("删除影响的行数:" + row);
		stmt.close();
		conn.close();
	}
	//4.查询所有记录
	@Test
	public void findAll() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei66_day21","root","123");
		Statement stmt = conn.createStatement();
		String sql = "select * from city";
		ResultSet rs = stmt.executeQuery(sql);
		//遍历
		while(rs.next()){
			System.out.println(rs.getInt("cid") + "\t" + rs.getString("cname") + "\t" + rs.getInt("pid"));
		}
		//释放资源
		rs.close();
		stmt.close();
		conn.close();
	}
}
package cn.baidu.demo03_自定义工具类的编写;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
public class Demo {
	//1.添加
	public void save() throws Exception{
//2.获取连接对象
		Connection conn = JDBCUtils.getConnection();
		//3.获取SQL执行平台
		String sql = "insert into city values(null,'洛阳',3)";
		Statement stmt = conn.createStatement();
		int row = stmt.executeUpdate(sql);
		System.out.println("添加影响的行数:" + row);
		//4.释放资源
		JDBCUtils.closeAll(null, stmt, conn);
	}
	//2.修改
	public void update() throws Exception{
//2.获取连接对象
		Connection conn = JDBCUtils.getConnection();
		//3.获取SQL执行平台
		String sql = "update city set cname = '信阳' where cname = '洛阳'";
		Statement stmt = conn.createStatement();
		int row = stmt.executeUpdate(sql);
		System.out.println("修改影响的行数:" + row);
		//4.释放资源
		/*stmt.close();
		conn.close();*/
		JDBCUtils.closeAll(null, stmt, conn);
	}
	//3.删除
	public void delete() throws Exception{
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		String sql = "delete from city where cid = 7";
		int row = stmt.executeUpdate(sql);
		System.out.println("删除影响的行数:" + row);
		/*stmt.close();
		conn.close();*/
		JDBCUtils.closeAll(null, stmt, conn);
	}
	//4.查询所有记录
	@Test
	public void findAll() throws Exception{
Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		String sql = "select * from city";
		ResultSet rs = stmt.executeQuery(sql);
		//遍历
		while(rs.next()){
			System.out.println(rs.getInt("cid") + "\t" + rs.getString("cname") + "\t" + rs.getInt("pid"));
		}
		//释放资源
		/*
		rs.close();
		stmt.close();
		conn.close();*/
		JDBCUtils.closeAll(rs, stmt, conn);
	}
}
package cn.baidu.demo03_自定义工具类的编写;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
	//1.获取Connection对象--简单的代码复用,每次都会创建一个新的Connection对象
	public static Connection getConnection() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hei66_day21","root","123");
		return conn;
	}
//2.释放所有资源
	public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
package cn.baidu.demo04_封装SQL语句;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Scanner;
import org.junit.Test;
import cn.baidu.demo03_自定义工具类的编写.JDBCUtils;
public class Demo {
	@Test
	public void save() throws Exception{
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个河南的市名:");
		String city = sc.next();
//	String sql = "insert into city values(null,'信阳',3)";
		String sql = "insert into city values(null,'" + city + "',3)";
		System.out.println(sql);
		//获取连接
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		int row = stmt.executeUpdate(sql);
		System.out.println("添加影响的行数:" + row);
		//释放连接
		JDBCUtils.closeAll(null, stmt, conn);
	}
	public void saveStudent() throws Exception{
		Scanner sc = new Scanner(System.in);
		System.out.println("学员姓名:");
		String stuName = sc.next();
		System.out.println("年龄:");
		int age = sc.nextInt();
		System.out.println("性别:");
		String sex = sc.next();
		System.out.println("身高:");
		double height = sc.nextDouble();
		System.out.println("地址:");
		String address = sc.next();
		System.out.println("电话:");
		String phoneNum = sc.next();
String sql = "insert into student values(null,'" + stuName + "'," + 
												age + ",'" + 
												sex + "'," + 
												height + ",'" + 
												address + "','" + 
												phoneNum + "')";
		System.out.println(sql);
		//1.获取连接
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		int row = stmt.executeUpdate(sql);
		System.out.println("添加影响的行数:" + row);
		JDBCUtils.closeAll(null, stmt, conn);
}
}
package cn.baidu.demo05_关于SQL注入的问题;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import cn.baidu.demo03_自定义工具类的编写.JDBCUtils;
public class Demo {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入登录名:");
		String loginName = sc.nextLine();
		System.out.println("请输入密码:");
		String loginPwd = sc.nextLine();
String sql = "select * from users where loginName = '" + loginName + 
										"' and loginPwd = '" + loginPwd + "'";
		System.out.println(sql);
		//1.获取连接对象
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery(sql);
		if(rs.next()){
			System.out.println("欢迎:" + loginName + " 登录系统!");
		}else{
			System.out.println("用户名或密码错误!");
		}
		JDBCUtils.closeAll(rs, stmt, conn);
	}
}
package cn.baidu.demo06_使用PreparedStatement防止SQL注入;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
import cn.baidu.demo03_自定义工具类的编写.JDBCUtils;
public class Demo {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入登录名:");
		String loginName = sc.nextLine();
		System.out.println("请输入密码:");
		String loginPwd = sc.nextLine();
String sql = "select * from users where loginName = ? and loginPwd = ?";
//1.获取连接对象
		Connection conn = JDBCUtils.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		//填充数据
		ps.setString(1, loginName);
		ps.setString(2, loginPwd);
ResultSet rs = ps.executeQuery();
		if(rs.next()){
			System.out.println("欢迎:" + loginName + " 登录系统!");
		}else{
			System.out.println("用户名或密码错误!");
		}
		JDBCUtils.closeAll(rs, ps, conn);
	}
}
package cn.baidu.demo06_使用PreparedStatement防止SQL注入;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
import cn.baidu.demo03_自定义工具类的编写.JDBCUtils;
public class Demo {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入登录名:");
		String loginName = sc.nextLine();
		System.out.println("请输入密码:");
		String loginPwd = sc.nextLine();
String sql = "select * from users where loginName = ? and loginPwd = ?";
//1.获取连接对象
		Connection conn = JDBCUtils.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		//填充数据
		ps.setString(1, loginName);
		ps.setString(2, loginPwd);
ResultSet rs = ps.executeQuery();
		if(rs.next()){
			System.out.println("欢迎:" + loginName + " 登录系统!");
		}else{
			System.out.println("用户名或密码错误!");
		}
		JDBCUtils.closeAll(rs, ps, conn);
	}
}
java核心技术第三篇之JDBC第一篇的更多相关文章
- Java基础知识常见面试题汇总第一篇
		[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言  参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ... 
- Java基础(三十一)JDBC(1)常用类和接口
		1.Driver接口 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类.在加载某一驱动程序的Driver类时,它应该创建自己的实例并向java.sql.DriverMana ... 
- java核心技术第四篇之JDBC第二篇
		01.JDBC连接池_连接池的概念: 1).什么是连接池:对于多用户程序,为每个用户单独创建一个Connection,会使程序降低效率.这时我们可以创建一个"容器", 这个容器中, ... 
- javaWeb核心技术第三篇之JavaScript第一篇
		- 概述 - JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言 - 作用:给页面添加动态效果,校验用户信息等. - 入门案例 - js和html的整合 - 方式1:内联式 ... 
- Java中JNI的使用详解第一篇:HelloWorld
		转自: http://blog.csdn.net/jiangwei0910410003/article/details/17465085 今天开始研究JNI技术,首先还是老套路,输出一个HelloWo ... 
- java SE 入门之语言与环境(第一篇)
		Javase的语言与开发环境Keke2016年03月08日 Java属于-Oracle公司(甲骨文)创始人:Gosling1995年诞生1998年12月发布jdk1.22002年2月发布:jdk1.4 ... 
- 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇
		文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言  参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ... 
- JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】
		1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ... 
- #Java学习之路——基础阶段(第一篇)
		我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ... 
随机推荐
- linux命令-压缩与打包
			在 Linux 中可以识别的常见压缩格式有十几种,比如".zip"" .gz"" .bz2" ".tar" " ... 
- python进程基础点整理
			操作系统 串行: 一个程序完完整整的执行完再执行下一个 并发: 看起来像是同时运行,其实就是程序间的切换频率比较快,看不出来 并行:真正的同时运行 多道技术 空间复用:共用一个内存条,多个进程相互隔离 ... 
- Java入门系列之包装类(四)
			前言 上一节我们讲解了StringBuilder VS StringBuffer以及二者区别,本节我们来讲解包装类. 包装类 我们知道在Java中有8中基本数据类型,分为数值类型:byte.short ... 
- 基于STM32F429的ADS1115驱动程序
			1.ADS1115中文资料:https://wenku.baidu.com/view/8bab101feef9aef8941ea76e58fafab069dc44e7.html?rec_flag=de ... 
- Selenium(三):操控元素的基本方法
			1. 操控元素的基本方法 选择到元素之后,我们的代码会返回元素对应的 WebElement对象,通过这个对象,我们就可以操控元素了. 操控元素通常包括: 点击元素 在元素中输入字符串,通常是对输入框这 ... 
- javaWeb技术第二篇之CSS、事件和案例
			<!--内联式 CSS (层叠样式表) 编辑 层叠样式表(英文全称:Cascading Style Sheets) CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式 ... 
- jQuery基础之表单验证
			在使用jquery-validate.js插件时可以做一些初始化配置在初始化jquery-validate.js对象的时候,将外部的一些配置和该插件内部的一些默认配置合并在一起,如果有相同的配置,前者 ... 
- Thymeleaf常用语法:自定义数据转换类
			在模板文件中,可以使用“${{...}}”表达式进行数据转换,Thymeleaf会使用配置好的数据转换类,来实现转换.例如一个User对象,简单起见假设有姓名和年龄两个字段,对象的toString() ... 
- 微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
			之前做的版本用户这块是以获取用户openid为凭证,最近改版重新整理了一下,新增注册登录以手机号码为主, 两种(正常注册手机号码-密码+一键获取当前用户手机号码) getPhoneNumber这个组件 ... 
- bay——安装_Oracle 12C-RAC-Centos7.txt
			★★★____★☆★〓〓〓〓→2019年6月26日10:29:42 bayaim-RAC ——搭建第4次VMware vSphere Client6.0 ----------------------- ... 
