/**
bug处理方法
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//使用main方法时报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,不知道怎么解决?
public static void main(String[] args) {
StatementTest.testLogin();
}
//单元测试时也是如此,就是没有配置好相关jar包
原因:解决
没有配置好相关jar包:点击File键Project Structure->Moudles->Dependencies找到mysql-connector-java-8.0.20.jar(选择自己下载好的jar包)
并选择,然后点击Apply
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.Scanner;
import org.junit.jupiter.api.Test;
public class StatementTest {
/**
bug处理方法
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//使用main方法时报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,不知道怎么解决?
public static void main(String[] args) {
StatementTest.testLogin();
}
//单元测试时也是如此,就是没有配置好相关jar包
原因:解决
没有配置好相关jar包:点击File键Project Structure->Moudles->Dependencies找到mysql-connector-java-8.0.20.jar(选择自己下载好的jar包)
并选择,然后点击Apply
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
// 使用Statement的弊端:需要拼写sql语句,并且存在SQL注入的问题
//如何避免出现sql注入:只要用 PreparedStatement(从Statement扩展而来) 取代 Statement 就可
//以了。
@Test
public void testLogin() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
String user = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
String sql = "SELECT user,password FROM user_table WHERE user = '"+ user +"' AND password = '"+ password +"'";
User returnUser = get(sql, User.class);
if(returnUser != null){
System.out.println("登陆成功");
}else{
System.out.println("用户名不存在或密码错误");
}
}
// 使用Statement实现对数据表的查询操作
public <T> T get(String sql, Class<T> clazz) {
T t = null;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
// 1.加载配置文件
InputStream is = StatementTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
// 2.读取配置信息
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
// 3.加载驱动
Class.forName(driverClass);
// 4.获取连接
conn = DriverManager.getConnection(url, user, password);
st = conn.createStatement();
rs = st.executeQuery(sql);
// 获取结果集的元数据
ResultSetMetaData rsmd = rs.getMetaData();
// 获取结果集的列数
int columnCount = rsmd.getColumnCount();
if (rs.next()) {
t = clazz.newInstance();
for (int i = 0; i < columnCount; i++) {
// //1. 获取列的名称
// String columnName = rsmd.getColumnName(i+1);
// 1. 获取列的别名
String columnName = rsmd.getColumnLabel(i + 1);
// 2. 根据列名获取对应数据表中的数据
Object columnVal = rs.getObject(columnName);
// 3. 将数据表中得到的数据,封装进对象
Field field = clazz.getDeclaredField(columnName);
field.setAccessible(true);
field.set(t, columnVal);
}
return t;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return null;
}
}