使用JAVA如何实现更改数据库中的数据后重新获取数据,没更改时不用重新获取

请问各位大佬,在不更改表结构和不添加表及相应的触发器前提下,使用不含Spring的JAVA代码,如何得知数据已被修改,并重新获取最新数据(数据没被修改时,不用重新获取数据)
使用的数据库是:Oracle,不是本机上的,在服务器上,部署的代码与数据库所在的服务器不是一台

2个回答

不使用spring,那只能在修改的方法中加触发吧

使用缓存。 更新数据前先在缓存中进行数据比较,有更新则异步写入数据库,并刷新界面数据;无更新则直接获取缓存数据

Smile_LR
Smile_LR 数据库的数据是通过直接修改数据库中的数据进行变动的,而不是通过本项目页面修改的,怎么使用异步写入?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java Web连接MySql数据库,修改数据库连接类中的用户名和密码没有效果?
现在在做一个项目,其中编写了数据库连接及操作的类。 1、ConnDB类。 package com.wgh.tools; import java.io.InputStream; //导入java.io.InputStream类 import java.sql.*; //导入java.sql包中的所有类 import java.util.Properties; //导入java.util.Properties类 public class ConnDB { public Connection conn = null; // 声明Connection对象的实例 public Statement stmt = null; // 声明Statement对象的实例 public ResultSet rs = null; // 声明ResultSet对象的实例 //private static String propFileName = "connDB.properties"; // 指定资源文件保存的位置 //private static Properties prop = new Properties(); // 创建并实例化Properties对象的实例 private static String dbClassName = "com.mysql.jdbc.Driver"; // 定义保存数据库驱动的变量 private static String dbUrl = "jdbc:mysql://127.0.0.1:3306/db_9griddiary?user=root&password=&useUnicode=true&characterEncoding=utf8"; // public ConnDB() { // 构造方法 // try { // 捕捉异常 // // 将Properties文件读取到InputStream对象中 // InputStream in = getClass().getResourceAsStream(propFileName); // prop.load(in); // 通过输入流对象加载Properties文件 // dbClassName = prop.getProperty("DB_CLASS_NAME"); // 获取数据库驱动 // // 获取连接的URL // dbUrl = prop.getProperty("DB_URL", dbUrl); // } catch (Exception e) { // e.printStackTrace(); // 输出异常信息 // } // } /** * 功能:获取连接的语句 * * @return */ public static Connection getConnection() { Connection conn = null; try { // 连接数据库时可能发生异常因此需要捕捉该异常 Class.forName(dbClassName).newInstance(); // 装载数据库驱动 conn = DriverManager.getConnection(dbUrl); // 建立与数据库URL中定义的数据库的连接 } catch (Exception ee) { ee.printStackTrace(); // 输出异常信息 } if (conn == null) { System.err .println("警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:" + dbClassName + "\r\n链接位置:" + dbUrl); // 在控制台上输出提示信息 } return conn; // 返回数据库连接对象 } /* * 功能:执行查询语句 */ public ResultSet executeQuery(String sql) { try { // 捕捉异常 conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = stmt.executeQuery(sql); } catch (SQLException ex) { System.err.println(ex.getMessage()); // 输出异常信息 } return rs; // 返回结果集对象 } /* * 功能:执行更新操作 */ public int executeUpdate(String sql) { int result = 0; // 定义保存返回值的变量 try { // 捕捉异常 conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); result = stmt.executeUpdate(sql); // 执行更新操作 } catch (SQLException ex) { result = 0; // 将保存返回值的变量赋值为0 } return result; // 返回保存返回值的变量 } /* * 功能:关闭数据库的连接 */ public void close() { try { // 捕捉异常 if (rs != null) { // 当ResultSet对象的实例rs不为空时 rs.close(); // 关闭ResultSet对象 } if (stmt != null) { // 当Statement对象的实例stmt不为空时 stmt.close(); // 关闭Statement对象 } if (conn != null) { // 当Connection对象的实例conn不为空时 conn.close(); // 关闭Connection对象 } } catch (Exception e) { e.printStackTrace(System.err); // 输出异常信息 } } } 第一次连接成功。 第二次为什么无论把这个类中的用户名和密码修改成什么都能连接上MySql了? 请问这个类中的用户名和密码有用吗? 那在哪儿修改用户名和密码后就连接不上Mysql了?
我用Java操作数据库修改数据库中的值,但是从数据库获取的要修改的值乱码,要插入数据库本身的值没有乱码,求解?
1、获取要修改的数据库值乱码 2、![图片说明](https://img-ask.csdn.net/upload/202004/05/1586047804_437953.png) 3、java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1989-1-1','濂?','2008-1-1',2700.0,0 where ename='寮犱笁涓夊勾'' at line 1 Query: update emp set ?,?,?,?,? where ename=? Parameters: [1989-1-1, 女, 2008-1-1, 2700.0, 0, 张三三年] 4、同时设置成utf-8编码,同事修改曾尝试修改url后面的编码,都未成功 5、报同样错
ofbiz如何通过java代码获取数据库的值作删除功能
如何在ofbiz里,通过java代码获取数据库里面的值作删除,简而言之, 所要达到的功能的就是先删后增(修改主键)的目的,请各位指教
后台怎样获取jsp页面表格中一行数据的id
表格如图所示:![图片说明](https://img-ask.csdn.net/upload/201612/31/1483165978_293951.png) 如果要修改或删除数据,并将结果反馈到数据库中,怎样获取这一行数据的管理员名称
java查询数据库中的数据会输出,输出的不是我的数据????
# ```数据封装在build,builds中 可是输出的不是数据库中的数据而是 ![图片说明](https://img-ask.csdn.net/upload/202004/02/1585822586_24417.jpg) # DormBuildDaoImpl.java package zj.shizhan.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import zj.shizhan.bean.DormBuild; import zj.shizhan.util.ConnectionFactory; public class DormBuildDaoImpl implements DormBuildDao { @Override public DormBuild findByName(String dormBuildName) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "select * from dormbuild where dormBuildName = ? "; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, dormBuildName); ResultSet rs = preparedStatement .executeQuery(); //因为查询出来的信息包括表头信息,所以指针下移一行,看是否有查询出的数据 //如有数据,就进入循环体封装该行数据 while (rs.next()) { DormBuild build = new DormBuild(); build.setDormBuildId(rs.getInt("dormBuildId")); build.setDormBuildName(rs.getString("dormBuildName")); build.setDetail(rs.getString("detail")); return build; } } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public void save(DormBuild build) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "INSERT INTO dormbuild(dormBuildName,detail)VALUES(?,?)"; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, build.getDormBuildName()); preparedStatement.setString(2, build.getDetail()); preparedStatement .executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } @Override public List<DormBuild> find() { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "select * from dormbuild "; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet rs = preparedStatement .executeQuery(); //因为查询出来的信息包括表头信息,所以指针下移一行,看是否有查询出的数据 //如有数据,就进入循环体封装该行数据 List<DormBuild> builds = new ArrayList<DormBuild>(); while (rs.next()) { DormBuild build = new DormBuild(); build.setDormBuildId(rs.getInt("dormBuildId")); build.setDormBuildName(rs.getString("dormBuildName")); build.setDetail(rs.getString("detail")); builds.add(build); } return builds; } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public DormBuild findById(Integer dormBuildId) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "select * from dormbuild where dormBuildId = ? "; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, dormBuildId); ResultSet rs = preparedStatement .executeQuery(); //因为查询出来的信息包括表头信息,所以指针下移一行,看是否有查询出的数据 //如有数据,就进入循环体封装该行数据 while (rs.next()) { DormBuild build = new DormBuild(); build.setDormBuildId(rs.getInt("dormBuildId")); build.setDormBuildName(rs.getString("dormBuildName")); build.setDetail(rs.getString("detail")); return build; } } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public void update(DormBuild build ) { //获取连接(数据库地址 用户名 密码) Connection connection = ConnectionFactory.getConnection(); try { String sql = "UPDATE dormbuild SET dormBuildName = ?,detail = ? WHERE dormBuildId = ?"; //执行SQL语句 获取集装箱 或者说是 车 PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, build.getDormBuildName()); preparedStatement.setString(2, build.getDetail()); preparedStatement.setInt(3, build.getDormBuildId()); //执行更新 preparedStatement .executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } } ``` # DormBuildServlet.java ``` package zj.shizhan.servlet; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import zj.shizhan.bean.DormBuild; import zj.shizhan.service.DormBuildService; import zj.shizhan.service.DormBuildServiceImpl; /** * Servlet implementation class DormBuildServlet */ @WebServlet("/dormBuild.action") public class DormBuildServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DormBuildServlet() { super(); } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); String action = request.getParameter("action"); //通过request.getParameter("id")方式获取的值都是String类型的 String dormBuildId = request.getParameter("dormBuildId"); System.out.println("action:"+action); DormBuildService dormBuildService = new DormBuildServiceImpl(); if(action !=null & action.equals("list")) { List<DormBuild> builds = new ArrayList<DormBuild>(); if( dormBuildId== null || dormBuildId.equals("")) { //查询所有宿舍楼信息,跳转到宿舍楼列表页 builds = dormBuildService.find(); }else if(dormBuildId != null && !dormBuildId.equals("")) { //点击查询按钮搜索某一栋宿舍楼的信息 DormBuild build = dormBuildService.findById(Integer.parseInt(dormBuildId)); builds.add(build); System.out.println("build:"+build); } //查询所有宿舍楼。在select中遍历 List<DormBuild> buildSelects = dormBuildService.find(); request.setAttribute("buildSelects", buildSelects); request.setAttribute("dormBuildId", dormBuildId); System.out.println("builds:"+builds); request.setAttribute("builds", builds); request.getRequestDispatcher("BuildList.jsp").forward(request, response); }else if (action !=null & "preAdd".equals(action)) { //表示跳转到宿舍楼添加页面 request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); }else if (action !=null & "save".equals(action)) { //保存数据 String n = request.getParameter("dormBuildName"); String dormBuildName = new String(n.getBytes("ISO-8859-1"), "utf-8"); String m = request.getParameter("detail"); String detail = new String(m.getBytes("ISO-8859-1"), "utf-8"); System.out.println("dormBuildName:"+dormBuildName+"detail:"+detail+"id:"+dormBuildId); //判断宿舍楼名字是否已存在 DormBuild dormBuild = dormBuildService.findByName(dormBuildName); System.out.println("dormBuildName:"+dormBuildName); System.out.println("id2:"+dormBuildId); if(dormBuildId !=null && !"".equals(dormBuildId)) { System.out.println("id3:"+dormBuildId); //修改 if (dormBuild != null && !dormBuild.getDormBuildId().equals(Integer.parseInt(dormBuildId))) { request.setAttribute("error", "该宿舍楼已存在"); //格局宿舍楼id,查询宿舍楼 DormBuild build = dormBuildService.findById(Integer.parseInt(dormBuildId)); //保存宿舍楼信息,到前端页面展示 request.setAttribute("build", build); request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); }else { dormBuild = dormBuildService.findById(Integer.parseInt(dormBuildId)); dormBuild.setDormBuildName(dormBuildName); dormBuild.setDetail(detail); dormBuildService.update(dormBuild); //更新完成后,跳转到宿舍楼管理列表页,查询所有宿舍楼 List<DormBuild> builds = dormBuildService.find(); request.setAttribute("builds", builds); request.getRequestDispatcher("BuildList.jsp").forward(request, response); } }else { //保存 System.out.println("id4:"+dormBuildId); if (dormBuild != null) { //该宿舍楼已存在 request.setAttribute("error", "该宿舍楼已存在"); request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); }else { //该宿舍楼已不存在 DormBuild build = new DormBuild(); build.setDormBuildName(dormBuildName); build.setDetail(detail); dormBuildService.save(build); List<DormBuild> builds = dormBuildService.find(); request.setAttribute("builds", builds); request.getRequestDispatcher("BuildList.jsp").forward(request, response); } } }else if (action !=null & "preUpdate".equals(action)) { //格局宿舍楼id,查询宿舍楼 DormBuild build = dormBuildService.findById(Integer.parseInt(dormBuildId)); System.out.println("id1:"+dormBuildId); //保存宿舍楼信息,到前端页面展示 request.setAttribute("build", build); //表示跳转到宿舍楼修改页面 request.getRequestDispatcher("AddOrAlterBuild.jsp").forward(request, response); } } } ``` # DormBuild.java ``` package zj.shizhan.bean; public class DormBuild { private Integer dormBuildId; private String dormBuildName; private String detail; public DormBuild() { super(); } public DormBuild(Integer dormBuildId,String dormBuildName, String detail) { super(); this.dormBuildId = dormBuildId; this.dormBuildName = dormBuildName; this.detail = detail; } public String getDormBuildName() { return dormBuildName; } public void setDormBuildName(String dormBuildName) { this.dormBuildName = dormBuildName; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public Integer getDormBuildId() { return dormBuildId; } public void setDormBuildId(Integer dormBuildId) { this.dormBuildId = dormBuildId; } } ```
JAVA从数据库获取数据导入excel,获取数据详细代码该怎么写
萌新小白,这个从网上看来的方法,框架用的SSM。 现在Excel能导出文件,但是除了标题,什么内容都还没能从数据库获取。 list中不知道怎么加入数据,也不知道怎么加入。 希望大神们帮帮忙解答下 以下service层代码 ``` String[] excelHeader = { "title", "urgency", "projectman"}; public HSSFWorkbook export(List<UserInfo> list) { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("UserInfo"); HSSFRow row = sheet.createRow((int) 0); HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); for (int i = 0; i < excelHeader.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellValue(excelHeader[i]); cell.setCellStyle(style); sheet.autoSizeColumn(i); // sheet.SetColumnWidth(i, 100 * 256); } for (int i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1); UserInfo UserInfo = list.get(i); row.createCell(0).setCellValue(UserInfo.getTitle()); row.createCell(1).setCellValue(UserInfo.getUrgency()); row.createCell(2).setCellValue(UserInfo.getProjectman()); } return wb; } ``` 以下是控制层代码 ``` @RequestMapping(value = "/excel/export") public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws Exception { List<UserInfo> list = new ArrayList<UserInfo>(); UserInfo obj=new UserInfo("","",""); for(int i=0;i<list.size();i++) { list.add(new UserInfo(obj.getProjectman(),obj.getTitle(),obj.getUrgency())); } HSSFWorkbook wb = ms.export(list); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=UserInfo.xls"); OutputStream ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStream.flush(); ouputStream.close(); ``` 修改成这样后开始报错…… ``` org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.test.entity.UserInfo]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.test.entity.UserInfo.<init>() org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ``` 现在知道数据获取不了,但实际控制层代码不知道怎么写明白,select全部之后怎么封装到数组里,然后遍历……还是很懵逼
jsp中对数据库的操作,删除,更改,查询成功了,可插入不成功
在网上查的程序,其他的对数据库删改差都能运行,只有插入数据数据库没有反应 <%@ page import="java.util.*,entity.*,Dao.*" pageEncoding="UTF-8"%> <!-- 处理操作的页面,并非用于显示数据,所以无需任何HTML代码 --> <% request.setCharacterEncoding("UTF-8"); String user_name=request.getParameter("user_name"); String user_sex=request.getParameter("user_sex"); String user_age=request.getParameter("user_age"); //getParameterValues可以获取name对应的一组value(如果name下有多个value被提交的话) String[] s1=request.getParameterValues("user_hobby"); StringBuffer user_hobby=new StringBuffer(); for(int i=0;s1!=null&&i<s1.length;i++){ user_hobby.append(s1[i]); if(i<s1.length-1){ user_hobby.append(","); } } String[] s2=request.getParameterValues("user_city"); StringBuffer user_city=new StringBuffer(); for(int i=0;s2!=null&&i<s2.length;i++){ user_city.append(s2[i]); if(i<s2.length-1){ user_city.append(","); } } String mtext=request.getParameter("mtext"); UserInfo obj=new UserInfo(); obj.setUser_name(user_name); obj.setUser_sex(user_sex); obj.setUser_age(Integer.parseInt(user_age)); obj.setUser_hobby(user_hobby.toString()); obj.setUser_city(user_city.toString()); obj.setMtext(mtext); UserInfoDao dao=new UserInfoDao(); dao.save(obj); response.sendRedirect("index1.jsp"); %>
求助!js中获取的数据如何进行操作
小弟使用Spring框架制作了个一个网站。可以查看数据库中的数据,在页面加载完毕后显示所有数据库指定表中的内容,源码如下: ``` $(function(){ $.post( base_path+"/record/find.do", {}, function(result){ if(result.success){ var list=result.data; $(list).each(function(){ //每次遍历会得到一个笔记本对象 var table='<tr><td>'+this.record_title+'</td><td>'+this.record_time+'</td><td>'+this.record_man+'</td><td>'+this.record_content+'</td><td>'+this.record_comment+'</td><td>&nbsp;'+'<input type="button" value="Change" id="Change" class="">&nbsp;'+'<input type="button" value="Delete" id="Delete" class=""></td></tr>'; $('#tbody').append(table); //将数据绑定上td上,为后续的修、删除功能做准备 $('#tbody tr td:last').data("data",this); }); }else{ alert(result.message) } } ); //进入添加新数据界面 $("#ADD").click(function(){ location.href="Add.html"; }); //删除当前数据 $("#Delete").click(function(){ alert('11'); location.href="Add.html"; }); //修改当前用户密码 $("#changePassword").click(function(){ alert('11'); location.href="Add.html"; }); //返回Record页面 $("#Back").click(function(){ location.href="Record.html"; }); //确认添加一条数据 $("#add").click(function(){ add(); }); }); ``` 现在的情况是,我想给Change和Delete按钮添加动作,但是添加之后点击没有反应。请问该怎么解决呢?
java如何让用户一天只能提交n次任务,n值可以在数据库里修改
“每个学生每天能提交一条或几条(数量可以设置)当天完成的任务简单描述,放到列表中显示。” 每天提交的n值可以在数据库里修改,比如教师要求学生每天提交2条,数据库的n改为2,然后学生在一天内只能提交2条,第二天这个值得重置为2(想了很久还是不知道怎么在当前代码基础上增加这个功能,不想用quartz,也不去获取last_insert_id()/max(id)) 学生登录的时候在什么地方去获取这个n值(每个学生也应该有一个对应的n),然后提交一次减少一次,直到为0 不能再提交(jsp把按钮隐藏),但是第二天怎么办???怎么重置学生的n值? 我用的是java+MySQL+SSH,该怎么做啊
Java WEB 连接数据库的登录界面失败?
使用Eclipse做登陆界面,连接MySQL 8.0,测试过连接数据库应该是成功的,可能是struts配置有问题,新手不知道问题出在哪里,请帮忙看一下代码,我标注几个我可能出问题又不知道怎么改的地方 //login.jsp //此处可能是表单中form的action属性有问题? ``` <%@ page contentType="text/html; charset=gb2312" language="java"%> <html> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <head> <title>图书馆管理系统</title> <link href="CSS/style.css" rel="stylesheet"> <script language="javascript"> function check(form){ if (form.name.value==""){ alert("请输入用户名称");form.name.focus();return false; } if (form.pwd.value==""){ alert("请输入密码");form.pwd.focus();return false; } } </script> </head> <body> <table width="1000" border="0" align="center" cellpadding="0" cellspacing="0" class="tableBorder"> <tr> <td width="1000" height="545" align="center" background="Images/login.png"> <table width="1000" height="345" aligh="center" ></table> <form name="form1" method="post" action="manager.do?action=login"> <table width="400" height="200" align="left"> <tr> <td height="37" style="width: 128px; "></td> <td height="37" width="50"> 用户名</td> <td height="37" width="150"> <input name="name" type="text" class="logininput" id="name" size="27"> </td> </tr> <tr> <td height="37" style="width: 128px; "></td> <td height="37" width="50"> 密码 </td> <td height="37" width="150"> <input name="pwd" type="text" class="logininput" id="pwd" size="27"> </td> </tr> <tr> <td height="37" style="width: 128px; "></td> <td height="37" width="50"></td> <td height="37" width="200"> <input name="Submit" type="submit" class="btn_grey" value="确定" onClick="return check(form1)"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input name="Submit3" type="reset" class="btn_grey" value="重置"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input name="Submit2" type="button" class="btn_grey" value="关闭" onClick="window.close();"> </td> </tr> </table> </form> </td> <tr> <td align="center" height="50" bgcolor="#3A3A3A" class="word_login">CopyRight &copy; 2019版权所有 xx图书馆<br> </td> </tr> </table> </body> </html> ``` //Manager.java ``` package com.action; import org.apache.struts.action.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.actionForm.ManagerForm; import com.dao.ManagerDAO; import javax.servlet.http.HttpSession; public class Manager extends Action { private ManagerDAO managerDAO = null; public Manager() { this.managerDAO = new ManagerDAO(); } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String action = request.getParameter("action"); // System.out.println("获取的查询字符串:" + action); if (action == null || "".equals(action)) { return mapping.findForward("error"); } else if ("login".equals(action)) { return managerLogin(mapping, form, request, response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); } // 管理员身份验证 public ActionForward managerLogin(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ManagerForm managerForm = (ManagerForm) form; //将接收到的表单信息强制转换成ActionForm类型 managerForm.setAd_name(managerForm.getAd_name()); managerForm.setAd_pwd(managerForm.getAd_pwd()); int ret = managerDAO.checkManager(managerForm); System.out.print("验证结果ret的值:" + ret); if (ret == 1) { //将登录到系统的管理员名称保存到session HttpSession session = request.getSession(); session.setAttribute("manager", managerForm.getAd_name()); return mapping.findForward("managerLoginok"); } else { request.setAttribute("error", "您输入的管理员名称或密码错误!"); return mapping.findForward("error"); } } } ``` //ManagerForm ``` package com.actionForm; import org.apache.struts.action.ActionForm; public class ManagerForm extends ActionForm { private int ad_id; private String ad_name; private String ad_pwd; public ManagerForm() { } public int getAd_id() { return ad_id; } public void setAd_id(int ad_id) { this.ad_id=ad_id; } public String getAd_name() { return ad_name; } public void setAd_name(String ad_name) { this.ad_name=ad_name; } public String getAd_pwd() { return ad_pwd; } public void setAd_pwd(String ad_pwd) { this.ad_pwd=ad_pwd; } } ``` //ManagerDAO ``` package com.dao; import com.core.ChStr; import com.core.ConnDB; import java.util.*; import com.actionForm.ManagerForm; import java.sql.*; public class ManagerDAO { private ConnDB conn = new ConnDB(); //管理员身份验证 public int checkManager(ManagerForm managerForm) { int flag = 0; ChStr chStr=new ChStr(); String sql = "SELECT * FROM Ad_info where ad_name='" + chStr.filterStr(managerForm.getAd_name()) + "'"; ResultSet rs = conn.executeQuery(sql); try { if (rs.next()) { String pwd = chStr.filterStr(managerForm.getAd_pwd()); //获取输入的密码并过滤输入字符串中的危险字符 if (pwd.equals(rs.getString(3))) { flag = 1; } else { flag = 0; } }else{ flag = 0; } } catch (SQLException ex) { flag = 0; }finally{ conn.close(); } return flag; } } ``` //ConnDB ``` package com.core; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class ConnDB { public Connection conn=null; public Statement stmt=null; public ResultSet rs=null; private static String propFileName="/com/connDB.properties"; private static Properties prop=new Properties(); private static String dbClassName="com.mysql.cj.jdbc.Driver"; private static String dbUrl="jdbc:mysql://223.80.110.29:3306/sys_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL"; private static String dbUserName="root"; private static String dbPassword=""; //加载资源文件 public ConnDB() { try { InputStream in=getClass().getResourceAsStream(propFileName); prop.load(in); dbClassName=prop.getProperty("DB_CLASS_NAME","com.mysql.cj.jdbc.Driver"); dbUrl=prop.getProperty("DB_URL","jdbc:mysql://localhost:3306/db_librarysys?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL"); dbUserName=prop.getProperty("DB_USERNAME"); dbPassword=prop.getProperty("DB_PASSWORD"); } catch(Exception e){ e.printStackTrace(); } } public static Connection getConnection() { Connection conn=null; try { //加载数据库驱动 Class.forName(dbClassName); conn=DriverManager.getConnection(dbUrl,dbUserName,dbPassword); } catch(Exception ee) { ee.printStackTrace(); } if(conn==null) { System.err.println("警告:DbConnectionManager.getConnection()获得数据库链接失败.\r\n\r\n链接类型:"+dbClassName+"\r\n链接位置:"+dbUrl); } return conn; } //执行查询语句 public ResultSet executeQuery(String sql) { try { conn=getConnection(); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); /*ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表 ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,当前结果集不变。 */ rs=stmt.executeQuery(sql); } catch(SQLException ex){ System.err.println(ex.getMessage()); } return rs; } //执行更新操作 添加修改删除数据 public int executeUpdate(String sql) { int result=0;//更新的行数 try { conn=getConnection(); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); result=stmt.executeUpdate(sql); }catch(SQLException ex) { result=0; } return result; } public void close() { try { if(rs!=null) { rs.close(); } if(stmt!=null) { stmt.close(); } if(conn!=null) { conn.close(); } }catch(Exception e) { e.printStackTrace(System.err); } } } ``` //struts-config ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="managerForm" type="com.actionForm.ManagerForm" /> <form-bean name="ParameterForm" type="com.actionForm.ParameterForm" /> </form-beans> <action-mappings type="org.apache.struts.action.ActionMapping"> <action name="managerForm" path="/manager" scope="request" type="com.action.Manager" validate="true"> <forward name="managerLoginok" path="/main.jsp" /> <forward name="error" path="/error.jsp" /> </action> <action name="ParameterForm" path="/parameter" scope="request" type="com.action.Parameter" validate="true"> <forward name="error" path="/error.jsp" /> <forward name="parametermodify" path="/parameter_ok.jsp?para=2" /> <forward name="parametermodifyQuery" path="/parameter_modify.jsp" /> </action> </action-mappings> <message-resources parameter="com.wgh.struts.ApplicationResources" /> </struts-config> ```
通过阿里的Druid数据库连接池获取数据库连接
public static String confile = "druid.properties"; public static Properties p = null; static { p = new Properties(); InputStream inputStream = null; try { confile = DataSourceUtil.class.getResource("ipran/icmd/").getPath() + confile; System.out.println(confile); System.out.println("aaaaaaaaaa"); File file = new File(confile); inputStream = new BufferedInputStream(new FileInputStream(file)); p.load(inputStream); } catch (Exception e) { e.printStackTrace(); 运行时报错: java.io.FileNotFoundException: /root/druid.properties (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:146) at com.inspur.ipran.cmd.DataSourceUtil.<clinit>(DataSourceUtil.java:35) at com.inspur.ipran.DbUtil.<clinit>(DbUtil.java:22) at com.inspur.ipran.ExecuteTask.main(ExecuteTask.java:327) 应该怎么修改路径
DCN监听 java中获取到变化的表名为三个?
用的oracle DCN监听数据库变化的表,为什么打印出来的表名是??? 我写的哪里不对么?是在刚得到databaseChangeEvent的时候就已经是三个问号了, 但是rowid正常获取出来了,请求各位帮助,谢谢。 ``` package com.dtqy.dcn.test; import java.sql.SQLException; import java.util.Properties; import oracle.jdbc.OracleStatement; import oracle.jdbc.dcn.DatabaseChangeListener; import oracle.jdbc.dcn.DatabaseChangeRegistration; import oracle.jdbc.driver.OracleConnection; import oracle.jdbc.pool.OracleDataSource; public class Test { public static void main(String[] args) throws SQLException { OracleDataSource dataSource = new OracleDataSource(); dataSource.setUser("jsxl_admin"); dataSource.setPassword("root"); dataSource.setURL("jdbc:oracle:thin:@124.130.149.119:1521:orcl"); final OracleConnection conn = (OracleConnection) dataSource .getConnection(); Properties prop = new Properties(); prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true");// 要取得更改记录的rowid // 设置超时,这里是1个小时,届时数据库和驱动器的资源自动释放。如果为0或不设置,则用不过期,直到程序停止监听,当数据库发送更新通知时,因为没有监听端口,数据库随后释放资源 prop.setProperty(OracleConnection.NTF_TIMEOUT, "0"); DatabaseChangeRegistration databaseChangeRegistration = conn .registerDatabaseChangeNotification(prop); DatabaseChangeListener databaseChangeListener = new DataBaseChangeListenerTest(); databaseChangeRegistration.addListener(databaseChangeListener); OracleStatement statement = (OracleStatement) conn.createStatement(); statement.setDatabaseChangeRegistration(databaseChangeRegistration); statement.executeQuery("select * from DTQY_JXKH_CJ_RY t where 1=2"); statement.executeQuery("select * from DTQY_JXKH_CL where 1=2"); statement.close(); conn.close(); System.err.println("数据库更改通知开启:"); } } ``` ``` package com.dtqy.dcn.test; import java.util.Date; import org.apache.commons.lang.time.DateFormatUtils; import com.dtqy.kettle.test.JavaCallKettle; import oracle.jdbc.dcn.DatabaseChangeEvent; import oracle.jdbc.dcn.DatabaseChangeListener; import oracle.jdbc.dcn.RowChangeDescription; import oracle.jdbc.dcn.RowChangeDescription.RowOperation; import oracle.jdbc.dcn.TableChangeDescription; import oracle.sql.ROWID; public class DataBaseChangeListenerTest implements DatabaseChangeListener { @Override public void onDatabaseChangeNotification( DatabaseChangeEvent databaseChangeEvent) { TableChangeDescription[] tds = databaseChangeEvent .getTableChangeDescription(); System.out.println("=============================" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss") + "============================="); System.out.println("'TableChangeDescription'(数据表的变化次数):" + tds.length); for (TableChangeDescription td : tds) { System.out.println("数据库表id:" + td.getObjectNumber()); System.out.println("数据表名称:" + td.getTableName()); // 获得返回的行级变化描述通知 行id、影响这一行的DML操作(行是插入、更新或删除的一种) RowChangeDescription[] rds = td.getRowChangeDescription(); for (RowChangeDescription rd : rds) { RowOperation rowOperation = rd.getRowOperation(); System.out.println("数据库表行级变化:" + rowOperation.toString()); ROWID rowid = rd.getRowid(); System.out.println(rowid.stringValue()); //JavaCallKettle.runTransfer(rowid.stringValue()); } } } } ``` =============================2016-01-05 10:35:20============================= 'TableChangeDescription'(数据表的变化次数):1 数据库表id:53364 数据表名称:??? 数据库表行级变化:UPDATE AAANB0AAFAAA4OtAAH
spring动态加载数据源+动态添加数据源
相信很多开发者也遇到过这样的问题,随着项目的增大,使用的数据源会越来越多,现在比较流行配置数据源的方法是在xml配置文件配置数据源, ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978484_44310.png) 再继承类AbstractRoutingDataSource ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978496_990637.png) 这样做是挺麻烦的,每添加一个数据源,都要做重复的工作,而且好多代码都是重复的。 现在小弟的做法是,把xml的配置转到用java代码装配,数据源参数从数据库获取,按xml配置文件的意思,只要给AbstractRoutingDataSource里的targetDataSources(数据源集合)和defaultTargetDataSource(默认数据源)初始化就好。 具体代码如下: ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978510_435106.png) ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978527_153617.png) ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978540_741057.png) 至此完成从xml配置文件到java代码装配,启动没有问题。使用默认数据源的用户登录系统没有问题,但当使用非默认数据源用户登录系统时,会提示找不到用户,难道加载数据源出问题?只成功加载了默认数据源?但是断点跟踪,数据源集合targetDataSources是有值的。使用其他数据源的用户登录时,下面这个方法也是有返回值的: ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978551_385665.png) 百思不得其解!有做过这方面的大神可以给点建议吗? 还有一个问题,数据源集合是在系统启动时加载的,如果我在数据库添加多一个数据源,那又怎样可以不用重启系统就可以直接访问这个数据源对应的数据库呢? 在此先谢了! 2016-11-29更新解决办法 动态切换数据源解决办法:原来的配置文件里的数据源集合的key用的是DataSourceType,而我手动装配数据源用的是 ![图片说明](https://img-ask.csdn.net/upload/201611/29/1480429699_315678.png) 装配数据源地方的代码修改如下: ![图片说明](https://img-ask.csdn.net/upload/201611/30/1480467096_241144.jpg) 改后可以自由切换数据源。现在剩下动态添加数据源没有实现。 DataSourceType类型是一个枚举类型。 动态加载数据源关键一点:在系统运行时加载多一个数据源,加载此数据源的对象必须和系统启动时加载数据源的同一个,在我这里加载数据源的对象是类DynamicDataSource,可在这里添加一个加载数据源的方法: ![图片说明](https://img-ask.csdn.net/upload/201701/11/1484099363_286931.jpg) 至于如何得到同一个是类DynamicDataSource,可以在系统启动时在某个地方保存一份此对象,就像保存数据源一样,当需要使用数据源时可以获取。
java中怎样将访问储存过程的代码转换为调用接口
代码是通过访问储存过程来从数据库里获取数据的,要求修改成调用接口来实现,要怎么修改????
麻烦大家帮我看看为什么执行如下代码后,更改的数据无法保存到数据库中,这是为什么呢?
//修改信息,真正添加到数据库 updateInfo public ActionForward updateInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { //将字符串转化为日期类型 DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //得到当前用户[从session取出] Users loginUser = (Users) request.getSession().getAttribute("loginuser"); //从表单中获取修改个人的信息(birth,tel,website,msn,book,movie,music,sport,cartoon) UserForm userForm = (UserForm)form; try{ loginUser.setBirth(format.parse(userForm.getBirth())); }catch(ParseException e){ e.printStackTrace(); } loginUser.setTel(userForm.getTel()); loginUser.setWebsite(userForm.getWebsite()); loginUser.setMsn(userForm.getMsn()); loginUser.setBook(userForm.getBook()); loginUser.setMovie(userForm.getMovie()); loginUser.setMusic(userForm.getMusic()); loginUser.setSport(userForm.getSport()); loginUser.setCartoon(userForm.getCartoon()); //保存用户 userService.save(loginUser); return mapping.findForward("goHomePageUI"); }
急急急!!!jsp页面中怎么引入.inc文件,引入目录从哪里开始写起
java web项目中想要引入opendb.inc文件和power_ora.inc文件, 来达到PHP中,通过require_once引入登录Oracle数据库功能的效果, (相关部署都是PHP页面写的,我的项目是Javaweb,所以有些不同,不太明白, php中可以在通过require_once获取,java中我获取不了, 通过<%@ include file="/opendb.inc" %>始终找不到文件, 修改路径,从服务器上获取文件, <%@ include file="/php/public/opendb.inc" %> <%@ include file="/php/public/power_ora.inc" %> 但是页面找不到相关文件 /WebRoot/bookAdd.jsp (line: [2], column: [1]) File [/php/public/opendb.inc] not found, 请问这个路径怎么修改) 请问应该怎么做? 因为我的最终目的是借助这两个文件, 登录Oracle数据库获取对应表的数据, 请问需要javaweb在头部如何引入数据库数据表? 恳请指教,感激不尽!
删除实现不了,数据库已经连上了
at com.wyk.ConnDB.executeUpdata(ConnDB.java:67) at org.apache.jsp.goods_005fdelete_jsp._jspService(goods_005fdelete_jsp.java:81) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) package com.wyk; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class ConnDB { public Connection conn = null; public Statement stmt = null; public ResultSet rs = null; private static Statement st = null; //设置Statement类的对象 private static String propFileName = "/com/connDB.properties"; //指定资源文件保存的位置 private static Properties prop = new Properties(); private static String dbClassName ="com.mysql.jdbc.Driver"; private static String dbUrl = "jdbc:mysql://127.0.0.1:3306/db_wuliu?user=root&password=mysql&useUnicode=true"; public ConnDB(){ try { InputStream in=getClass().getResourceAsStream(propFileName); prop.load(in); //通过输入流对象加载Properties文件 dbClassName = prop.getProperty("DB_CLASS_NAME"); //获取数据库驱动 dbUrl = prop.getProperty("DB_URL", "jdbc:mysql://127.0.0.1:3306/db_wuliu?user=root&password=mysql&useUnicode=true"); } catch (Exception e) { e.printStackTrace(); //输出异常信息 } } public static Connection getConnection() { Connection conn = null; try { Class.forName(dbClassName).newInstance(); conn = DriverManager.getConnection(dbUrl); } catch (Exception ee) { ee.printStackTrace(); } if (conn == null) { System.err.println( "警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:" + dbClassName + "\r\n链接位置:" + dbUrl); } return conn; } /* * 功能:执行查询语句 */ public ResultSet executeQuery(String sql) { try { conn = getConnection(); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = stmt.executeQuery(sql); } catch (SQLException ex) { System.err.println(ex.getMessage()); } return rs; } /* * 功能:执行更新操作 */ public boolean executeUpdata(String sql) { try { st = conn.createStatement(); //创建声明对象连接 ((ConnDB) st).executeUpdata(sql); //执行添加、修改、删除操作 return true; //如果执行成功则返回true } catch (Exception e) { e.printStackTrace(); return false; //如果执行成功则返回false }} /* * 功能:关闭数据库的连接 */ public void close() { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (Exception e) { e.printStackTrace(System.err); } } }
请教一个Java高并发的设计问题与我目前的解决方法
环境:_SpringBoot 2.x, JDK 1.8, MySQL 8.0.15_</br></br> 1.需求:做一个类似发卡平台的api,每次访问从数据库获取一条数据,要保证**这条数据只能被获取一次**。</br></br> 目前测试约为每30秒60次的访问,之后的测试同样的时间访问量会成倍增加。</br></br> 2.我的解决方法:数据库中设计一个字段,保存这条数据的使用状态。写了一个存储过程,大致流程是这样:先开始事务,再获取需要的数据同时上行锁,再修改这条数据的使用状态,最后返回数据,提交事务。</br></br> 这样查询语句中需要加数据是否使用过的条件。</br></br> 我想来想去,总觉得这不是最好的解决方案,由于我是一名小白,技术水平有限,经验不足,想请论坛的各位大牛赐教,谢谢!
推荐 130 个令你眼前一亮的网站,总有一个用得着
总结了大学生活两年来,发现的 130 余个黑科技网站,总有一个会让你眼前一亮,赶紧收藏!
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Flutter 会不会被苹果限制其发展?
这个可能性是存在的,而且不止是 flutter、react-native 、weex 、uni-app 、taro 、Hippy等都存在这个风险,虽然有些框架对比起 flutter 其他框架存在时间稍长,但是这不可否认它们一直都存在这个风向。 只要不是平台自己的亲儿子,那么肯定存在被限制发展的风险,所以这件事上是风险和收益之间的博弈,这是一个“后妈和前任之间的太极。” 先说现状 如今各大平台,如:...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
Linux必懂知识大总结(补)
关机 1. 数据同步写入磁盘 sync 为了加快对磁盘上文件的读写速度,位于内存中的文件数据不会立即同步到磁盘上,因此关机之前需要先进行 sync 同步操作。 2. shutdown # /sbin/shutdown [-krhc] [时间] [警告讯息] -k : 不会关机,只是发送警告讯息,通知所有在线的用户 -r : 将系统的服务停掉后就重新启动 -h : 将系统的服务停掉后就...
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
立即提问