您的位置:首页 > 编程语言 > Java开发

java与Mysql基础应用实例

2017-06-09 19:36 309 查看
这里拿几个类的代码直接进行分析:

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()用来执行插入这个操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: