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);
}
}
}