【J2EE】【2.JDBC】JDBC连接数据库(MariaDB,Mysql)(继续之前jee的登陆例子),mariadbjee
零,名词解释
JDBC
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
DAO
DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
JavaBean
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
一,JDBC操作数据库的一般步骤
注册驱动 (只做一次) 建立连接(Connection) 创建执行SQL的语句(Statement) 执行语句 处理执行结果(ResultSet) 释放资源二,简单实现数据库连接类
1,建立eva.dao包,新建MariaDBConn用于链接MariaDB的管理类2,老规矩,贴代码再解释
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();
}
}
}
前面的final是说在代码中不可以在更改变量的值。因为是常量字符串,所以全大写。先定义连接数据库需要的数据,在具体实现还可以从配置文件中读取。
连接过程:注册驱动就是这里的加载类,建立连接就是getConnection那句
有两个版本构造函数,方便使用默认版或者手动输入函数。注意如果使用的是Mariadb,要注意类名。
这个类只是封装了获取连接和关闭连接部分,具体语句执行应该在Servlet中写。
3,但是还没有连接器啊,去mariaDB(mysql)官网下载jdbc连接器
http://dev.mysql.com/downloads/connector/j/ or https://downloads.mariadb.org/
4,可以放在项目中 WebContent/WEB-INF/lib中,这个目录eclipse会自动扫描。如果放在别处目录需要在build path中加入
三,修改CheckAccount,在那里调用查找数据库
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,然后设置参数,执行查询,循环取结果集,可以通过列名或列的序号取得该行的具体值。3.2具体的业务逻辑没变,只是在上一个版本的基础上添加了查找数据库,确认密码的功能。
3.3这时候有人就要问了:Statement和preparedStatement有什么区别,execute,executeQuery,executeUpdate有什么区别。
简单地说,pstmt是经过预编译的,会比stmt快,安全性好一点,要填参数;stmt是原始的语句,sql字符串要自己拼接好。
executeQuery是查询的;executeUpdate是增加/更改/删除的。
3.4最后要关闭连接。数据库连接的开关是很昂贵的(消耗资源和时间的),可以考虑使用数据源技术提升性能。(一两个使用者的demo程序不需要)
四,ajax引例
这个时候应该有人发现了,我不小心输错密码,页面跳回让我重新登陆可以理解,为什么要刷掉我的用户名呢?打错密码要连带重新输入名字,这简直就是反人类设计!!但,submit之后就是跳转了,回来的时候是一个新的登陆页面。
现有的知识好像没有办法,那么就引入我们下一节,ajax技术。
简要的说,就是在页面hold住不动,就将信息发送到服务器检验用户名密码,如果成功,直接跳转到欢迎页面;如果失败,留在原页面,不做人和动作,不跳转。
EvaDemo_2_jdbc.zip
最终代码:http://pan.baidu.com/s/1c0rP2jY
最后项目结构图:
参考资料:
【J2EE】JDBC
http://blog.csdn.net/robinjwong/article/details/23605775
J2EE--JDBC
http://blog.csdn.net/han_yankun2009/article/details/21552853
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。