java 日期类型参数如何传入

在向数据库表Date类型字段插入数据时,传入的参数该怎么写。
我的set和get方法
图片说明
预处理的代码
图片说明
最后传参时我想传一个“2017-10-11”在括号里应该怎么写。
图片说明

5个回答

从前端传到java,格式应该是年月日(时分秒)的字符串,可以转换成Date类型,再存储数据库。转换方式网上有的!

参考:

 import java.util.Calendar;
import java.text.SimpleDateFormat;

Calendar ca = Calendar.getInstance();
ca.set(Calendar.YEAR,2017);
ca.set(Calendar.MONTH,9);
ca.set(Calendar.DAY_OF_MONTH,11);

// 把database这个变量存入数据库即可.
Date database = ca.getTime();


// 下面只是验证上面的数据是否正确.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(ca.getTime()));
dcxy0
Q544471255 少了一个导入,import java.util.Date;这个导入才可以,ca.getTime()返回的是java.util.Date;
大约 2 年之前 回复

SimpleDateFormat转化一下String成java.util.Date就行了

百度一下java.util,Date和java.sql.Data的相互转换。存数据库的话建议直接存时间蹉 stmt.setTimestamp(1,new Timestamp());

simpledateformat sf=new simpledateformat("yyyy-MM-dd HH:mm:ss");
s1.setsupply_date(sf.parse("2018-07-10 15:50:20"));

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MyBatis 中WHERE 数据库日期字段=#{java Date对象} 为什么查不到记录 ?
java Date的对象作为参数传入Mapper.xml里, 查询日期字段等于这个Date的记录, 没有记录被查到, 代码如下: ``` <select id="selectByDate" resultMap="productMap"> select * from product where create_date = #{date,jdbcType=DATE </select> ``` ![图片说明](https://img-ask.csdn.net/upload/201910/16/1571235532_596856.png) ``` <select id="selectByDate" resultMap="productMap"> select * from product where create_date = #{date} </select> ``` ![图片说明](https://img-ask.csdn.net/upload/201910/16/1571235600_547494.png) 试了下在MySQL里能直接用字符串查到 ``` SELECT * FROM product WHERE create_date = '2019-10-10 00:00:00' ``` 一直搜不到解决方法, 求助各位
写一个java视窗小工具实现从数据库导出excel报表,请问什么方案比较好?
需求如下: 1. sql语句写在config.xml,可随时更换。 2. 前端视窗可选择日期,将日期传入sql语句,后台执行sql语句,从而产出不同日期的excel报表。 而问题是,乙方提供的sql语句已经含有某一日期了,如何通过日期控件修改sql语句的日期,从而产出不同日期的excel报表。
javascript日期类型的转换
[code="java"]function test (v1,v2){ alert new Date(v1).format("Y-m-d"); alert new Date(v2).format("Y-m-d h:s:m") } test(new Date("2010-07-13"),new Date("2010-07-13 22:01:01"));[/code] 请教:test函数如何判断v1是"Y-m-d"类型的日期对象,按("Y-m-d")format, v2是"Y-m-d h:s:m"类型的日期对象,按("Y-m-d h:s:m")format 即在test中增加一个判断,根据不同类型做不同的转换. 传入参数已经是date类型,我这里为了方便说明,直接用new Date.
关于在MyBatis中时间比较的问题
在MySQL数据库中字段是TimeStamp类型的,在MyBatis的Mapper中传入参数是java.util.Date类型的,怎么实现日期的比较?我试过直接用大于大小比较不对,都转化为unix时间戳再比较也不对,最后把传入参数改为日期格式的String比较然后对了。
关于PreparedStatement日期类型比较的一些问题
问题是这样的: 数据库储存的字段类型是时间类型,而用户需要根据时间区间来进行查询。例如: 表Test有CreateTime这个字段,该字段是datetime类型的,而我的SQL语句是 select * from Test where CreateTime >= ? and CreateTime <= ? 然后用PreparedStatement setDate(new java.sql.Date(QueryDate));传入两个值。这个时候,数据库实际上还是以时间类型进行比较。假如说我查的是2009年12月19日到2009年12月19日,而假设表中有数据有一条数据的CreateTime为2009-12-19 10:02:56.429 那么执行后的结果却没有将该记录查出来。 这样的情况应该如何解决? 我碰到的是不同的数据库,有可能是Oracle也有可能是SQL SERVER,所以别问是什么类型的数据库。 我想应该先将查询的字段转成日期类型的,这样应该就不会出现bug了,可是我不知道能不能直接通过PreparedStatement来转。
JAVA中append不显示输出的内容是怎么回事
package hh; import javafx.scene.chart.PieChart.Data; import javax.swing.*; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.URLEncoder; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import com.sun.corba.se.spi.orbutil.fsm.Guard.Result; import ee.WeatherInf; import ee.util; import java.awt.*; //窗体颜色 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URLEncoder; import java.util.*; public class window extends JFrame implements ActionListener{ JButton butok; JPanel panel1; TextField text1; JTextArea prince=new JTextArea(15, 30); public window() { setTitle("无敌天气预报"); //窗体标题 setLocation(250,250); //窗体位置 setSize(500,300); //窗体大小 panel1 =new JPanel(); //添加一个panel对象,方便布局 butok= new JButton("查询"); butok.addActionListener(this); text1=new TextField("输入要查询的城市:",20); panel1.add(text1); panel1.add(butok); add(panel1,BorderLayout.NORTH); add(new JScrollPane(prince),BorderLayout.CENTER); } public void actionPerformed(ActionEvent arg0) { // TODO 自动生成的方法存根 String str=text1.getText(); //将传入城市名的getNet接口类作为参数初始化线程类 getNet city=new getNet(str); Thread thread=new Thread(city); //线程开始 thread.start();// try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } prince.append(city.result); } public static void main(String[] args) { new window(); } } class getNet implements Runnable{ WeatherInf wInf; String city; String result; public getNet(String city){ this.city=city; } public void run() { try { //url串 String url="http://api.map.baidu.com/telematics/v3/weather?location="+URLEncoder.encode(city,"utf-8")+"&output=json&ak=YknGmxIoPugT7YrNrG955YLS"; //调用工具类的方法获取json数据 String content=util.getJsonString(url); //调用工具类的方法解释json数据 wInf=util.resolveWeatherInf(content); //将解释好的日期 城市 天气 温度 PM2.5 穿衣指数选出放入result String result=wInf.getWeatherdate() +" "+wInf.getLocation()+" "+wInf.getWeatherInfs()[0].getWeather()+" "+wInf.getWeatherInfs()[0].getTempertureOfDay() +" PM2.5指数 "+wInf.getPmTwoPointFive() +" 穿衣指数:"+wInf.getDressAdvise(); System.out.print(result); System.out.println(); } catch (Exception e) { System.out.println("查不到此地区天气!"); } } public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 } public static void main(String agrs[]) { window win= new window(); //初始化窗体 win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭按钮 win.setVisible(true); //使窗体可见 } } 我编写了一个,点击按钮就能查询当地天气的程序,然后我单击按钮之后,天气的详情并不显示在append上的文本框,怎么办?
写了一个java的统计考勤 如何和给他设置一个配置文件并且可以通过配置文件修改路径呢
``` import java.io.File; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class zijixiedefangfa { public static void main(String[] args) throws BiffException, IOException, ParseException { String fileName = "D://Io//jisuan.xls"; // Excel文件所在路径 File file = new File(fileName); // 创建文件对象 Workbook wb = Workbook.getWorkbook(file); // 从文件流中获取Excel工作区对象(WorkBook) Sheet sheet = wb.getSheet(0); // 从工作区中取得页(Sheet) int n =0; Date min = null; String firm = ""; //定义公司 String name = ""; //定义姓名 String day = ""; //定义日期 String time_start = ""; //定义最早时间 String time_end = ""; //定义最晚时间 List shuju = new ArrayList(); //定义总的传入集合 List bumen = new ArrayList(); //部门 List xingming = new ArrayList(); //姓名 List date = new ArrayList(); //日期 List earlyTime = new ArrayList(); //上班时间 List endTime = new ArrayList<Date>(); //下班时间 List workTime = new ArrayList(); //上班时间 List chidao = new ArrayList(); //迟到 List zaotui = new ArrayList(); //早退 //最晚上班时间 SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); Date biaozhun = df.parse("10:00:00"); while(n<sheet.getRows()){ //这一天的最早上班时间 firm = sheet.getCell(0,shuju.size()).getContents(); name = sheet.getCell(1,shuju.size()).getContents(); day = sheet.getCell(2,shuju.size()).getContents(); time_start = sheet.getCell(3,shuju.size()).getContents(); bumen.add(sheet.getCell(0,shuju.size()).getContents()); xingming.add(sheet.getCell(1,shuju.size()).getContents()); date.add(sheet.getCell(2,shuju.size()).getContents()); earlyTime.add(sheet.getCell(3,shuju.size()).getContents()); //判断是否迟到 if(df.parse(sheet.getCell(3,shuju.size()).getContents()).getTime()>biaozhun.getTime()){ chidao.add("迟到"); }else{ chidao.add(""); } while(n<sheet.getRows()){ //如果前三条数据一样的话 说明是同一天 if(sheet.getCell(0,n).getContents().equals(firm) && sheet.getCell(1,n).getContents().equals(name) && sheet.getCell(2,n).getContents().equals(day) ){ shuju.add(sheet.getCell(3,n).getContents()); }else{ break; } n++; } //当前三条数据不一样时 退出当前while循环 数组长度减1的下标就是下班时间 endTime.add(sheet.getCell(3,shuju.size()-1).getContents()); } for (int i = 0; i < earlyTime.size(); i++) { try { workTime.add((df.parse((String) endTime.get(i)).getTime()-df.parse((String) earlyTime.get(i)).getTime())/3600000+"小时"); //判断是否早退 if((df.parse((String) endTime.get(i)).getTime()-df.parse((String) earlyTime.get(i)).getTime())/3600000>=8){ zaotui.add(""); }else{ zaotui.add("早退"); } } catch (ParseException e) { e.printStackTrace(); } } //关闭读取流 wb.close(); try { //打开写入流 WritableWorkbook book = Workbook.createWorkbook(new File("D://Io//stu.xls")); // 生成名为“sheet1”的工作表,参数0表示这是第一页 WritableSheet kaoqin = book.createSheet("kaoqin", 0); //写入部门 for (int i = 0; i < bumen.size(); i++) { Label label = new Label(0, i, (String) bumen.get(i)); // 将定义好的单元格添加到工作表中 kaoqin.addCell(label); } //写入姓名 for (int i = 0; i < xingming.size(); i++) { Label label = new Label(1, i, (String) xingming.get(i)); kaoqin.addCell(label); } //写入日期 for (int i = 0; i < date.size(); i++) { Label label = new Label(2, i, (String) date.get(i)); kaoqin.addCell(label); } //写入上班时间 for (int i = 0; i < earlyTime.size(); i++) { Label label = new Label(3, i, (String) earlyTime.get(i)); kaoqin.addCell(label); } //写入下班时间 for (int i = 0; i < endTime.size(); i++) { Label label = new Label(4, i, (String) endTime.get(i)); kaoqin.addCell(label); } //写入总共上班时间 for (int i = 0; i < workTime.size(); i++) { Label label = new Label(5, i, (String) workTime.get(i)) ; kaoqin.addCell(label); } //加入迟到 for (int i = 0; i < chidao.size(); i++) { Label label = new Label(6, i, (String) chidao.get(i)) ; kaoqin.addCell(label); } //写入早退 for (int i = 0; i < zaotui.size(); i++) { Label label = new Label(7, i, (String) zaotui.get(i)) ; kaoqin.addCell(label); } book.write(); //执行写入操作 book.close(); //关闭流 }catch (Exception e) { System.out.println(e); } } } ``` ![图片说明](https://img-ask.csdn.net/upload/201712/07/1512637294_354757.png) ![图片说明](https://img-ask.csdn.net/upload/201712/07/1512637303_72375.png) 需求是想添加一个配置文件 通过配置文件来修改java文件中的读取路径 这个该怎么做啊
我想写一个java的方法,是关于驾校管理系统时间的问题。
要求是考四个科目,如果考试及格,本次考试和下次考试时间间隔10天。 如果不及格,本次考试和下次考试时间间隔20天。 我想用这个方法返回还应该间隔多少天 传入参数:a为数据库提取到里的日期,b为s_ID(可忽略,是数据库里学员的编号),c为现在的日期。
尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,求大神帮忙指正
java新人,尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,调用 insert 指令没问题,而 select 指令出现如下报错: com.microsoft.sqlserver.jdbc.SQLServerException: ')' 附近有语法错误。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:792) at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:689) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:616) at com.javaee.servletxm.comm.MSSQLJDBC.select(MSSQLJDBC.java:160) at com.javaee.servletxm.comm.MSSQLJDBC.select(MSSQLJDBC.java:195) at com.javaee.servletxm.comm.MSSQLJDBC.selectFirstValue(MSSQLJDBC.java:172) at com.javaee.servletxm.comm.MSSQLJDBC.getPageNumber(MSSQLJDBC.java:221) at com.javaee.servletxm.comm.MSSQLJDBC.selectByFY(MSSQLJDBC.java:259) at com.javaee.servletxm.kqgl.KqManager.getAllKqxx(KqManager.java:38) at com.javaee.servletxm.kqgl.Kqwh.doGet(Kqwh.java:47) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1760) at java.lang.Thread.run(Thread.java:724) 这是具体的代码,求大神帮忙指正 package com.javaee.servletxm.comm; /** * jdbc下 SQL Server 2005 数据库的封装类 */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.List; import java.util.Properties; public class MSSQLJDBC { // 配置文件名称 private String iniFileName = MSSQLJDBC.class.getClassLoader().getResource("/com/javaee/servletxm/comm").getPath()+ "mssql.properties"; // 连接数据库 private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String url = "jdbc:sqlserver://localhost;DatabaseName=jdms"; private String user = "sa"; private String password = ""; // 定义连接属性 private Connection connect = null; // 与连接有关三个通道 private Statement stmt = null; private PreparedStatement pstmt = null; private CallableStatement cstmt = null; public static final String stmtType = "stmt"; public static final String pstmtType = "pstmt"; public static final String cstmtType = "cstmt"; // 定义参数类型的静态常量值 public static final String varCharType = "varchar"; public static final String intType = "int"; public static final String doubleType = "decimal"; public static final String dateType = "datetime"; public static final String timeType = "timestamp"; // 定义全局的结果集 private ResultSet rs = null; // 在构造方法中对属性进行初始化赋值操作 public MSSQLJDBC() { // 读取配置文件 readIni(); // 初始化连接 initConnect(); } // 可配置文件 .properties // 读取配置文件 private void readIni() { File file = new File(iniFileName); if (!file.exists()) { // 创建一个文件 try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 判断文件是否有值 if (file.length() == 0) {// 说明是一个空文件 // 初始化值 try { Properties p = new Properties(); p.put("driver", driver); p.put("url", url); p.put("user", user); p.put("password", password); FileOutputStream fos = new FileOutputStream(file); p.store(fos, "配置文件信息"); fos.close(); } catch (IOException e) { e.printStackTrace(); } } else {// 如果有值 // 将信息读取出来 try { FileInputStream fis = new FileInputStream(file); Properties p = new Properties(); p.load(fis); this.driver = p.getProperty("driver"); this.url = p.getProperty("url"); this.user = p.getProperty("user"); this.password = p.getProperty("password"); fis.close(); } catch (IOException e) { e.printStackTrace(); } } } // 建立连接 private void initConnect() { try { Class.forName(driver); this.connect = DriverManager.getConnection(url, user, password); this.connect.setAutoCommit(false);// 设置手动提交事务 this.stmt = connect.createStatement(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /*/ 从tomcat缓冲池获取连接 private void initConnectFromDataSource() { try { InitialContext ic = new InitialContext(); DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/oracleds"); this.connect = ds.getConnection(); this.connect.setAutoCommit(false); this.stmt = connect.createStatement(); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }*/ // 需要调用者控制事务的两个方法 // 提交方法 private void commit() { try { this.connect.commit(); } catch (SQLException e) { e.printStackTrace(); } } // 回滚事务 private void rollBack() { try { this.connect.rollback(); } catch (SQLException e) { e.printStackTrace(); } } // 定义一组与操作有关的方法 // 使用普通通道执行的select public ResultSet select(String sql) { ResultSet prs = null; if (stmt != null) { try { prs = stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } } return prs; } // 根据传入的sql直接获取单一值 // 使用此方法的时候sql语句返回的单一的值 public String selectFirstValue(String sql, String type, List<String> csList) { String rstr = ""; rs = select(sql, type, csList);// 确定此结果集只有一条记录 if (rs != null) {// 说明结果集有值,且只有一条记录 try { ResultSetMetaData rsmd = rs.getMetaData(); if (rs.next()) { // 移动到第一条记录 String p_type = rsmd.getColumnTypeName(1); rstr = getResultSetValue(rs, 1, p_type); } } catch (SQLException e) { e.printStackTrace(); } } return rstr; } // 使用普通通道执行的select /** * sql 参数 type 使用通道的类型 stmt pstmt cstmt List<String> csList 预编通道执行的参数队列 * String 最少必须满足如下条件的字符串 数据类型 ,数据值 数据类型定义说明 字符串 数字(整数、小数) 日期(DATE、TIMESTAMP) */ public ResultSet select(String sql, String type, List<String> csList) { ResultSet prs = null; if (type.equals(stmtType)) {// 说明使用普通通道来执行 prs = select(sql); } else if (type.equals(pstmtType)) {// 说明使用预编译通道来执行 if (connect != null) { try { pstmt = connect.prepareStatement(sql); // 验证传入的参数和sql中的参数个数一致 setPrepareStatement(pstmt, csList);// 将参数设置进当前的预编译通道 prs = pstmt.executeQuery(); } catch (Exception e) { e.printStackTrace(); } } } return prs; } // 获取 总页数 public int getPageNumber(String sql, String type, List<String> csList, int pageSize) { // 处理总页数 int pageNumber = 0; // 第一步获取sql总记录数 String psql = "select count(*) from (" + sql + ")"; String result = selectFirstValue(psql, type, csList); int rows = 0; if (result != null && result.trim() != "") { rows = Integer.valueOf(result); } if (rows % pageSize == 0) { pageNumber = rows / pageSize; } else { pageNumber = rows / pageSize + 1; } return pageNumber; } /** * 自动添加分页查询方法 * * @param sql * 要执行的sql * @param type * 执行方式 * @param csList * 参数列表 * @param curPage * 当前页数 * @param pageSize * 每页记录数 默认为10 * @return */ public ResultSet selectByFY(String sql, String type, List<String> csList, int curPage, int pageSize) { ResultSet prs = null; // 处理 每页记录数 if (pageSize <= 0) { pageSize = 10;// 默认页面10条记录 } int pageNumber = getPageNumber(sql, type, csList, pageSize); // 处理当前页数 if (curPage < 0) { curPage = 1;// 默认第一页 } if (curPage > pageNumber) { curPage = pageNumber; } String psql = "select tmpaa.* from (select tmpa.*,(select (ROW_NUMBER() over (order by id))) as rn from (" + sql + ") tmpa where (select (ROW_NUMBER() over (order by id))) <= " + (curPage * pageSize) + ") tmpaa where tmpaa.rn >= " + ((curPage - 1) * pageSize + 1); prs = select(psql, type, csList); return prs; } // 将预编通道执行的参数队列按照指定规则设置进通道中 private void setPrepareStatement(PreparedStatement p, List<String> csList) throws Exception { if (csList != null && csList.size() > 0) { for (int i = 0; i < csList.size(); i++) { // 此处的str是数据类型 ,数据值 // 解析出数据类型和数据值 String[] s = csList.get(i).split(","); String sType = s[0]; String sData = s[1]; if (varCharType.equals(sType)) { p.setString(i + 1, sData); } else if (intType.equals(sType)) { p.setInt(i + 1, Integer.valueOf(sData)); } else if(doubleType.equals(sType)){ p.setDouble(i+1, Double.valueOf(sData)); } else if (dateType.equals(sType)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); java.util.Date d = sdf.parse(sData); p.setDate(i + 1, new Date(d.getTime())); } else if (timeType.equals(sType)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); java.util.Date d = sdf.parse(sData); p.setTimestamp(i + 1, new Timestamp(d.getTime())); } } } } // 定义一个执行insert update delete的方法 public int iudSql(String sql) { int ri = -1; if (stmt != null) { try { ri = stmt.executeUpdate(sql); commit(); } catch (SQLException e) { e.printStackTrace(); rollBack(); } } return ri; } public int iudSql(String sql, String type, List<String> csList) { int ri = -1; if (stmtType.equals(type)) { ri = iudSql(sql); } else if (pstmtType.equals(type)) { if (connect != null) { try { pstmt = connect.prepareStatement(sql); setPrepareStatement(pstmt, csList); ri = pstmt.executeUpdate(); commit(); } catch (Exception e) { e.printStackTrace(); rollBack(); } } } return ri; } /** * 编写一个通用的遍历ResultSet结果集的方法 */ public void iteratorResultSet(ResultSet rs) { try { if (rs != null) {// 说明有值 // ResultSetMetaData 此对象里封装了与结果集有关所有信息 // 此结果有几列组成,每列的列名,每列的数据类型 ResultSetMetaData rsmd = rs.getMetaData(); // 得到结果集列数 int columnCount = rsmd.getColumnCount(); // 输出此结果集的所有列名 for (int i = 1; i <= columnCount; i++) { System.out.print(rsmd.getColumnName(i) + "\t"); } System.out.println(""); // 遍历输出所有的数据 while (rs.next()) { // 如何在获取rs中的数据? for (int i = 1; i <= columnCount; i++) { String type = rsmd.getColumnTypeName(i); System.out.print(getResultSetValue(rs, i, type) + "\t"); } System.out.println(""); } } } catch (SQLException e) { e.printStackTrace(); } } // 从ResultSet中根据数据类型来得到数据值的方法 // 先处理常用的sqlserver的数据类型的对应 private String getResultSetValue(ResultSet rs, int index, String type) { String rstr = ""; try { if (rs != null && !"".equals(type) && index > 0) { if ("char".equals(type.trim()) || "varchar".equals(type.trim())) { if (rs.getString(index) != null) { rstr = rs.getString(index); } } else if ("int".equals(type.trim())) { rstr = rs.getInt(index) + ""; } else if ("decimal".equals(type.trim())) { rstr = String.valueOf(rs.getDouble(index)); } else if ("date".equals(type.trim())) { Date date = rs.getDate(index); if (date != null) { rstr = new SimpleDateFormat("yyyy年MM月dd日").format(date); } } else if ("timestamp".equals(type.trim()) || "datetime".equals(type.trim())) { Timestamp tt = rs.getTimestamp(index); if (tt != null) { rstr = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(tt); } } } } catch (SQLException e) { e.printStackTrace(); } return rstr; } /* //统一事务管理的批量sql的封装 public boolean iudSql(List<String> sqlList){ int ri = -1; if(stmt!=null){ try { ri = stmt.executeUpdate(sql); commit(); } catch (SQLException e) { e.printStackTrace(); rollBack(); } } return ri; }*/ // 关闭连接 public void close() { try { // 关闭所有的与数据库有关的对象 if (rs != null) { rs.close(); rs = null; } if (stmt != null) { stmt.close(); stmt = null; } if (pstmt != null) { pstmt.close(); pstmt = null; } if (cstmt != null) { cstmt.close(); cstmt = null; } if (connect != null) { connect.close(); connect = null; } } catch (SQLException e) { e.printStackTrace(); } } }
oracle 存过中处理非必输日期
存过中查询有个 create_date 字段 传入参数里有 begin_date 和 enddate两个字段,都是非必输。 现在要做一个查询,要求筛选出create_date在begin_date和 end_date 之间的记录。求教应该怎么写? 我现在想到的方法是 用if 分所有的场景去处理。想问有没有简单的办法 就类似 where name like coalesce(in_name,'%%')这种直接可以处理非必输的方法
Java新手求助,动态下拉列表
项目用LayUi框架+SpringMvc实现的 点击总体页面右侧的编辑按钮弹出Layui渲染的窗口(另一个jsp页),窗口中的下拉列表想做成从后端数据库表中查出的数据 ![图片说明](https://img-ask.csdn.net/upload/201706/07/1496817409_419946.png) 整体页: ``` <fieldset class="layui-elem-field"> <legend>诉讼指南列表</legend> <div class="layui-field-box layui-form"> <table class="layui-table admin-table"> <thead> <tr> <th style="width: 30px;"><input type="checkbox" lay-filter="allselector" lay-skin="primary"></th> <th>标题</th> <th>日期</th> <th>分类</th> <th>操作</th> </tr> </thead> <tbody id="content"> </tbody> </table> </div> </fieldset> <div class="admin-table-page"> <div id="paged" class="page"> </div> </div> <script type="text/html" id="tpl"> {{# layui.each(d.list, function(index, item){ }} <tr> <td><input type="checkbox" lay-skin="primary"></td> <td>{{ item.heading }}</td> <td>{{ item.dates }}</td> <td>{{ item.litigationguidesubmenu.litigationguidesubmenuname }}</td> <td> <!-- 修改按钮 --> <a href="javascript:;" data-gid="{{ item.gid }}" data-heading="{{ item.heading }}" data-straightmatter="{{ item.straightmatter }}" data-dates="{{ item.dates }}" data-opt="edit" class="layui-btn layui-btn-mini" id="update" onclick="edit(this)">编辑</a> <a href="javascript:;" data-gid="{{ item.gid }}" data-opt="del" id="del" class="layui-btn layui-btn-danger layui-btn-mini" onclick="del(this)">删除</a> </td> </tr> {{# }); }} </script> <script type="text/javascript" src="${pageContext.request.contextPath }/plugins/layui/layui.js"></script> <script> layui.config({ base: 'js/' }); layui.use(['paging', 'form'], function() { var $ = layui.jquery, paging = layui.paging(), layerTips = parent.layer === undefined ? layui.layer : parent.layer, layer = layui.layer, form = layui.form(); paging.init({ /* 省略查询代码 */ complate: function() { //点击编辑按钮弹出编辑窗口 $.post('view/LitigationGuide/forms/updateForm.jsp',{gid:$(this).data('gid'),heading:$(this).data('heading'),straightmatter:$(this).data('straightmatter'),dates:$(this).data('dates'),submenu:$(this).data('submenu')}, function(form) { addBoxIndex = layer.open({ type: 1, title: '修改诉讼指南', content: form, btn: ['保存', '取消'], shade: false, offset: ['100px', '30%'], area: ['800px', '620px'], zIndex: 19950924, maxmin: true, yes: function(index) { //触发表单的提交事件 $('form.layui-form').find('button[lay-filter=edit]').click(); }, success: function(layero, index) { //弹出窗口成功后渲染表单 var form = layui.form(); form.render(); form.on('submit(edit)', function(data) { //参数传入controller $.post('litigationguide/updateLitigationGuide.json',data.field,function(res){ location.reload(); }); return false; }); }, end: function() { addBoxIndex = -1; } }); }); }); }); }, }); </script> ``` updateForm.jsp: ``` <html> ... <body> <!--省略标题、正文、日期等...--> <div class="layui-form-item" style="width:200px; margin-left:110px;"> <select name="fenlei" lay-verify="" > <option value="">请选择文章分类</option> <c:forEach items="${ 后台返回的集合 }" var="s"> <option value="${ s.id }">${ s.值 }</option> </c:forEach> </select> </div> ... </body> ... </html> ``` 小白还求高手指教
不会用jar包里面的东西,有人能帮忙看看吗
![图片说明](https://img-ask.csdn.net/upload/201805/08/1525772262_668816.png)我的想法是将前台传来的birth出生日期转换成day(活了多少天)这个变量,再把day传入数据库。但是这个转换我弄了好久。
android 编译通过了但调试出了问题 求大神帮忙 非常感谢
![这是logcat][1]这是java文件 package com.src; import java.text.NumberFormat; import java.util.Calendar; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; public class MyyjActivity extends Activity { public static final String DB_NAME = "test.db"; /** * 定义数据库名称 */ private TextView middle, message, totalMoney, traffic, communication, catering, entertainment; /** * 定义TextView控件以及定义其变量 */ private ImageButton leftButton; /** * 界面里的左按钮 */ private ImageButton rightButton; /** * 界面里的右按钮 */ private MyOpenHelper OpenHelper; /** * 打开数据库的辅助类 */ private SQLiteDatabase db = null; int month; int year; int day; int temp; //第二次强制转换的赋值变量 String d; //保存年月日的拼接字符串变量 String largeCost, trueCost, money, type, description, time; //lareCost:从设置界面传过来的最高消费 //trueCost: SharedPreferences dataBase; //为跨页面取值做准备 Editor edit; double cost = 0,//接收数据库查询的金额数据并进行强制转换的变量 totalCost = 0, //总金额 trafficMoney = 0, //公交的总消费金额 cateringMoney = 0,//餐饮的总消费金额 communicationMoney = 0,//通讯的总消费金额 entertainmentMoney = 0;//娱乐的总消费金额 Toast toastShow;//显示消息 NumberFormat nf; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.myyj); middle = (TextView) findViewById(R.id.time); totalMoney = (TextView) findViewById(R.id.zxf_txt); traffic = (TextView) findViewById(R.id.gj_txt); catering = (TextView) findViewById(R.id.cy_txt); communication = (TextView) findViewById(R.id.tx_txt); entertainment = (TextView) findViewById(R.id.yl_txt); message = (TextView) findViewById(R.id.mes); leftButton = (ImageButton) findViewById(R.id.left_btn); rightButton = (ImageButton) findViewById(R.id.right_btn); setUiClick();//调用监听方法 fillUi();//调用显示日期方法 showData(d);//调用查询数据并显示的方法 } /** * 设置控件显示当前日期 */ public void fillUi() { Calendar calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH) + 1; day = calendar.get(Calendar.DAY_OF_MONTH); if (month < 10) { d = year + "-" + "0" + month; } else { d = year + "-" + month; } middle.setText(d); } /** * 设置左右imageButton图片按钮的监听事件 */ public void setUiClick() { final Calendar calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH) + 1; leftButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { month--; if (month == 0) { year = year - 1; month = 13; } else { if (month < 10) { d = year + "-" + "0" + month; } else { d = year + "-" + month; } } middle.setText(d); trafficMoney = 0; cateringMoney = 0; communicationMoney = 0; totalCost = 0; entertainmentMoney = 0; cost = 0; showData(d); } }); rightButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { month++; if (month == 13) { year = year + 1; month = 1; d = year + "-" + "0" + month; } else { if (month < 10) { d = year + "-" + "0" + month; } else { d = year + "-" + month; } } middle.setText(d); totalCost = 0; trafficMoney = 0; communicationMoney = 0; cateringMoney = 0; entertainmentMoney = 0; cost = 0; showData(d); } }); } /** * * @param da:传入的时间变量 * 根据时间查询数据 */ private void showData(String da) { OpenHelper = new MyOpenHelper(MyyjActivity.this, DB_NAME, null, 1); db = OpenHelper.getReadableDatabase(); Cursor cursor = null; try { cursor = db.query("count", null, "sj like" + "'" + "%" + da + "%" + "'", null, null, null, null); if (cursor.moveToFirst()) { do { money = cursor.getString(cursor.getColumnIndex("je")); description = cursor.getString(cursor.getColumnIndex("ms")); type = cursor.getString(cursor.getColumnIndex("lx")); time = cursor.getString(cursor.getColumnIndex("sj")); fillDatas(); } while (cursor.moveToNext()); } numberFormat();//调用格式化数字的方法 } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } dataBase = getSharedPreferences("spName", 0); edit = dataBase.edit(); largeCost = dataBase.getString("ZGXF", null); long largeCost1 = Integer.parseInt(largeCost); if (totalCost > largeCost1) { message.setText("这个月我超支了!"); } else { message.setText("这个月我没超支!"); } } /** * * 将查询的数据显示在textView上 */ private void fillDatas() { if (type.equals("公交")) { cost = Double.parseDouble(money); temp=(int)cost; trafficMoney += temp; } else { traffic.setText("" + 0.00); } if (type.equals("餐饮")) { cost = Double.parseDouble(money); temp=(int)cost; cateringMoney += temp; } else { catering.setText("" + 0.00); } if (type.equals("通讯")) { cost = Double.parseDouble(money); temp=(int)cost; communicationMoney += temp; } else { communication.setText("" + 0.00); } if (type.equals("娱乐")) { cost = Double.parseDouble(money); temp=(int)cost; entertainmentMoney += temp; } else { entertainment.setText("" + 0.00); } } /** * 对查询的数据进行格式化 */ private void numberFormat() { nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); nf.setMinimumFractionDigits(2); nf.format(trafficMoney); nf.format(communicationMoney); nf.format(cateringMoney); nf.format(entertainmentMoney); nf.format(totalCost); traffic.setText("" + nf.format(trafficMoney)); communication.setText("" + nf.format(communicationMoney)); catering.setText("" + nf.format(cateringMoney)); entertainment.setText("" + nf.format(entertainmentMoney)); totalCost = trafficMoney + cateringMoney + entertainmentMoney + communicationMoney; totalMoney.setText("" + nf.format(totalCost)); } } [1]: http://yunpan.cn/Q5aKjw2FTvSLu
求问,如何做一个二级联动的下拉表单(select),每点击一下按钮,表单增加一行。
求问,如何做一个二级联动的下拉表单(select),每点击一下按钮,表单增加一行。我现在的问题是,表单增加后,二级联动就没有效果了。 这是html和表单元素代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/tab.js"></script> <script type="text/javascript" src="js/select2.js"></script> <link href="css/select2.css" rel="stylesheet"/> </style> </head> <body> <br> <table class="table" > <thead> <tr> <th>厚度</th> <th>光度</th> <th>外观</th> </tr> </thead> <tbody> <tr id="a"> <td> <div class="demo"> <div id="city_5"> <select class="prov"></select> <select class="city" disabled="disabled"></select> <select class="dist" disabled="disabled"></select> </div> </div> </td> <td><input type="" name=""></td> <td><input type="" name=""></td> </tr> </tbody> </table> <button onclick="fun()">增加一行</button> <button onclick="del()">删除一行</button> <script type="text/javascript" src="jquery.cityselect.js"></script> <script type="text/javascript"> $(function() { $("#city_5").citySelect({ url: {"citylist": [ {"p": "前端课程", "c": [{"n": "HTML5"}, {"n": "CSS3", "a": [{"s": "HTML"}, {"s": "AJAX"}]}, {"n": "JSON"}]}, {"p": "编程语言", "c": [{"n": "C"}, {"n": "C++"}, {"n": "Python"}, {"n": "PHP"}, {"n": "JAVA"}]}, {"p": "数据库", "c": [{"n": "Mysql"}, {"n": "SqlServer"}, {"n": "Oracle"}, {"n": "Mssql"}]}, ]}, prov: "", city: "", dist: "", nodata: "none" }); }); </script> </body> </html> 这是增加一行的代码 var i = 1; $(".td").each(function(){ $(this).html(i++); }) function fun(){ var $td = $("#a").clone(); //增加一行,克隆第一个对象 $(".table").append($td); var i = 1; $(".td").each(function(){ //增加一行后重新更新序号1,2,3...... $(this).html(i++); }) $("table tr:last").find(":input").val(''); //将尾行元素克隆来的保存的值清空 } function del(){ $("table tr:not(:first):not(:first):last").remove(); //移除最后一行,并且保留前两行 } 这是二级联动代码 /* Ajax 三级省市联动 http://code.ciaoca.cn/ 日期:2012-7-18 settings 参数说明 ----- url:省市数据josn文件路径 prov:默认省份 city:默认城市 dist:默认地区(县) nodata:无数据状态 required:必选项 ------------------------------ */ (function($) { $.fn.citySelect = function(settings) { if (this.length < 1) { return; } ; // 默认值 settings = $.extend({ url: "city.min.js", prov: null, city: null, dist: null, nodata: null, required: true }, settings); var box_obj = this; var prov_obj = box_obj.find(".prov"); var city_obj = box_obj.find(".city"); var dist_obj = box_obj.find(".dist"); var prov_val = settings.prov; var city_val = settings.city; var dist_val = settings.dist; var select_prehtml = (settings.required) ? "" : "<option value=''>请选择</option>"; var city_json; // 赋值市级函数 var cityStart = function() { var prov_id = prov_obj.get(0).selectedIndex; if (!settings.required) { prov_id--; } ; city_obj.empty().attr("disabled", true); dist_obj.empty().attr("disabled", true); if (prov_id < 0 || typeof (city_json.citylist[prov_id].c) == "undefined") { if (settings.nodata == "none") { city_obj.css("display", "none"); dist_obj.css("display", "none"); } else if (settings.nodata == "hidden") { city_obj.css("visibility", "hidden"); dist_obj.css("visibility", "hidden"); } ; return; } ; // 遍历赋值市级下拉列表 temp_html = select_prehtml; $.each(city_json.citylist[prov_id].c, function(i, city) { temp_html += "<option value='" + city.n + "'>" + city.n + "</option>"; }); city_obj.html(temp_html).attr("disabled", false).css({"display": "", "visibility": ""}); distStart(); }; // 赋值地区(县)函数 var distStart = function() { var prov_id = prov_obj.get(0).selectedIndex; var city_id = city_obj.get(0).selectedIndex; if (!settings.required) { prov_id--; city_id--; } ; dist_obj.empty().attr("disabled", true); if (prov_id < 0 || city_id < 0 || typeof (city_json.citylist[prov_id].c[city_id].a) == "undefined") { if (settings.nodata == "none") { dist_obj.css("display", "none"); } else if (settings.nodata == "hidden") { dist_obj.css("visibility", "hidden"); } ; return; } ; // 遍历赋值市级下拉列表 temp_html = select_prehtml; $.each(city_json.citylist[prov_id].c[city_id].a, function(i, dist) { temp_html += "<option value='" + dist.s + "'>" + dist.s + "</option>"; }); dist_obj.html(temp_html).attr("disabled", false).css({"display": "", "visibility": ""}); }; var init = function() { // 遍历赋值省份下拉列表 temp_html = select_prehtml; $.each(city_json.citylist, function(i, prov) { temp_html += "<option value='" + prov.p + "'>" + prov.p + "</option>"; }); prov_obj.html(temp_html); // 若有传入省份与市级的值,则选中。(setTimeout为兼容IE6而设置) setTimeout(function() { if (settings.prov != null) { prov_obj.val(settings.prov); cityStart(); setTimeout(function() { if (settings.city != null) { city_obj.val(settings.city); distStart(); setTimeout(function() { if (settings.dist != null) { dist_obj.val(settings.dist); } ; }, 1); } ; }, 1); } ; }, 1); // 选择省份时发生事件 prov_obj.bind("change", function() { cityStart(); }); // 选择市级时发生事件 city_obj.bind("change", function() { distStart(); }); }; // 设置省市json数据 if (typeof (settings.url) == "string") { $.getJSON(settings.url, function(json) { city_json = json; init(); }); } else { city_json = settings.url; init(); } ; }; })(jQuery);
求解为何int[]数组在赋值后,数组元素还是为空
这是自定义View里面的一个方法 ``` public void countPerDay(int[] newString){ countTimes = newString; Log.d("TestInCountPerDay", String.valueOf(countTimes[0]) + ":" + String.valueOf(countTimes[4]) + ":" + String.valueOf(countTimes[5]) + ":" + String.valueOf(countTimes[6])); postInvalidate(); } ``` 在另一个类的onReceive调用这个方法,传入参数 ``` ResultView resultView = new ResultView(); resultView.countPerDay(drawCountTimes); ``` View代码 ``` public class ResultView extends View{ private float mMinSize; private int mWidth; private int mHeight; private int mHeightUp; private int mBackgroundCorner; private int mStrokeWidth; private int mArcCenterX; private int mArcCenterY; SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Calendar ca = Calendar.getInstance(); private int[] days = new int[7]; # # private int[] countTimes = new int[7]; private RectF mArcRect; private Paint mBackgroundPaint; private Paint mStrokePaint; private Paint mTextPaint; private Paint mLinePaint; private Paint mBarPaint; private SweepGradient mSweepGradient; private int[] mSteps; private String screenOffTimes = ""; private String unlockTimes = ""; public ResultView(Context context) { super(context, null); } public ResultView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ResultView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setLayerType(View.LAYER_TYPE_SOFTWARE, null); init(); } //接受从Async传来的数据,把值附给给countTime public void countTimes(String string,String string2){ this.screenOffTimes = string; this.unlockTimes = string2; postInvalidate(); } ## public void countPerDay(int[] newString){ ## countTimes = newString; ## Log.d("TestInCountPerDay", String.valueOf(countTimes[0]) + ":" + String.valueOf(countTimes[4]) + ":" + String.valueOf(countTimes[5]) + ":" + String.valueOf(countTimes[6])); ## postInvalidate(); ## } public void init(){ mBackgroundPaint = new Paint(); mBackgroundPaint.setAntiAlias(true); mBackgroundPaint.setColor(Color.RED); mStrokePaint = new Paint(); mStrokePaint.setAntiAlias(true); mStrokePaint.setStyle(Paint.Style.STROKE); mStrokePaint.setDither(true); // set the dither to true mStrokePaint.setStrokeJoin(Paint.Join.ROUND); // set the join to round you want mStrokePaint.setStrokeCap(Paint.Cap.ROUND); // set the paint cap to round too mStrokePaint.setPathEffect(new CornerPathEffect(10)); // set the path effect when they join. mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); mLinePaint = new Paint(); mLinePaint.setAntiAlias(true); mLinePaint.setColor(0xFF77838F); mLinePaint.setStyle(Paint.Style.STROKE); mLinePaint.setPathEffect(new DashPathEffect(new float[]{10, 3}, 0)); mBarPaint = new Paint(); mBarPaint.setAntiAlias(true); mBarPaint.setColor(0xFF63CFEC); mBarPaint.setStrokeCap(Paint.Cap.ROUND); mArcRect = new RectF(); //柱状图的数值如下 mSteps = new int[]{9000,12000,8900, 9200,7000,0,6000}; ca.setTime(new Date()); for (int i = 0;i<7;i++){ ca.add(Calendar.DATE, -1); days[6-i]= Integer.parseInt(new SimpleDateFormat("dd").format(ca.getTime())); } } private void initSize(){ mWidth = (int) (570*mMinSize); mHeight = (int) (650*mMinSize); mHeightUp = (int) (550*mMinSize); mBackgroundCorner = (int) (13*mMinSize); mStrokeWidth = (int) (20*mMinSize); mArcCenterX = mWidth/2; int arcRadius = (int) ((308 / 2) * mMinSize); mArcCenterY = (int) (200 * mMinSize); mArcRect.left = mArcCenterX - arcRadius; mArcRect.top = mArcCenterY - arcRadius; mArcRect.right = mArcCenterX + arcRadius; mArcRect.bottom = mArcCenterY + arcRadius; int[] colors = {0xFF9A9BF8,0xFF9AA2F7, 0xFF65CCD1,0xFF63D0CD,0xFF68CBD0,0xFF999AF6,0xFF9A9BF8}; float[] positions = {0,1f/6,2f/6,3f/6,4f/6,5f/6,1}; mSweepGradient = new SweepGradient(mArcCenterX, mArcCenterX, colors , positions); } @Override protected void onDraw(Canvas canvas) { ## Log.d("TestInOnDraw", String.valueOf(countTimes[0]) + ":" + String.valueOf(countTimes[4]) + ":" + String.valueOf(countTimes[5]) + ":" + String.valueOf(countTimes[6])); // 1.draw background mBackgroundPaint.setColor(0xFF4C5A67); drawUpRoundRect(0, 0, mWidth, mHeightUp, mBackgroundCorner, mBackgroundPaint, canvas); mBackgroundPaint.setColor(0xFF496980); drawBelowRoundRect(0, mHeightUp, mWidth, mHeight, mBackgroundCorner, mBackgroundPaint, canvas); // 2.draw arc mStrokePaint.setStrokeWidth(mStrokeWidth); mStrokePaint.setShader(mSweepGradient); canvas.drawArc(mArcRect, -240, 300, false, mStrokePaint); //Intent intent = new Intent(); //int a = Integer.parseInt(intent.getStringExtra("countTime")); // 3.draw text float xPos, yPos; mTextPaint.setTextAlign(Paint.Align.CENTER); mTextPaint.setColor(Color.WHITE); mTextPaint.setTextSize(80 * mMinSize); yPos = mArcCenterY-((mTextPaint.descent() + mTextPaint.ascent()) / 2); //drawText直接显示数值 canvas.drawText(screenOffTimes, mArcCenterX, yPos, mTextPaint); mTextPaint.setColor(0xFF828E98); mTextPaint.setTextSize(20 * mMinSize); yPos = 140*mMinSize -((mTextPaint.descent() + mTextPaint.ascent()) / 2); canvas.drawText("截至"+sdf.format(new Date())+"已点亮屏幕", mArcCenterX, yPos, mTextPaint); yPos = 260*mMinSize -((mTextPaint.descent() + mTextPaint.ascent()) / 2); canvas.drawText("其中解锁"+unlockTimes+"次", mArcCenterX, yPos, mTextPaint); mTextPaint.setColor(Color.WHITE); xPos = mArcCenterX - 40*mMinSize; yPos = 380 * mMinSize; canvas.drawText("第", xPos, yPos, mTextPaint); xPos = mArcCenterX + 40*mMinSize; canvas.drawText("名", xPos, yPos, mTextPaint); mTextPaint.setTextSize(30 * mMinSize); canvas.drawText("44", mArcCenterX, yPos, mTextPaint); mTextPaint.setTextSize(18*mMinSize); mTextPaint.setColor(0xFF77838F); mTextPaint.setTextAlign(Paint.Align.LEFT); xPos = 30*mMinSize; yPos = 420*mMinSize; canvas.drawText("最近7天",xPos, yPos, mTextPaint); mTextPaint.setTextAlign(Paint.Align.RIGHT); xPos = 540 * mMinSize; yPos = 420*mMinSize; canvas.drawText("平均125次/天", xPos, yPos, mTextPaint); // 4. draw dash line xPos = 30 * mMinSize; yPos = 440 * mMinSize; mLinePaint.setStrokeWidth(2*mMinSize); canvas.drawLine(xPos, yPos, mWidth - xPos, yPos,mLinePaint); // 5. draw bars and date mBarPaint.setStrokeWidth(mStrokeWidth); float halfBarGap = 510 * mMinSize / 14; float maxLength = 440 * mMinSize; yPos = 480 * mMinSize; int maxBar = 0; for(int step : mSteps){ if(step > maxBar){ maxBar = step; } } float length; mTextPaint.setColor(Color.WHITE); mTextPaint.setTextSize(18*mMinSize); mTextPaint.setTextAlign(Paint.Align.CENTER); for(int i = 0; i < mSteps.length; i++){ xPos = (2*i+1)* halfBarGap + 30 *mMinSize; length = (yPos - maxLength) * mSteps[i]*1f/maxBar; canvas.drawLine(xPos, yPos, xPos, yPos -length, mBarPaint ); //画出柱状图下面的日期 String date = String.format("%02d日", days[i]); canvas.drawText(date,xPos, 520*mMinSize, mTextPaint ); } // 6.draw text below mTextPaint.setTextAlign(Paint.Align.LEFT); mTextPaint.setColor(Color.WHITE); mTextPaint.setTextSize(23 * mMinSize); canvas.drawText("这是被隐藏的内容", 30 * mMinSize, 610 * mMinSize, mTextPaint); mTextPaint.setTextAlign(Paint.Align.RIGHT); mTextPaint.setColor(0xFF63CFEC); canvas.drawText("查看 >", 540 * mMinSize, 610 * mMinSize, mTextPaint); } private void drawUpRoundRect(float left, float top, float right, float bottom, float radius, Paint paint, Canvas canvas) { Path path = new Path(); path.moveTo(left, top); path.lineTo(right-radius, top); path.quadTo(right, top, right, top + radius); path.lineTo(right, bottom); path.lineTo(left, bottom); path.lineTo(left, top + radius); path.quadTo(left, top, left + radius, top); canvas.drawPath(path, paint); } private void drawBelowRoundRect(float left, float top, float right, float bottom, float radius, Paint paint, Canvas canvas) { Path path = new Path(); path.moveTo(left, top); path.lineTo(right, top); path.lineTo(right, bottom-radius); path.quadTo(right, bottom,right-radius,bottom); path.lineTo(left + radius, bottom); path.quadTo(left,bottom,left,bottom-radius); path.lineTo(left, top); canvas.drawPath(path, paint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int desiredWidth = Integer.MAX_VALUE; int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int width; int height; //Measure Width if (widthMode == MeasureSpec.EXACTLY) { //Must be this size width = widthSize; } else if (widthMode == MeasureSpec.AT_MOST) { width = Math.min(desiredWidth, widthSize); } else { //Be whatever you want width = desiredWidth; } mMinSize = width/570.f; int desiredHeight = (int) (mMinSize*650); initSize(); //Measure Height= if (heightMode == MeasureSpec.EXACTLY) { //Must be this size height = heightSize; } else if (heightMode == View.MeasureSpec.AT_MOST) { //Can't be bigger than... height = Math.min(desiredHeight, heightSize); } else { //Be whatever you want height = desiredHeight; } //MUST CALL THIS setMeasuredDimension(width, height); } } ``` 可是传递过来的数据在onDraw里面不生效,只在countPerDay里面生效(就是在countPerDay里面打log,数值都是正常的。但是在onDraw里面打log就全部都为0) 这是为何,本人初学小白,请大神们指教。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
前后端分离,我怎么就选择了 Spring Boot + Vue 技术栈?
前两天又有小伙伴私信松哥,问题还是职业规划,Java 技术栈路线这种,实际上对于这一类问题我经常不太敢回答,每个人的情况都不太一样,而小伙伴也很少详细介绍自己的情况,大都是一两句话就把问题抛出来了,啥情况都不了解,就要指出一个方向,这实在是太难了。 因此今天我想从我学习 Spring Boot + Vue 这套技术栈的角度,来和大家聊一聊没有人指导,我是如何一步一步建立起自己的技术体系的。 线上大...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问