用户输入登录例程(此为传智播客学习视频中对应的源码,仅供学习):
实现JDBC操作
//1、注册驱动
//2、创建连接
//3、得到执行sql语句的Statement对象
//4、执行sql语句,并返回结果
//5、处理结果
//6关闭资源
...\src 下面的 dbinfo.properties文件,用于保存连接数据库需要的用户名、密码、注册的数据库驱动。只所以使用此文件来保存这些信息,是为了在更换数据库时,不需要再在代码中进行修改,直接修改此文件中对应的内容即可,可移植性高。
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql:///day06 (此中的\\\表示的是本机默认端口)
user=root
password=abc
...\src\com\itheima\client 路径下的 Login.java 文件
package com.itheima.client;
import java.util.Scanner;
import com.itheima.entity.User;
import com.itheima.service.DoLogin;
public class Login {
public static voidmain(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("请输入用户名:");
String name =input.nextLine();
System.out.println("请输入密码:");
String pwd =input.nextLine();
DoLogin dl = newDoLogin();
User user =dl.findUser(name, pwd);//调用查询用户的方法
if(user!=null){
System.out.println("欢迎你:"+user.getName());
}else{
System.out.println("用户名或密码错误!");
}
}
}
...\src\com\itheima\entity路径下的 User.java 文件
package com.itheima.entity;
import java.util.Date;
public class User {
private int id;
private String name;
private String password;
private String email;
private Date birthday;
public int getId() {
return id;
}
public void setId(intid) {
this.id = id;
}
public String getName(){
return name;
}
public voidsetName(String name) {
this.name = name;
}
public StringgetPassword() {
return password;
}
public voidsetPassword(String password) {
this.password =password;
}
public String getEmail(){
return email;
}
public voidsetEmail(String email) {
this.email =email;
}
public Date getBirthday(){
return birthday;
}
public voidsetBirthday(Date birthday) {
this.birthday =birthday;
}
@Override
public String toString(){
return "User[id=" + id + ", name=" + name + ", password=" +password
+", email=" + email + ", birthday=" + birthday +"]";
}
}
...\src\com\itheima\entity路径下的 DoLogin.java 文件
package com.itheima.service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.itheima.entity.User;
import com.itheima.util.DBUtils;
public class DoLogin {
/**
* 根据用户名和密码查询用户对象信息
* @param name
* @param pwd
* @return u
*/
public UserfindUser(String name,String pwd){
Connection conn =null;
PreparedStatementstmt = null;
ResultSet rs =null;
User u = null;
try {
conn =DBUtils.getConnection();//得到连接对象Connection
String sql="SELECT * FROM users WHERE NAME=? AND PASSWORD=?";
stmt =conn.prepareStatement(sql);//得到执行sql语句的对象Statement
/**
* preparedStatement:预编译对象, 是Statement对象的子类。
* 特点:
* 性能要高
* 会把sql语句先编译
* sql语句中的参数会发生变化,过滤掉用户输入的关键字。
**/
//给?赋值
stmt.setString(1,name);//1代表SQL语句中的第一个“?”号
stmt.setString(2,pwd);
rs =stmt.executeQuery();//执行sql语句
if(rs.next()){
u =new User();
u.setId(rs.getInt(1));
u.setName(rs.getString(2));
u.setPassword(rs.getString(3));
u.setEmail(rs.getString(4));
u.setBirthday(rs.getDate(5));
}
} catch(SQLException e) {
e.printStackTrace();
}finally{
DBUtils.closeAll(rs,stmt, conn);
}
return u;
}
}
...\src\com\itheima\entity路径下的 DBUtils.java 文件
package com.itheima.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
public class DBUtils {
private static StringdriverClass;
private static Stringurl;
private static Stringuser;
private static Stringpassword;
/**
* 此处使用了静态代码块,在第一次加载该类时,就会执行这段代码。
* 此处没有使用DriverManager.registerDriver(newcom.mysql.jdbc.Driver());不建议使用,
* 原因有2个:
* > 导致驱动被注册2次。
* > 强烈依赖数据库的驱动jar
* 解决办法:
* Class.forName("com.mysql.jdbc.Driver");
**/
static{
ResourceBundle rb= ResourceBundle.getBundle("dbinfo"); //从dbinfo.properties文件中获取数据
//给上面4个变量赋值
driverClass =rb.getString("driverClass");
url =rb.getString("url");
user =rb.getString("user");
password =rb.getString("password");
try {
Class.forName(driverClass);
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
//得到连接
public static ConnectiongetConnection() throws SQLException{
returnDriverManager.getConnection(url, user, password);
}
//关闭资源
public static voidcloseAll(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null){
try {
rs.close();
} catch(SQLException e) {
e.printStackTrace();
}
rs = null;
}
if(stmt!=null){
try {
stmt.close();
} catch(SQLException e) {
e.printStackTrace();
}
stmt =null;
}
if(conn!=null){
try {
conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
conn =null;
}
}
}