java与Mysql基础应用实例

这里拿几个类的代码直接进行分析:

User类:

package cn.edu.spu.stumis;

public class User {

    String username;
    String password;
    String rolename;
    String name;
    public String getUsername() {
        return username;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getRolename() {
        return rolename;
    }
    public void setRolename(String rolename) {
        this.rolename = rolename;
    }

    public String[] toData(){
        String[] data = new String[4];
        data[0] =  this.getUsername();
        data[1] =  this.getPassword();
        data[2] =  this.getRolename();
        data[3] =  this.getName();
        return data;
    }

    @Override
    public String toString(){
        return this.getName();
    }

}

这个是一个用户类,用来接收用户数据和返回用户数据。这样封装到一个类里可以提高了数据的安全性。


SysDataSource类

import java.sql.*;

public class SysDataSource {

    private static SysDataSource dataSource;
    private Connection conn;

    private SysDataSource(){

    }
    public static SysDataSource getInstance(){
        if(dataSource == null){
            dataSource = new SysDataSource();
        }
        return dataSource;
    }
    public Connection getConnection() throws SQLException{
        if(conn == null || conn.isClosed())
        {
                conn = DriverManager.getConnection("jdbc:mysql://localhost/stu_mis","root","");
        }
        return conn;
    }

}

这个类主要是连接数据库的操作。其中DriverManager.getConnection()是一个登陆数据库的方法,括号中的参数是要连接数据库的url。


UserDAO类

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDAO {
    /*省略掉,具体在下面*/
    public User findUser( String username);
    public List<User> listUser();
    public List<User> listUser(String rolename);
    public boolean delete(String username);

    public String[][] toData(){
        List<User> list = listUser();
        String[][] data = new String[list.size()][4];
        for (int i=0; i< list.size(); i++){
            data[i] = list.get(i).toData();
        }
        return data;

    }

}

这个是一个对user数据库的操作类。


具体分析:

首先是查询操作:

public User findUser( String username){
        User user = null;
        Connection conn = null;
        try {
            //连接数据库
            conn = SysDataSource.getInstance().getConnection();
            //设定命令
            PreparedStatement pstmt = conn.prepareStatement("select * from user where username = ?");
            pstmt.setString(1, username);//指定命令参数
            ResultSet rs = pstmt.executeQuery();//执行并返回结果
            if(rs.next()){
            user = new User();
            user.setUsername(rs.getString("username"));
            user.setPassword(rs.getString("password"));
            user.setRolename(rs.getString("rolename"));
            user.setName(rs.getString("name"));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(conn!=null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            }
        return user;
    }

用User定义一个方法findUser(),参数是String类型的username,所以这是一个用来查询用户名的方法。

方法内部:

  • 初始化:
    用User定义一个变量user,作为方法的返回。
    用Connection定义一个变量conn,作为连接数据库的变量。

  • 连接数据库:
    conn = SysDataSource.getInstance().getConnection();这句代码就是将conn连接到指定的数据库上。

  • 设定命令:
    PreparedStatement pstmt = conn.prepareStatement(“select * from user where username = ?”);这个PreparedStatement包含已编译的SQL语句。PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。该语句为每个 IN 参数保留一个问号“?”作为占位符。
    接着pstmt.setString(1, username); 进行指定命令参数。即将方法中username这个参数填入问号“?”的那个地方。

  • 写入数据
    ResultSet rs = pstmt.executeQuery(); ResultSet是数据中查询结果返回的一种对象,它是一个集合,而executeQuery()方法则是用于SELECT等查询。
    然后把user对象化,并使用set方法将数据填入user中,最后返回。


然后是将所有user数据全部查询的操作:

public List<User> listUser(){
        List<User> list =  new ArrayList<User> ();
        Connection conn = null;
        try {
            conn = SysDataSource.getInstance().getConnection();
            PreparedStatement pstmt = conn.prepareStatement("select * from user");
            ResultSet rs = pstmt.executeQuery();
            while(rs.next()){
                User user = new User();
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setRolename(rs.getString("rolename"));
                user.setName(rs.getString("name"));
                list.add(user);

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if(conn!=null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            }

        return list;
    }

需要用到 List< User >,和上面的查询特定用户操作基本一致,只是prepareStatement对象中的SQL语句为select * from user,所以就把所有数据都查询出来,然后通过while(rs.next())将查询到的所有数据读入。


还有插入操作:

public boolean insert(User user){
        boolean b = false;
        Connection conn = null;
        try {
            conn = SysDataSource.getInstance().getConnection();
            PreparedStatement pstmt = conn.prepareStatement("insert into user(username,password,rolename,name) values(?,?,?,?)");
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());;
            pstmt.setString(3, user.getRolename());
            pstmt.setString(4, user.getName());
            b = pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if(conn!=null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            }

        return b;
    }

执行一下PreparedStatement pstmt = conn.prepareStatement(“insert into user(username,password,rolename,name) values(?,?,?,?)”);这个语句,再将插入的数据分别填入 “?”中,接着pstmt.execute()用来执行插入这个操作。


删除操作:

public boolean delete(String username){
        boolean delflag = false;
        Connection conn = null;
        try {
            //连接数据库
            conn = SysDataSource.getInstance().getConnection();
            //设定命令
            PreparedStatement pstmt = conn.prepareStatement("delete from user where username = ?");
            pstmt.setString(1, username.trim());//指定命令参数
            delflag = pstmt.execute();//执行并返回结果     
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(conn!=null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            }   
        return delflag;
    }

执行一下PreparedStatement pstmt = conn.prepareStatement**(“delete from user where username = ?”);这个语句,再将要删除的用户名填入到“?”中,接着**pstmt.execute()用来执行插入这个操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值