(一)首先要有一个数据库,在数据库里新建一个表,用来操作id要设置为自动增长列,否则在插入操作无法成功。
UserDao.java
Dao包下用于对数据库的操作数据库
package com.weihai.dao;
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 java.util.ArrayList;
import com.weihai.bean.User;
/**
* 访问数据库的JavaBean
* 实现某种功能,我们称为功能Bean
* @author 1
*
*/
public class UserDao {
/**
* 实现登录验证 方法定义三要素:方法名、参数、返回值
*
* @param username
* @param password
* @return
*/
public Connection conn = null;
public PreparedStatement pt = null;
public ResultSet rs = null;
/**
* 用户名密码验证
* @param username
* @param password
* @return
*/
public void getConntion(){
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 创建数据库的连接
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_shop", "root", "");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void close(){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (pt != null) {
try {
pt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public boolean login(String username, String password) {
// 2.访问数据库,查询用户名密码
// (1)加载数据库驱动
boolean t=false;
System.out.print(username);
getConntion();
// 解决Sql注入的方法,利用PreparedStatement:预处理的语句容器
// PreparedStatement允许在sql语句中使用占位符?
// PreparedStatement的优点:
// 1.解决SQL注入
// 2.提高程序的可读性和可维护性
// 3.执行效率高
String sql = "select * from admin_info where name=? and pwd=?";
try {
pt = conn.prepareStatement(sql);
pt.setString(1, username);
pt.setString(2, password);
// 执行SQL语句
rs = pt.executeQuery();
if(rs.next()){
t=true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 执行SQL语句之前需要给参数赋值
close();
return t;
}
/**
* 查询数据库的所有记录
* @return
*/
public ArrayList<User> queryAll(){
//使用泛型,解决强转的问题
ArrayList<User> users = new ArrayList<User>();
//2.访问数据库,查询用户名密码
//(1)加载数据库驱动
getConntion();
//(3)创建语句容器
String sql= "select * from admin_info";
try {
pt = conn.prepareStatement(sql);
//(4)执行Sql语句
rs = pt.executeQuery();
//遍历结果集,把结果集转存到users中
while(rs.next()){
//一条记录对应一个User对象
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("name"));
user.setPassword(rs.getString("pwd"));
//需要把每个user添加到Users中
users.add(user);
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//关闭数据库连接
close();
return users;
}
/**
*
*/
public boolean insert(User user){
boolean t=false;
getConntion();
// 解决Sql注入的方法,利用PreparedStatement:预处理的语句容器
// PreparedStatement允许在sql语句中使用占位符?
// PreparedStatement的优点:
// 1.解决SQL注入
// 2.提高程序的可读性和可维护性
// 3.执行效率高
String sql = "insert into admin_info(name,pwd) values(?,?)";
try {
pt = conn.prepareStatement(sql);
pt.setString(1, user.getUsername());
pt.setString(2, user.getPassword());
// 执行SQL语句
int i= pt.executeUpdate();
if(i>0){
t=true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 执行SQL语句之前需要给参数赋值
close();
return t;
}
}
这个封装好的方法可以实现上面的功能,但更加优化
package com.weihai.conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBConn {
public static final String dbDriver="com.mysql.jdbc.Driver";
public static final String dbURL="jdbc:mysql://localhost:3306/db_shop";
public static final String dbUsername="root";
public static final String dbPwd="";
/**
* 创建数据库连接
*/
public static Connection getConntion(){
Connection conn = null;
try {
Class.forName(dbDriver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 创建数据库的连接
try {
conn = DriverManager.getConnection(dbURL, dbUsername, dbPwd);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 关闭数据库
*/
public static void close(Connection conn,PreparedStatement pt,ResultSet rs){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (pt != null) {
try {
pt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void close(Connection conn,PreparedStatement pt){
if (pt != null) {
try {
pt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}