我们首先需要在Navicat Premium上创建一个数据库实例(test),然后创建一个stu_info表(id,name,mobile,address)
接着创建一个Test类进行操作:
在这之前需要导一个包:这个包可以在网上找到,连接MySQL数据库用于加载驱动的

mysql-connector-java-5.1.44-bin.jar

我们先来看看如何添加数据

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;


public class Test {

	public static void main(String[] args) {
		Connection connection = null;
		Statement statement = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载驱动,此处会出现检查时异常,所以需要抛出或捕获
			String url = "jdbc:mysql://127.0.0.1:3306/test";//指定连接哪一台计算机上的哪个数据库实例
			connection = DriverManager.getConnection(url, "root", "root");//获取数据库的连接对象(用户名和密码因人或机器而异),
																		//并返回Connection对象,
																		//你可以想象成C语言中打开文件
			statement = connection.createStatement();//创建SQL语句,
			String sql = "insert into stu_info(id,name,mobile,address) values ('2016','张三','182','郑州市') ";
			int affect = statement.executeUpdate(sql);//执行SQL语句,并返回影响的行数,
												//但仅限用于insert(添加)、update(修改)、delete(删除),不包括select(查询)
			
			//显示出执行的效果
			if(affect>0) {//因为上一语句若执行成功,则影响的行数肯定>0
				System.out.println("执行成功");
			}else {		  //否则肯定为0
				System.out.println("执行失败");
			}
			
			/**
			 * 我们知道在C语言中打开一个文件,在执行完诸如读写添加修改等操作后,要及时把打开的文件再关上,以防文件的数据丢失等错误;
			 * 同样的,在Java中先连接数据库,执行完操作后也要及时释放资源(即断掉链接),而断掉连接就用close;
			 */
//			connection.close();  //但关闭操作放在这里不合适,原因是如果上面的语句有异常(例如sql语句语法出错),
//			statement.close();   //则下面的语句无法再执行,资源就得不到释放,就有可能会出问题,
								   //为解决这个问题,就需用到finally语句(无论是否有异常都会执行)
				
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			
			//释放connection资源
			try {
				if (connection != null) {/*此处之所以要用if语句,是因为怕上面出现异常导致connection为null,会出现空指针异常
										(你可以理解成C语言中文件打开错误,也就是压根没有打开,所以也就不用关闭了)*/
					connection.close();//此处也会出现检查时异常,所以需要捕获
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			//释放statement资源
			try {
				if (statement != null) {//原因同上
					statement.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
		
	}
}

此时执行结果为:执行成功

再打开Navicat Premium中的stu_info表,刷新一下就可看到添加的数据了

themlef table增删改数据_themlef table增删改数据


我们再来看看如何修改数据

其实跟上面的步骤几乎一模一样,只需改动一下sql语句,将其改为

String sql = "update stu_info set mobile='123456',address='郑州市中原区' where name='张三'"; 其中set mobile='123456',address='郑州市中原区'是传入新数据从而覆盖旧数据,而where name='张三'是指定修改哪一行数据

此时,再打开stu_info表,可以看到修改后的数据:

themlef table增删改数据_mysql_02


还有删除数据,跟上面的仍旧一样,仍只需改动一下sql语句,将其改为

String sql = "delete from stu_info where name='张三'";

其中where name='张三'是指定删除哪一行数据,若没有where,则删除stu_info表中的所有数据

因为本来表中只有一行数据,所以删除之后就没有了:

themlef table增删改数据_themlef table增删改数据_03


此时你是否会发现上面的代码除了sql不一样,也就是具体的操作不同之外,其他地方具有高度一致性,也就是重复的很多,显得冗余繁杂,所以为了简化代码,我们可以可以单独定义一个方法,将sql当成一个参数变量,并将该方法放到一个类中:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class DBLink {

	public boolean update(String sql) {//将实参传给形参sql
		Connection connection= null;
		Statement statement =null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://127.0.0.1/test";
			connection = DriverManager.getConnection(url, "root", "root");
			statement = connection.createStatement();
			int affect = statement.executeUpdate(sql);
			return affect>0;//若执行成功,则返回true

	   /**
		* 这里我想说明一下,由于finally的特殊性,会先执行完finally里的释放资源语句,再执行返回值语句
	 	* 总之就是在结束方法之前无论如何都要先释放资源才可以
		*/
			

		} catch (Exception e) {
			e.printStackTrace();
		} finally {

			//释放statement资源
			try {
				if (statement != null) {
					statement.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}

			//释放connection资源
			try {
				if (connection != null) {
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return false; //执行不成功,则返回false
	}
}

再来调用该通用方法:

package jdbc;


public class Test {

	//添加
	public static void insert() {
		String sql = "insert into stu_info(id,name,mobile,address) values ('2016','张三','182','郑州市')";
		if(new DBLink().update(sql)) {//调用DBLink方法,并传入实参
			System.out.println("添加成功");
			return;
		}
		System.out.println("添加失败");
	}
	
	//修改
	public static void update() {
		String sql = "update stu_info set name = '李四' where mobile = '182'";			
		if(new DBLink().update(sql)) {
			System.out.println("修改成功");
			return;
		}
		System.out.println("修改失败");
	}
	
	//删除
	public static void delete() {
		String sql = "delete from stu_info where address = '郑州市'";			
		if(new DBLink().update(sql)) {
			System.out.println("删除成功");
			return;
		}
		System.out.println("删除失败");
		
	}
	
	//调用各个操作方法
	public static void main(String[] args) {
		insert();
//		update();
//		delete();
	}
}

至于为啥要把查询数据另说,是因为查询数据所用的方法跟其他三种略有不同,它用的不是statement.executeUpdate(),而是statement.executeQuery(),其他的地方大同小异:
我们直接通过定义一个查询方法(select())来进行说明

public static void select() {
	Connection connection = null;//initialize variable(初始化变量为null)
	Statement statement = null;
	ResultSet resultset = null;
	try {
		Class.forName("com.mysql.jdbc.Driver");
		String url = "jdbc:mysql://127.0.0.1:3306/test";
		connection = DriverManager.getConnection(url, "root", "root");
		statement = connection.createStatement();//创建SQL语句对象
		String sql = "select id,name,mobile,address from stu_info";
		resultset = statement.executeQuery(sql);//执行SQL语句
		
		//此时数据都在resultset里面,需要通过循环把它显示出来
		
		while(resultset.next()) {//next方法移动“指针”至一行数据,该行有数据则返回true,没有数据则返回false
								//你可以理解成C语言中的指针下移一位
			
			//查询数据
			String id = resultset.getString("id");
			String name = resultset.getString("name");
			String mobile = resultset.getString("mobile");	
			String address = resultset.getString("address");
			System.out.println(id+","+name+","+mobile+","+address);
		
		}
	} catch (Exception e) {
		e.printStackTrace();
	} finally {

		//释放resultset资源 (你可以理解成C语言中关闭文件,让指针不在指向该文件)
		try {
			if (resultset != null) {
				resultset.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		//释放connection资源
		try {
			if (connection != null) {
				connection.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		//释放statement资源
		try {
			if (statement != null) {
				statement.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}		
}

总结一下:
- 这次的重点就是如何连接MySQL数据库、以及如何简单的操作MySQL数据库实例!