查看“Java任务:用户添加查询(MySql预编译”的源代码
←
Java任务:用户添加查询(MySql预编译
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==任务描述:用户登录== 如图7-1所示,运用JDBC组件实现用户登录功能;并根据登录成功与否,作出提示。 [[文件:java7-1.png]] 图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 数据表,表结构如下: <nowiki>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 </nowiki> 插入一些数据: <nowiki>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> </nowiki> ==接口介绍== 假设项目与用户有关的操作接口UserDao,前面我们用HashMap实现了这个接口, 现在我们用对数据库的操作来实现这个接口。 ===UserDao接口=== <nowiki> 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);//验证用户名和密码是否一致 }</nowiki> ==接口的实现类== ===创建实现类UserDaoSQL=== UserDaoSQL: <nowiki> 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(){ }</nowiki> ===建立连接函数=== <nowiki> /** * 连接数据库 * @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; } </nowiki> 在类的构造函数仲添加此函数的调用: <nowiki> public UserDaoSQL(){ this.getConn(); }</nowiki> ===编写addUser()方法=== <nowiki> /** * 向数据库中添加用户 * @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()); } }</nowiki> ===编写hasUser方法=== <nowiki> /** * 验证用户名是否存在 * @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; } </nowiki> ===编写queryUser( )方法=== <nowiki> /** * 向数据库中查询所有用户 * @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()); } } </nowiki> ====编写verify()方法==== <nowiki> /** * 验证用户名和密码是否正确 * @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; } </nowiki> ===编写测试类=== TestUser: <nowiki> 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!"); } } </nowiki> ==用到的其他类== User: <nowiki>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()); } } </nowiki>
返回至
Java任务:用户添加查询(MySql预编译
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息