java 日期类型参数如何传入

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

5个回答

参考:

 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 年之前 回复

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

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) 这是为何,本人初学小白,请大神们指教。
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱 极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12) 选择需要启...
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Java描述设计模式(19):模板方法模式
本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 通常一款互联网应用的开发流程如下:业务需求,规划产品,程序开发,测试交付。现在基于模板方法模式进行该过程描述。 public class C01_InScene { public static void main(String[] args) { DevelopApp developApp = n...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char name[20] = "黑蛋"; //玩家名字 int...
第三个java程序(表白小卡片)
前言: &nbsp;向女神表白啦,作为一个程序员,当然也有爱情啦。只不过,虽然前面两个程序都只是学习了基础的语法结构和向量哈希表。这里涉及的是Swing,awt图形用户界面和一点文件输入输出流的知识。 &nbsp; 表白代码如下: 另附:里面的音乐和图片可以放在一个自己创建的包里面,也可以放在src里面,或者使用绝对路径。至于布局,我自己的使用的是简单的排班,简单的继承。后面的程序会慢慢实现。 ...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补...
Linux网络服务-----实验---PXE和Kickstart的无人值守装机
目录 一.PXE的原理 二.kickstart的原理 三.PXE与kickstart的结合使用自动装机 一.PXE的原理 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由支持通过网络启动操作系统,再启动过程中,终端要求服务器分配IP地址...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
A*搜索算法概述
编者按:本文作者奇舞团前端开发工程师魏川凯。A*搜索算法(A-star search algorithm)是一种常见且应用广泛的图搜索和寻径算法。A*搜索算法是通过使用启...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
从顶级黑客到上市公司老板
一看标题,很多老读者就知道我在写什么了。今天Ucloud成功上市,季昕华成为我所熟悉的朋友里又双叒叕一个成功上市的案例。我们认识大概是十五年多吧,如果没记错,第一次见面应该是2004年,...
蓝桥杯知识点汇总:基础知识和常用算法
文章目录基础语法部分:算法竞赛常用API:算法部分数据结构部分 此系列包含蓝桥杯绝大部分所考察的知识点,以及真题题解~ 基础语法部分: 备战蓝桥杯java(一):一般输入输出 和 快速输入输(BufferedReader&amp;BufferedWrite) 备战蓝桥杯java(二):java编程规范和常用数据类型 备战蓝桥杯java(三):常用功能符以及循环结构和分支结构 备战蓝桥杯java(四...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 意思是密码。 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mkdir:Make directory ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
疫情数据接口api
返回json示例 { "errcode":0,//0标识接口正常 "data":{ "date":"2020-01-30 07:47:23",//实时更新时间 "diagnosed":7736,//确诊人数 "suspect":12167,//疑是病例人数 "death":170,//死亡人数 "cur...
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药...
疫情防控,开发者集结出战!
作者 | 屠敏出品 | CSDN(ID:CSDNnews)2020 年伊始,病毒肆虐,人心惶惶。截止北京时间 1 月 31 日 15 时 30 分,全国确诊新型冠状病毒肺炎的数字已达到了...
面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简单的 XML 和注解配置规则。使 Map 接口和 POJO 类映射到数据库字段和记录。 MyBatis 的特点 那么 MyBatis 具有什么特点呢?或许我们可以从如下几个方面来描述 MyBati...
对Tomcat的简单概要小结
首先我们必须得知道Tomcat就是一个服务,一个本地服务,我们可以控制启动和停止,我们程序员通过这个服务主要是用来存放我们的java程序,当我们把Java程序放进Tomcat服务中,一旦Tomcat服务启动起来,其他电脑就可以进行网络连通,也就是说其他电脑也可以共同访问这个Java程序。 Tomcat的主要目录的概念 有上面的概念之后,我们再来知道一下tomcat根目录下都有哪些文件,以及这些文...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问