JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
JavaBean 是一种JAVA语言写成的可重用组件。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。这个概念太抽象,简单一点:
主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。这个还是太高级,在简单一点->只是数据打包,提供get set方法:
POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans。有时候也叫做:VO(value -object)或dto(Data Transform Object)
原文再续,书接上回
登陆例子的代码:http://pan.baidu.com/s/1c0ldR5e
public class MariaDBConn {
final String DBDRIVER = "org.mariadb.jdbc.Driver";
final String DBURL = "jdbc:mariadb://localhost:3306/test";
//final String DBDRIVER = "com.mysql.jdbc.Driver"; //if you use mysql
//final String DBURL = "jdbc:mysql://localhost:3306/test";//if you use mysql
final String DBUSER = "root";
final String DBPWD = "123";
Connection conn = null;//数据库连接
public MariaDBConn() {
try {
Class.forName(DBDRIVER);// load the Connecting class
conn = DriverManager.getConnection(DBURL, DBUSER, DBPWD);
}catch (ClassNotFoundException | SQLException e){
e.printStackTrace();
}
}
//another version to initialize with new parameters but not defautl parameters
public MariaDBConn(String dbUrl, String dbUser, String dbPwd) {
try {
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(dbUrl, dbUrl, dbPwd);
}catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
public Connection getConn() {
return conn;
}
public void setConn(Connection conn) {
this.conn = conn;
}
public void closeConn(){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
String pwd = request.getParameter("password");
String username = request.getParameter("username");
MariaDBConn db = new MariaDBConn();//实例化数据库连接类
Connection conn = db.getConn();//获取链接
String sql = "select password from user where username=?";//预设查询语句
PreparedStatement pstmt = null;//预查询语句
String rightPwd = "";
try {
pstmt = conn.prepareStatement(sql);//告诉连接,准备使用这个语句
pstmt.setString(1, username);//往这个语句的第一个问好填入参数
ResultSet rs = pstmt.executeQuery();//执行查询。如果是执行更新应该用executeUpdate
while(rs.next()) {//典型ResultSet处理方法
rightPwd = rs.getString("password");//此时rs指向的是结果集中的一行,取列名为password的值
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!pwd.isEmpty() && rightPwd.equals(pwd)){//仅有equals成立无法应对此种情况:如果没输入密码,然后用户名不存在
try {
request.getRequestDispatcher("jsp/logSuccess.jsp").forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
System.out.println("password is wrong!");
response.sendRedirect("");
}
db.closeConn();
}
3.1在try块中,将PreparedStatement绑定到对应的conn,然后设置参数,执行查询,循环取结果集,可以通过列名或列的序号取得该行的具体值。
最后项目结构图: