4.1 jdbc
回顾一下java的jdbc例子。这是类配置了数据库的地址、账号、密码,然后提供了一个函数getCon,进行数据库连接。getCon的操作就好像网站登录输入网址、账号、密码一样。
先来看看地址jdbc:mysql://localhost/testDB?characterEncoding=utf-8,这里面mysql是要连接的数据库类型,如果连的是oracle,那前面就是jdbc:oracle。接下来是数据库所在的域名或ip地址,这个localhost表面数据库在本机,在开发的过程中一般都是这样,然后是数据库的名字testDB,最后的characterEncoding=utf-8是为了支持数据库里的中文,没有它可能会导致乱码。
数据库的账号和密码不多讲,这三个静态属性,在getCon里面会被使用到。
至于getCon() 方法内部,现在完全可以不深究。只需要知道这个方法会得到一个Connection对象,这个对象表示和数据库的一个连接。
接下来,我们在使用这个连接,执行一个sql查询语句:
下面的情形,是用于查询一条记录,一条记录,需要一个Class文件来“装”,否则几个字段就是散的,并不是一个整体。
然后在UserData类后面,添加这个方法
import java.sql.Connection;
import java.sql.SQLException;
public class DBConfig{
public static String DB_URL="jdbc:mysql://localhost/javaidc_jssp?characterEncoding=utf-8";
public static String DB_USER="root";
public static String DB_PSW="123456";
public static Connection getCon(){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
}
catch(ClassNotFoundException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(InstantiationException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IllegalAccessException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con=null;
try{
con=java
.sql
.DriverManager
.getConnection(DBConfig
.DB_URL,DBConfig.DB_USER,DBConfig.DB_PSW);
}
catch(SQLException e){
System.out.println("连接失败");
e.printStackTrace();
}
return con;
}
}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class UserData{
public static boolean userValidate(String userName,String psw){
String pswFromDB="";
// 要执行的sql语句,通过字符串拼接出来
String SQLTEXT="select password from user where userName = '"
+userName+"'";
try{
//使用上面的DBConifg类的getCon方法,建立一个连接
Connection con=DBConfig.getCon();
//准备执行sql的实体
Statement stmt=con.createStatement();
//执行sql,并把查询结果赋给rst
ResultSet rst=stmt.executeQuery(SQLTEXT);
while(rst.next()){
//查询结果,在这里是查询字段为password的值
pswFromDB=rst.getString("password");
}
//后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
rst.close();
stmt.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
if(pswFromDB.equals(psw)){
//比较数据库查到的密码和参数传进来的密码是否相等
return true;
}
return false;
}
//通过用户名查找昵称
public static String getNicknameByUsername(String userName){
String result="";
// 要执行的sql语句,通过字符串拼接出来
String SQLTEXT="select nickname from user where userName = '"
+userName+"'";
try{
// 使用上面的DBConifg类的getCon方法,建立一个连接
Connection con=DBConfig.getCon();
// 准备执行sql的实体
Statement stmt=con.createStatement();
// 执行sql,并把查询结果赋给rst
ResultSet rst=stmt.executeQuery(SQLTEXT);
while(rst.next()){
// 查询结果,在这里是查询字段为password的值
result=rst.getString("nickname");
}
// 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
rst.close();
stmt.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
return result;
}
//通过角色查找用户
public static List getUsernamesByRole(String role){
List result=new ArrayList();
// 要执行的sql语句,通过字符串拼接出来
String SQLTEXT="select username from user where role = '"
+role+"'";
try{
// 使用上面的DBConifg类的getCon方法,建立一个连接
Connection con=DBConfig.getCon();
// 准备执行sql的实体
Statement stmt=con.createStatement();
// 执行sql,并把查询结果赋给rst
ResultSet rst=stmt.executeQuery(SQLTEXT);
while(rst.next()){
// 查询结果,在这里是查询字段为password的值
String username=rst.getString("username");
result.add(username);
}
// 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
rst.close();
stmt.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
return result;
}
}
public class User{
private String username;
private String password;
private String role;
private String nickname;
private String createDate;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password=password;
}
public String getRole(){
return role;
}
public void setRole(String role){
this.role=role;
}
public String getNickname(){
return nickname;
}
public void setNickname(String nickname){
this.nickname=nickname;
}
public String getCreateDate(){
return createDate;
}
public void setCreateDate(String createDate){
this.createDate=createDate;
}
}
public static User getUserByUsername(String username){
User user=new User();
// 要执行的sql语句,通过字符串拼接出来
String SQLTEXT="select * from user where username = '"+username+"'";
try{
// 使用上面的DBConifg类的getCon方法,建立一个连接
Connection con=DBConfig.getCon();
// 准备执行sql的实体
Statement stmt=con.createStatement();
// 执行sql,并把查询结果赋给rst
ResultSet rst=stmt.executeQuery(SQLTEXT);
while(rst.next()){
// 查询结果,在这里是查询字段为password的值
user.setUsername(rst.getString("username"));
user.setPassword(rst.getString("password"));
user.setNickname(rst.getString("nickname"));
user.setRole(rst.getString("role"));
user.setCreateDate(rst.getString("create_date"));
}
// 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
rst.close();
stmt.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
return user;
}
//通过角色查找用户
public static List getUsersByRole(String role){
// List result=new ArrayList ();
// // 要执行的sql语句,通过字符串拼接出来
// String SQLTEXT= "select username from user where role = '"+role+ "'";
// try{
// // 使用上面的DBConifg类的getCon方法,建立一个连接
// Connection con=DBConfig.getCon();
// // 准备执行sql的实体
// Statement stmt=con.createStatement();
// // 执行sql,并把查询结果赋给rst
// ResultSet rst=stmt.executeQuery(SQLTEXT);
// while(rst.next()){
// // 查询结果,在这里是查询字段为password的值
// String username=rst.getString( "username");
// result.add(username);
// }
// // 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
// rst.close();
// stmt.close();
// con.close();
// }
// catch(SQLException e){
// e.printStackTrace();
// }
// return result;
return null;
}