JavaWeb连接数据库MySQL的操作技巧

数据库是编程中重要的一部分,它囊括了数据操作,数据持久化等各方面。在每一门编程语言中都占有相当大的比例。

本次,我以MySQL为例,使用MVC编程思想(请参阅我之前的博客)。简单演示一下JavaWeb对数据库的操作。

1:我们需要掌握简单的SQL语句,并且会简单操作图形化的数据库。我们在数据库建一个表(Users)可以在里面随便添加几条数据。

2:接下来,我们获得驱动并连接到MySQL。

package com.joker.web.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
  private static Connection con = null;
  // 驱动程序名
  private static String driverName = "com.mysql.jdbc.Driver";
  // 数据库用户名
  private static String userName = "root";
  // 密码 1
  private static String userPasswd = "*****";
  // 数据库名
  private static String dbName = "jokertest";
  // 联结字符串
  private static String url = "jdbc:mysql://localhost/" + dbName + "?user="
      + userName + "&password=" + userPasswd
      + "&useUnicode=true&characterEncoding=gbk";
  public static Connection getConnection() {
    try {
      // 1.驱动
      Class.forName(driverName);
      // 2. 连接数据库 保持连接
      con = DriverManager.getConnection(url);
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return con;
  }
  public static void closeConnection() {
    if (con != null) {
      try {
        con.close();
      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
}<span style="font-size:18px;color:#990000;">
</span> 

3.写我们的Dao文件,即对数据库的增删改查

package com.joker.web.dao;
import java.sql.*;
import java.util.*;
import com.joker.web.db.DBConnection;
import com.joker.web.entity.User;
public class UserDao {
  // 查找所有数据,返回List集合
  public List<User> selectAll() {
    Connection con = DBConnection.getConnection();// 连接数据库 保持连接
    Statement stmt;
    List<User> list = new ArrayList<User>();
    try {
      stmt = con.createStatement();// 执行SQL语句
      ResultSet rs = stmt.executeQuery("SELECT * FROM users");// 查找
                                  // 数据返回结果集
      while (rs.next()) {
        User user = new User();
        user.setId(rs.getInt("id"));
        user.setUserName(rs.getString("USER_NAME"));
        user.setDisplayName(rs.getString("DISPLAY_NAME"));
        user.setPwd(rs.getString("PWD"));
        list.add(user);
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      DBConnection.closeConnection();
    }
    return list;
  }
  // 按条件查找
  // where USER_NAME='"+ name + "' and PWD='" + pwd + "'
  public User selectWhere(String whereOption) {
    Connection con = DBConnection.getConnection();// 连接数据库 保持连接
    Statement stmt;
    User user = null;
    try {
      stmt = con.createStatement();// 执行SQL语句
      String sql = "SELECT * FROM users ";
      if (!whereOption.equals("")) {
        sql += whereOption;
      }
      // 查找数据返回结果集
      ResultSet rs = stmt.executeQuery(sql);
      while (rs.next()) {
        user = new User();
        user.setUserName(rs.getString("USER_NAME"));
        user.setDisplayName(rs.getString("DISPLAY_NAME"));
        user.setPwd(rs.getString("PWD"));
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      DBConnection.closeConnection();
    }
    return user;
  }
  // 新增
  public int insert(User user) {
    Connection con = DBConnection.getConnection();
    PreparedStatement pstmt = null;
    String sql = " insert into users(user_name,pwd,display_name) values(?,?,?)";
    // 增加用prepareStatement
    int count = 0;
    try {
      pstmt = con.prepareStatement(sql);
      pstmt.setString(1, user.getUserName());
      pstmt.setString(2, user.getPwd());
      pstmt.setString(3, user.getDisplayName());
      count = pstmt.executeUpdate();
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      try {
        pstmt.close();
      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      DBConnection.closeConnection();
    }
    return count;
  }
  // 修改
  public int upDate(User user) {
    Connection con = DBConnection.getConnection();
    PreparedStatement pstmt = null;
    String sql = " update users " + " set user_name = ? , " + " pwd = ? , "
        + " display_name= ? " + " where id= ? ";
    int count = 0;
    try {
      pstmt = con.prepareStatement(sql);
      pstmt.setString(1, user.getUserName());
      pstmt.setString(2, user.getPwd());
      pstmt.setString(3, user.getDisplayName());
      pstmt.setInt(4, user.getId());
      count = pstmt.executeUpdate();
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      try {
        pstmt.close();
      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      DBConnection.closeConnection();
    }
    return count;
  }
  // 删除
  public int delete(int id) {
    Connection con = DBConnection.getConnection();
    PreparedStatement pstmt = null;
    String sql = " delete from users where id = ?";
    int count = 0;
    try {
      pstmt = con.prepareStatement(sql);
      pstmt.setInt(1, id);
      count = pstmt.executeUpdate();
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      try {
        pstmt.close();
      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      DBConnection.closeConnection();
    }
    return count;
  }
  public List<User> selectPage(int from, int rows) {
    Connection con = DBConnection.getConnection();// 连接数据库 保持连接
    Statement stmt;
    List<User> list = new ArrayList<User>();
    try {
      stmt = con.createStatement();// 执行SQL语句
      ResultSet rs = stmt.executeQuery("SELECT * FROM users LIMIT "
          + from + "," + rows);
      while (rs.next()) {
        User user = new User();
        user.setId(rs.getInt("id"));
        user.setUserName(rs.getString("USER_NAME"));
        user.setDisplayName(rs.getString("DISPLAY_NAME"));
        user.setPwd(rs.getString("PWD"));
        list.add(user);
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      DBConnection.closeConnection();
    }
    return list;
  }
// 返回所有数剧条数
  public int selectCount() {
    Connection con = DBConnection.getConnection();// 连接数据库 保持连接
    Statement stmt;
    int count =0 ;
    try {
      stmt = con.createStatement();// 执行SQL语句
      ResultSet rs = stmt.executeQuery("SELECT count(1) count FROM users");
      while (rs.next()) {
        count = rs.getInt("count");
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      DBConnection.closeConnection();
    }
    return count;
  }
}<span style="font-size:18px;color:#990000;">
</span> 

4.使用Servlet当控制器,在Servlet对网页上的数据进行操作。

package com.joker.web.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import com.joker.web.dao.UserDao;
import com.joker.web.entity.User;
public class UserServlet extends HttpServlet {
  /**
   * Constructor of the object.
   */
  public UserServlet() {
    super();
  }
  /**
   * Destruction of the servlet. <br>
   */
  public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
  }
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    this.doPost(request, response);
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    String action = request.getParameter("action");
    if (action.equals("select")) {
      select(request, response);
    } else if (action.equals("update")) {
      update(request, response);
    } else if (action.equals("add")) {
      insert(request, response);
    } else if (action.equals("delete")) {
      delete(request, response);
    }
  }
  // 新增
  private void insert(HttpServletRequest request, HttpServletResponse response)
      throws IOException {
    String uName = request.getParameter("userName");
    String pwd = request.getParameter("user");
    String dName = request.getParameter("displayName");
    User user = new User();
    user.setUserName(uName);
    user.setPwd(pwd);
    user.setDisplayName(dName);
    UserDao uDao = new UserDao();
    int affCount = uDao.insert(user);
    PrintWriter out = response.getWriter();
    // 将受影响数据的数量返回给jsp
    out.print(affCount);
  }
  // 删除
  private void delete(HttpServletRequest request, HttpServletResponse response)
      throws IOException {
    String[] ids = request.getParameterValues("uid[]");
    UserDao ud = new UserDao();
    int count = 0;
    for (int i = 0; i < ids.length; i++) {
      count += ud.delete(Integer.parseInt(ids[i]));
    }
    PrintWriter out = response.getWriter();
    out.print(count);
  }
  /**
   * Initialization of the servlet. <br>
   *
   * @throws ServletException
   *       if an error occurs
   */
  public void init() throws ServletException {
    System.out.println("处室执行!!!!!!!!!!!!!!!");
  }
  // 查询
  public void select(HttpServletRequest request, HttpServletResponse response)
      throws IOException {
    String page = request.getParameter("page");
    String rows = request.getParameter("rows");
    System.out.println("page:" + page + " rows:" + rows);
    UserDao ud = new UserDao();
    int rowsCount = Integer.parseInt(rows);
    int from = (Integer.parseInt(page) - 1) * rowsCount;
    List<User> list = ud.selectPage(from, rowsCount);
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("total", ud.selectCount());
    map.put("rows", list);
    // JSONArray ja = JSONArray.fromObject(list);
    JSONObject jo = JSONObject.fromObject(map);// 单条数据
    PrintWriter out = response.getWriter();
    System.out.println(jo.toString());
    // 将json数据返回给jspData-grid的url。
    out.println(jo.toString());
  }
  // 修改
  public void update(HttpServletRequest request, HttpServletResponse response)
      throws IOException {
    String id = request.getParameter("id");
    String uName = request.getParameter("userName");
    String pwd = request.getParameter("pwd");
    String dName = request.getParameter("displayName");
    User user = new User();
    user.setId(Integer.parseInt(id));
    user.setUserName(uName);
    user.setPwd(pwd);
    user.setDisplayName(dName);
    UserDao uDao = new UserDao();
    int affCount = uDao.upDate(user);
    PrintWriter out = response.getWriter();
    // 将受影响数据的数量返回给jsp
    out.print(affCount);
  }
}<span style="font-size:18px;color:#990000;">
</span> 

5.使用Easy-UI框架,是数据库内容在页面进行显示

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
  String path = request.getContextPath();
  String basePath = request.getScheme() + "://"
      + request.getServerName() + ":" + request.getServerPort()
      + path + "/";
%> 

<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>" rel="external nofollow" >
<title>main.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<link rel="stylesheet" href="CSS/easyui.css" rel="external nofollow" type="text/css"></link>
<link rel="stylesheet" href="CSS/icon.css" rel="external nofollow" type="text/css"></link>
<script type="text/javascript" src="JS/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="JS/jquery.easyui.min.js"></script>
<script type="text/javascript">
  var addFlags = true;
  $(function() {
    $('#dg')
        .datagrid(
            {
              title : '用户列表',
              url : 'servlet/UserServlet?action=select',
              fitColumns : true,/* 自适应宽度 */
              striped : true,/* 斑马线效果 */
              pagination : true,/* 底部显示分页工具栏 */
              singleSelect : false,/* 只允许选择一行 */
              rownumbers : true,/* 显示一个行号列 */
              ctrlSelect : true,/* 允许使用Ctrl键+鼠标点击的方式进行多选操作 */
              iconCls : 'icon-ok',
              checkOnSelect : true,/* 点击行的时候该复选框就会被选中或取消选中 */
              selectOnCheck : true,/* 单击复选框将永远选择行 */
              pagination : true,
              nowrap : true,
              rownumbers : true,
              collapsible : true,//是否可折叠的
              pageSize : 5,//每页显示的记录条数,默认为10
              pageList : [ 2, 4 ,5],//可以设置每页记录条数的列表
              toolbar : [
                  {
                    text : '查询',
                    iconCls : 'icon-search',
                    handler : function() {
                      $('#dg').datagrid('reload');
                    }
                  },
                  '-',
                  {
                    text : '修改',
                    iconCls : 'icon-edit',
                    handler : function() {
                      alert('帮助按钮');
                    }
                  },
                  '-',
                  {
                    text : '添加',
                    iconCls : 'icon-add',
                    handler : function() {
                      if(addFlags){
                        $('#dg').datagrid('insertRow',{
                      index: 0,  // 索引从0开始
                     row: {}
                     });
                      var editIndex = 0;
                      $('#dg').datagrid('selectRow',editIndex)
                          .datagrid('beginEdit',editIndex);
                        addFlags = false;
                      }
                      /* , $('#dlg').dialog('open')
                          .dialog('center').dialog(
                              'setTitle',
                              'New User');
                      $('#fm').form('clear') */
                    }
                  },
                  '-',
                { text : '删除',
                 iconCls : 'icon-remove',
                 handler : function() {
                 $.messager.confirm("信息确认","确定删除吗?",
                          function(ret) {
                          if (ret) {
                          var row = $("#dg").datagrid("getSelections");
                        if (row.length == 0) {
                          $.messager.alert("提示:","请选择删除的数据");
                              return;
                            }
                            var ids = [];
                        for ( var i = 0; i < row.length; i++) {
                              ids.push(row[i].id);
                            }
                          $.post("servlet/UserServlet?action=delete",
                                {uid : ids},
                                function(data) {
                                if (data > 0) {
                              $('#dg').datagrid('reload');
                                  alert("删除成功");
                                } else {
                                alert("删除失败");
                                }
                               });
                            }
                        });
                    }
                  } ],
              columns : [ [
                  {
                    field : 'ck',
                    checkbox : true,
                    width : 50,
                  },
                  {
                    field : 'id',
                    hidden : true,
                  },
                  {
                    field : 'userName',
                    title : '用户名',
                    align : 'center',
                    editor : 'text',
                    width : 100
                  },
                  {
                    field : 'pwd',
                    title : '密码',
                    width : 100,
                    editor : 'text',
                    align : 'center'
                  },
                  {
                    field : 'displayName',
                    title : '级别',
                    width : 100,
                    height : 100,
                    editor : 'text',
                    align : 'center'
                  },
                  {
                    field : 'option',
                    title : '操作',
                    width : 100,
                    align : 'center',
                    formatter : function(value, row, index) {
                      if (row.editing) {
                        var s = '<a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" style="text-decoration:none" onclick="saverow('
                            + index + ')">保存</a>'+' '
                            +'<a href = "javascript:void(0);" style="text-decoration:none" onclick="canclerow('
                            + index + ')">取消</a>';
                        return s;
                      } else {
                        var e = '<a href="javascript:void(0);" rel="external nofollow" rel="external nofollow" style="text-decoration:none" onclick="editrow('
                            + index + ')">编辑</a>';
                        return e;
                      }
                    }
                  } ] ],
              onBeforeEdit : function(index, row) {
                row.editing = true;
                $("#dg").datagrid("refreshRow", index);
              },
              onAfterEdit : function(index, row) {
                row.editing = false;
                $("#dg").datagrid("refreshRow", index);
              }
            });
    //设置分页控件
    var p = $('#dg').datagrid('getPager');
    $(p).pagination({
      beforePageText : '第',//页数文本框前显示的汉字
      afterPageText : '页  共 {pages} 页',
      displayMsg : '当前显示 {from} - {to} 条记录  共 {total} 条记录'
    });
  });
  function editrow(index) {
    var row = $("#dg").datagrid("getSelected");
    if (row == null) {
      alert("请选择您要编辑的行");
      return;
    }
    $("#dg").datagrid("beginEdit", index);
  }
  function saverow(index) {
    $("#dg").datagrid("endEdit", index);
    var row = $("#dg").datagrid("getSelected");
    if(addFlags) {
     dbSave(row);
    } else {
     dbAdd(row);
    }
    addFlags = true;
  }
  function canclerow(index) {
    $("#dg").datagrid("rejectChanges");
    $('#dg').datagrid('reload');
    addFlags = true;
  }
  function dbSave(row) {
    var name = row.userName;
    var uid = row.id;
    var pwd = row.pwd;
    var dname = row.displayName;
    $.post("servlet/UserServlet?action=update", {
      id : uid,
      userName : name,
      pwd : pwd,
      displayName : dname
    }, function(data) {
      if (data == "1") {
        alert("修改成功");
      } else {
        alert("修改失败");
      }
    });
    alert(row.userName + "-" + row.pwd + "-" + row.displayName);
  }
    function dbAdd(row) {
    var name = row.userName;
    var pwd = row.pwd;
    var dname = row.displayName;
    $.post("servlet/UserServlet?action=add", {
      userName : name,
      pwd : pwd,
      displayName : dname
    }, function(data) {
      if (data == "1") {
        alert("添加成功");
      } else {
        alert("添加失败");
      }
    });
  }
</script>
<body>
  <%-- ${sessionScope.user.userName}
  ${sessionScope.user.dislayName} --%>
  <table class="easyui-datagrid" id="dg">
  </table>
</body>
</html><span style="font-size:18px;color:#990000;">
</span> 

6.各个操作具体图片:

6.1添加:添加(张三 666 学生 这条数据)默认显示五条数据

6.2 删除刚刚插入的数据

6.3 修改数据(修改的ID主键为10的数据)

以上所述是小编给大家介绍的JavaWeb连接数据库MySQL的操作技巧,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • javaweb学习总结——使用JDBC处理MySQL大数据

    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器.在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型,BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传.下载或者存放到一个数据库). 一.基本概念 在实际开发中,有时是需要用程序把大文本或二进制数据直接保存到数据库中进行储存的. 对MySQL而言只有blob,而没有clob,mysql存储大文本采用的是Text,Text和

  • JavaWeb连接数据库MySQL的操作技巧

    数据库是编程中重要的一部分,它囊括了数据操作,数据持久化等各方面.在每一门编程语言中都占有相当大的比例. 本次,我以MySQL为例,使用MVC编程思想(请参阅我之前的博客).简单演示一下JavaWeb对数据库的操作. 1:我们需要掌握简单的SQL语句,并且会简单操作图形化的数据库.我们在数据库建一个表(Users)可以在里面随便添加几条数据. 2:接下来,我们获得驱动并连接到MySQL. package com.joker.web.db; import java.sql.Connection;

  • MySQL数据库常用操作技巧总结

    本文实例总结了MySQL数据库常用操作技巧.分享给大家供大家参考,具体如下: 一.查询不同表中同名字段(表连接查询条件神器) use information_schema; select * from columns where column_name='字段名'; 二.查询记录总数 SELECT SQL_CALC_FOUND_ROWS * FROM TABLE WHERE 1=1; 即可得出总数据行数 SET @RowCount=found_rows(); 三.存储过程数据查询分页 预定义变量

  • mysql show操作简单示例

    本文实例讲述了mysql show操作.分享给大家供大家参考,具体如下: SHOW CHARACTER SET 显示所有可用的字符集 SHOW CHARACTER SET; SHOW CHARACTER SET LIKE 'latin%'; SHOW COLLATION 输出包括所有可用的字符集 SHOW COLLATION; SHOW COLLATION LIKE 'latin1%'; SHOW COLUMNS 显示在一个给定表中的各列的信息,对于视图,本语句也起作用. SHOW COLUMN

  • mysql优化小技巧之去除重复项实现方法分析【百万级数据】

    本文实例讲述了mysql优化小技巧之去除重复项实现方法.分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候.毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了. 首先按照常规首段,使用having函数检查重复项,完事一个一个的删除.不要问我having检测重复项的sql咋写,你懂得哈...这个在只有几条重复的时候还可以.要是几千上万条不同数据重复,那咋办... 完事呢,咱就考虑了,用having函数查询的时候,原始sql如下: select `n

  • mysql 5.7.20常用下载、安装和配置方法及简单操作技巧(解压版免安装)

    话说凌晨刚折腾完一台MySQL 5.7.19版本的安装,未曾料到早上MySQL官方就发布了最新的5.7.20版本.这个版本看似更新不多,但是加入了一个我们所急需的功能. MySQL 5.7.20版本新增了参数group-replication-member-weight,用来表示选主时服务器的优先级.若没有这个优先级,则之前版本的MGR会选择一个或许不是用户想要的节点,这是一个令人头疼的问题.相信5.7.20版本新增的该参数能解决一些用户的痛点. 1. 下载: mysql-5.7.20是解压版免

  • 利用tcpdump对mysql进行抓包操作技巧

    利用tcpdump对mysql进行抓包操作如下所示: 命令如下: 复制代码 代码如下: tcpdump -s 0 -l -w - dst 192.168.244.10 and port 3306 -i eno16777736 |strings 其中-i指定监听的网络接口,在RHEL 7下,网络接口名不再是之前的eth0,而是 eno16777736. 在RHEL 5&6下,可直接不带-i参数,因为它默认是eth0.在RHEL 7下,如果不用-i参数指定网络接口,则会报如下错误: 复制代码 代码如

  • 使用Python操作MySQL的小技巧

    1.获取插入数据的主键id import pymysql database = pymysql.connect( host="127.0.0.1", port=3306, user="root", password="root", database="test" ) cursor = database.cursor() for i in range(5): cursor.execute('insert into test (n

  • Java基于jdbc连接mysql数据库操作示例

    本文实例讲述了Java基于jdbc连接mysql数据库操作.分享给大家供大家参考,具体如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MySQLDemo { private Connection conn = null; pri

  • PHP+MySQL删除操作实例

    本文实例讲述了PHP+MySQL删除操作的使用技巧.分享给大家供大家参考.具体如下: 复制代码 代码如下: <h1>删除记录</h1>  <?php      //连接数据库的参数      $host = "localhost";      $user = "root";      $pass = "zq19890319";      $db = "phpdev";      //创建mysql

  • Windows平台下MySQL常用操作与命令

    1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql 3.导

随机推荐