JavaWeb_day9_JDBC

1.Junit Test

package com.shenheSoft;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestJunit {
	@Test
	public void testJunit(){
		System.out.println("testJunit");
	}
	
	@Before
	public void beforeJunit(){
		System.out.println("beforeJunit");
	}
	
	@After
	public void afterJunit(){
		System.out.println("afterJunit");
	}
}

测试的时候,选中test下面的方法,右击run as----JUnit Test,不能选择Before和After

2.JDBC定义

Java数据库连接,就是用Java语言来操作数据库

JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库

mysql的驱动包: mysql-connector-java-5.1.39-bin.jar;

3.JDBC的开发步骤

(1)注册驱动

Class.forName(“com.mysql.jdbc.Driver”);

(2)获取连接

DriverManager.getConnection(url,username,password);

url:jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8

第一部分是jdbc,这是固定的;

第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;

第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称组成。

username和password是登录数据库的用户名和密码

Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/web08”,”root”,”123456”);

(3)获得语句执行者

Statement stat=con.createStatement();

Statement是用来向数据库发送要执行的SQL语句的!

(4)执行sql语句

String sql = “select * from emp”;

ResultSet rs = stmt.executeQuery(sql);

int executeUpdate(String sql):执行更新操作(insert、update、delete等);

ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;

(5)处理结果

(6)释放资源

关闭的顺序是先得到的后关闭,后得到的先关闭。

rs.close();

stmt.close();

con.close();

4.防止SQL

过滤用户输入的数据中是否包含非法字符;

分步校验!先使用用户名来查询用户,如果查找到了,再比较密码;

使用PreparedStatement。

PreparedStatement叫预编译声明

PreparedStatement的好处:

防止SQL攻击;

提高代码的可读性,以可维护性;

提高效率。

PreparedStatement的使

使用Connection的prepareStatement(String sql):即创建它时就让它与一条SQL模板绑定;

调用PreparedStatement的setXXX()系列方法为问号设置值

调用executeUpdate()或executeQuery()方法,但要注意,调用没有参数的方法;

例:

package com.shenhe.day9_JDBC;

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

import org.junit.Test;

public class JDBC_test {
	@Test
	public void TestLogin() {
		try {
			login1("张三","123");
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	/*public void login(String username,String password) throws ClassNotFoundException, SQLException {
		//1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2.获取连接
		Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/web08","root","123456");
		//3.创建执行sql语句对象
		Statement stat=con.createStatement();
		//4.书写sql语句
		String sql="SELECT * FROM tbl_user WHERE uname='"+username+"'AND upassword='"+password+"'";
		//5.执行sql语句
		ResultSet rs = stat.executeQuery(sql);
		//6.对结果集进行处理
		if (rs.next()) {
			System.out.println("恭喜"+username+"登陆成功");
			System.out.println(sql);
		}else {
			System.out.println("用户名或密码错误");
		}
		if (rs!=null) {
			rs.close();
		}
		if (stat!=null) {
			stat.close();
		}
		if (con!=null) {
			con.close();
		}
	}*/
	
	public void login1(String username,String password) throws ClassNotFoundException, SQLException {
		//1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2.创建连接
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/web08","root","123456");
		//3.编写sql语句
		String sql="select * from tbl_user where uname=? and upassword=?";
		//4.创建预处理对象
		PreparedStatement pst = conn.prepareStatement(sql);
		//5.(给占位符)设置参数
		pst.setString(1, username);
		pst.setString(2, password);
		//6.执行查询
		ResultSet rs = pst.executeQuery();
		if (rs.next()) {
			System.out.println("欢迎"+username+"登陆");
			System.out.println(sql);
		} else {
			System.out.println("用户名或密码错误");
		}
		if (rs!=null) {
			rs.close();
		}
		if (pst!=null) {
			pst.close();
		}
		if (conn!=null) {
			conn.close();
		}
	}
	
}

5.JDBC工具类抽取,使用配置文件

在src下新建一个file文件,命名为db.properties(注意,一定要是properties结尾的文件)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=utf8
user=root
password=123456

创建一个类,使用工具加载properties文件,创建连接方法,和创建关闭资源的方法

package com.shenhe.day9_JDBCUtils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtils_V2 {
	public static String driver;
	public static String url;
	public static String user;
	public static String password;
	static {
		/*//使用ResourceBundle加载properties文件
		ResourceBundle bundle = ResourceBundle.getBundle("db");
		driver=bundle.getString("driver");
		url=bundle.getString("url");
		user=bundle.getString("user");
		password=bundle.getString("password");
		*/
		try {
		//1.通过当前类获取类加载器
		ClassLoader loader = JDBCUtils_V2.class.getClassLoader();
		//2.通过类加载器的方法获取一个输入流
		InputStream inputStream = loader.getResourceAsStream("db.properties");
		//3.创建一个properties对象
		Properties prop=new Properties();
		//4.加载输入流
		prop.load(inputStream);
		//5.获取相关参数的值
		driver=prop.getProperty("driver");
		url=prop.getProperty("url");
		user=prop.getProperty("user");
		password=prop.getProperty("password");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//获取连接方法
	public static Connection getConnection() {
		Connection conn=null;
		try {
			Class.forName(driver);
			conn=DriverManager.getConnection(url,user,password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	//关闭资源
	public static void release(Connection conn,PreparedStatement pst,ResultSet rs) {
		try {	
			if (rs!=null) {
				rs.close();
			}
			if(pst!=null) {
				pst.close();
			}
			if(conn!=null) {
				conn.close();
			}
		}catch (SQLException e) {
				
				e.printStackTrace();
		}
	}
}

创建测试类,在测试类中进行增删改查操作

package com.shenhe.day9_JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;
public class TestUtils {
//修改用户信息
@Test
public void testUpdate() {
	Connection conn=null;
	PreparedStatement pst=null;
	try {
		conn=JDBCUtils_V2.getConnection();
		String sql="UPDATE tbl_user SET uname=?,upassword=? WHERE id=?";
		pst=conn.prepareStatement(sql);
		pst.setString(1, "张三22");
		pst.setString(2, "3333");
		pst.setInt(3, 1);
		int num=pst.executeUpdate();
		if (num>0) {
			System.out.println("修改成功");
		} else {
			System.out.println("修改失败");
		}	
	} catch (Exception e) {	
	}finally {
		JDBCUtils_V2.release(conn, pst, null);
	}
}

	
	
//删除用户信息
@Test
public void testDelete() {
	Connection conn=null;
	PreparedStatement pst=null;
	try {
		conn=JDBCUtils_V2.getConnection();
		String sql="delete from tbl_user where id=?";
		pst=conn.prepareStatement(sql);
		pst.setInt(1, 3);
		int num=pst.executeUpdate();
		if (num>0) {
			System.out.println("删除成功");
		} else {
			System.out.println("删除失败");
		}	
	} catch (Exception e) {	
	}finally {
		JDBCUtils_V2.release(conn, pst, null);
	}
}

//添加用户信息
@Test
public void testInsert() {
	Connection conn=null;
	PreparedStatement pst=null;
	try {
		conn=JDBCUtils_V2.getConnection();
		String sql="INSERT INTO tbl_user VALUES(null,?,?)";
		 pst = conn.prepareStatement(sql);
		 pst.setString(1, "赵六");
		 pst.setString(2, "12333");
		 int num = pst.executeUpdate();
		if (num>0) {
			 System.out.println("添加成功");
		}else {
			 System.out.println("添加失败");
		}
	} catch (Exception e) {
	}finally {
		JDBCUtils_V2.release(conn, pst, null);
	}
}
	
	
//查询用户信息根据id
@Test
public void testJDBCUtilsById() {
	Connection conn=null;
	PreparedStatement pst=null;
	ResultSet rs=null;
	try {
	conn = JDBCUtils_V2.getConnection();
	String sql="SELECT * FROM tbl_user WHERE id=?";
	pst=conn.prepareStatement(sql);
	pst.setInt(1, 1);
	rs = pst.executeQuery();
	while (rs.next()) {
		System.out.println(rs.getString(2)+"-------"+rs.getString(3));
	}
	} catch (SQLException e) {
		e.printStackTrace();
	}finally {
		JDBCUtils_V2.release(conn, pst, rs);
	}
}
}

猜你喜欢

转载自blog.csdn.net/weixin_42062397/article/details/82912244