JDBC的基础操作

一、DDL

/**
 * DDL语句
 */

package com.study.mysql.test;

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

public class Test6 {
	public static final String url = "jdbc:mysql://localhost:3306/ming";
	public static final String user = "root";
	public static final String password = "******";

	private static Connection conn = null;
	private static Statement st = null;

	public static void main(String[] args) {
		Test6 t = new Test6();
		t.DDL();
	}

	public void DDL() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, user, password);
			String sql = "CREATE TABLE person(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),sex VARCHAR(5),age INT,psot VARCHAR(10),email VARCHAR(20),phone INT)";
			st = conn.createStatement();

			int result = st.executeUpdate(sql);//发送sql语句
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {//关闭连接
			try {
				if (st != null) {
					st.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}

在这里插入图片描述

二、DML(insert…)

/**
 * DML(插入等操作)
 */

package com.study.mysql.test;

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

public class Test7 {
	public static final String url = "jdbc:mysql://localhost:3306/ming";
	public static final String user = "root";
	public static final String password = "mynewroot";

	private static Connection conn = null;
	private static Statement st = null;

	public void DML() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, user, password);// 获取连接

			String sql = "insert into person(NAME,sex,age) values ('张三','男',20)";

			st = conn.createStatement();
			int result = st.executeUpdate(sql);
			System.out.println("影响了" + result + "行");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (st != null) {
					st.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		Test7 t = new Test7();
		t.DML();
	}

}

在这里插入图片描述

三、DQL

当我们知道SQL语句是完成修改语句时,我们就知道使用executeUpdate语句来完成操作;
如果SQL语句是完成查询操作的时候,我们就使用executeQuery来完成。
如果我们不知道SQL语句完成什么操作的时候,就可以使用execute方法来完成。

/**
 * DQL
 */

package com.study.mysql.test;

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

public class Test8 {
	public static final String url = "jdbc:mysql://localhost:3306/ming";
	public static final String user = "root";
	public static final String password = "mynewroot";

	private static Connection conn = null;
	private static Statement st = null;
	private static ResultSet rs = null;

	public void DQL() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, user, password);

			st = conn.createStatement();// 创建Statement对象
			String sql = "select * from person";
			rs = st.executeQuery(sql);// 执行sql语句
			while (rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("NAME");
				String sex = rs.getString("sex");
				System.out.println("编号:" + id + "   姓名:" + name + "   性别:" + sex);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (rs != null)
				try {
					rs.close();
				} catch (SQLException e1) {
					e1.printStackTrace();
					throw new RuntimeException(e1);
				}
			if (st != null) {
				try {
					st.close();
				} catch (SQLException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}
	}
	public static void main(String[] args) {
		Test8 t = new Test8();
		t.DQL();
	}
}

在这里插入图片描述

四、事务处理

1、在JDBC中处理事务,都是通过Connection完成的。
2、Connection的三个方法与事务有关:
  • setAutoCommit(boolean):设置是否为自动提交事务,如果true(默认值为true)表示自动提交,也就是每条执行的SQL语句都是一个单独的事务,如果设置为false,那么相当于开启了事务了;con.setAutoCommit(false) 表示开启事务。
  • commit():提交结束事务。
  • rollback():回滚结束事务。
3、 什么时候使用事务

当需要一次执行多条SQL语句时,可以使用事务。通俗一点说,就是,如果这几条SQL语句全部执行成功,才对数据库进行一次更新;如果有一条SQL语句执行失败,则这几条SQL语句全部不进行执行,这个时候需要用到事务。

把想要一次性提交的几个sql语句用事务进行提交 
     Statement stmt = null; 
     stmt = conn.createStatement(); 
     stmt.executeUpdate(sql1); 
     stmt.executeUpdate(Sql2); 
     . 
     . 
     . 
     conn.commit();   //使用commit提交事务 
4、JDBC处理事务的格式
try{
     con.setAutoCommit(false);//开启事务,设置事务不自动提交(默认情况是自动提交的) 
     ......
     con.commit();//提交事务      
} catch() {
    con.rollback();//回滚事务
}
5、例子

转账前:
在这里插入图片描述

/**
 * 事务处理
 */

package com.study.mysql.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Test9 {
	Connection conn = null;
	PreparedStatement ppst = null;

	/**
	 * 进行模拟转账的操作
	 */
	public void transferAccounts(String from, String to, double money) {

		try {
			JDBCutil.driver();// 注册驱动
			conn = JDBCutil.getConnection();// 获取数据库连接
			conn.setAutoCommit(false);
			updateBalance(conn, from, -money);// 给from减去相应余额
			updateBalance(conn, to, +money);// 给to加上相应余额
			conn.commit();// 提交事务

		} catch (Exception e) {
			try {
				System.out.println("转账失败!");
				conn.rollback();// 如果语句有一条失败,就会滚事务
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		} finally {// 关闭连接,释放资源
			JDBCutil.close(conn, ppst);
		}
	}

	/**
	 * 修改指定用户的余额
	 */
	public void updateBalance(Connection conn, String name, double balance) {
		try {
			String sql = "update account set balance = balance + ? where name = ?";
			PreparedStatement ppst = conn.prepareStatement(sql);
			ppst.setDouble(1, balance);
			ppst.setString(2, name);
			ppst.executeUpdate();

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

	public static void main(String[] args) {
		Test9 t = new Test9();
		t.transferAccounts("zs", "ls", 100);

	}
}

转账后:
在这里插入图片描述

6、关于事务的讲解可以看这2篇文章

事务
事务隔离

五、简化一下程序

可以发现很多步骤每次一直重复写,代码量大,而且看起来很繁琐。那么我们可以把这些方法封装到一个类中,要用的时候直接调用即可。

/**
 * 将注册驱动、连接、创建Statement对象、关闭连接凑一起
 */

package com.study.mysql.test;

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

public class JDBCutil {
	public static String url = "jdbc:mysql://localhost:3306/ming";
	public static final String user = "root";
	public static final String password = "mynewroot";

	public static Connection conn = null;
	public static Statement st = null;
	public static ResultSet rs = null;

	/**
	 * 一、注册驱动程序
	 */
	public static void driver() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 二、获取连接对象,该方法返回一个连接
	 */
	public static Connection getConnection() {
		try {
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return conn;

	}

	/**
	 * 三、释放资源、断开连接 --------注意参数个数
	 */
	public static void close(Connection conn, Statement st) {
		if (st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public static void close(Connection conn, Statement st, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if (st != null) {
			try {
				st.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

  • 使用jdbc工具类来获取连接对象
    conn = JDBCutil.getConnection();

  • 关闭连接

 JDBCutil.close(conn, st);
 JDBCutil.close(conn, st,rs);
  • 注册驱动
    JDBCutil.driver();

猜你喜欢

转载自blog.csdn.net/Geekst/article/details/90609599