Java任务:用户添加查询(MySql预编译
来自CloudWiki
目录
任务描述:用户登录
如图7-1所示,运用JDBC组件实现用户登录功能;并根据登录成功与否,作出提示。
图7-1 用户登录
任务准备
加载指定数据库的驱动程序
Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。
你可以从群邮件里下载MySQL驱动 jar 包:mysql-connector-java-5.1.39-bin.jar
导入数据库驱动程序
具体参见 Eclipse导入数据库驱动程序
创建测试数据
接下来我们在 MySQL 中创建 cloud 数据库,并创建 user 数据表,表结构如下:
mysql> create database cloud; Query OK, 1 row affected (0.00 sec) mysql> use cloud; Database changed mysql> CREATE TABLE IF NOT EXISTS `user`( `id` INT UNSIGNED AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `password` VARCHAR(40) NOT NULL, PRIMARY KEY ( `id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> CREATE UNIQUE INDEX uname on user(name); Query OK, 0 rows affected (0.25 sec) Records: 0 Duplicates: 0 Warnings: 0
插入一些数据:
mysql> INSERT INTO `user` (name,password) VALUES ('ma', '123456'); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO `user` (name,password) VALUES ('ma', '123457'); ERROR 1062 (23000): Duplicate entry 'ma' for key 2
</nowiki>
接口介绍
假设项目与用户有关的操作接口UserDao,前面我们用HashMap实现了这个接口,
现在我们用对数据库的操作来实现这个接口。
UserDao接口
package dao; import entity.User; public interface UserDao { public void addUser(User u);//添加用户 public void queryUser( );//查询用户 public boolean hasUser(String name);//查询某个用户是否存在 public boolean verify(String name, String pwd);//验证用户名和密码是否一致 }
接口的实现类
创建实现类UserDaoSQL
UserDaoSQL:
public class UserDaoSQL implements UserDao{ // JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://10.0.0.30:3306/cloud?characterEncoding=utf8"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "root"; static final String PASS = "000000"; Connection conn; public UserDaoSQL(){ }
建立连接函数
/** * 连接数据库 * @param 值为空 * @return Connection 建立的数据库连接 */ private boolean getConn() { //Connection conn = null; try { Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动 this.conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS); System.out.println("MySQL连接成功!"); } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); return false; } catch (SQLException e) { System.out.println(e.getMessage()); return false; } return true; }
在类的构造函数仲添加此函数的调用:
public UserDaoSQL(){ this.getConn(); }
编写addUser()方法
/** * 向数据库中添加用户 * @param user,要添加的用户 * @return 返回值为空 */ public void addUser(User user){//添加用户 PreparedStatement pstmt; try { //1. 编写sql模板,绑定到预编译语句上 String sql = "insert into user (name,password) values(?,?)"; pstmt = (PreparedStatement) conn.prepareStatement(sql); //2.向模板上填入值 pstmt.setString(1, user.getName()); pstmt.setString(2, user.getPwd()); //pstmt.setInt(2, user.getAge()); pstmt.setDate //3.执行sql语句 int i = pstmt.executeUpdate(); if(i!=0){ System.out.println(user.getName()+"注册成功!"); }else { System.out.println(user.getName()+"注册失败!"); } pstmt.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } }
编写hasUser方法
/** * 验证用户名是否存在 * @param name,用户名 * @return 布尔值 */ public boolean hasUser(String name){//查询某个用户是否存在 boolean success=false;//标记验证是否成功 try { String sql = "select * from user where name=? "; PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setString(1, name); ResultSet rs = pstmt.executeQuery();//执行查询 if(rs.next()) { //System.out.println("欢迎" + rs.getString("name")); success=true; } pstmt.close(); }catch (SQLException e) { System.out.println(e.getMessage()); } return success; }
编写queryUser( )方法
/** * 向数据库中查询所有用户 * @param 值为空 * @return 值为空 */ public void queryUser( ){//查询用户 String sql = "select * from user"; PreparedStatement pstmt; try { pstmt = (PreparedStatement)conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery();//执行查询 int col = rs.getMetaData().getColumnCount();//获取字段数 System.out.println("============================"); while (rs.next()) { for (int i = 1; i <= col; i++) { System.out.print(rs.getString(i) + "\t"); if ((i == 2) && (rs.getString(i).length() < 8)) {//此行仅仅是为了显示更好看,可以删去 System.out.print("\t"); } } System.out.println(""); } System.out.println("============================"); } catch (SQLException e) { System.out.println(e.getMessage()); } }
编写verify()方法
/** * 验证用户名和密码是否正确 * @param usename,用户名 * @param password,密码 * @return 建立的数据库连接 */ public boolean verify(String username, String password) { boolean success=false; try { ResultSet rs = null; //建立一个空的结果集 //1.创建PreparedStatement 对象,让它与一条SQL模板绑定; String sql = "select * from user where name=? and password=?"; PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql); //使用2. setXXX()系列方法为sql命令设置值 pstmt.setString(1, username);// pstmt.setString(2, password); //setInt,setFloat //3.执行查询 rs = pstmt.executeQuery();// if(rs.next()) { success=true; } else { success=false; } pstmt.close(); }catch (SQLException e) { System.out.println(e.getMessage()); } return success; }
编写测试类
TestUser:
package main; import java.util.Scanner; import dao.UserDao; import dao.UserDaoSQL; import entity.User; public class TestUser { public static void main(String[] args) throws Exception{ UserDao uds =new UserDaoSQL(); /* 用户登录操作 */ boolean success; String name,pwd; Scanner sc = new Scanner(System.in); do { System.out.println("请输入用户名:"); name =sc.next(); System.out.println("请输入密码:"); pwd = sc.next(); success=uds.verify(name, pwd); if(success) { System.out.println("登录成功!"); }else { System.out.println("登录失败!"); } }while(success!=true); /* 添加新用户 */ do { System.out.println("新用户注册:"); System.out.println("请输入新用户名:"); name =sc.next(); System.out.println("请输入新密码:"); pwd = sc.next(); }while(uds.hasUser(name));//验证此用户名是否存在,否则,重复输入 User u1=new User(name,pwd); uds.addUser(u1); /*查询 所有用户 */ uds.queryUser(); System.out.println("Goodbye!"); } }
用到的其他类
User:
package entity; public class User { protected String id; protected String name; protected String pwd; public User() { } public User(String n,String p) { this.name = n; this.pwd = p; } public void setName(String name) { this.name = name; } public void setPwd(String pwd) { this.pwd = pwd; } public String getName() { return this.name; } public String getPwd() { return this.pwd; } public String toString() { String s=""; s= "姓名:"+this.name + " 密码:" +this.pwd; return s; } public static void main(String[] args) { // TODO Auto-generated method stub User u1 = new User(); u1.setName("wangli");u1.setPwd("000000"); System.out.println("姓名: "+u1.getName()+" 密码: "+u1.getPwd()); User u2 = new User("chenming","123456"); System.out.println(u2.toString()); } }