Boa tarde pessoal, gostaria de saber se é possivel pegar um Date do Mysql,e no java transforma-lo em string e criar substrings,por exemplo :
pegar a data assim(yyyy-MM-dd)e com recurso de substring transpofroma-la em (dd-MM-YYYY).
Se pode,como faço isso?
Substring data
13 Respostas
Creio que este tópico vá te ajudar.
<%@ page import="java.sql.*" %>
<html>
<body>
<%
Connection con = null;
Statement st = null;
ResultSet res = null;
String matr;
String admissao;
String query = null;
try
{ Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection
("jdbc:mysql://localhost/ferias","rusther","rust");
st = con.createStatement();
matr=request.getParameter("MATRICULA");
admissao=request.getParameter("ADMISSAO");
{
query = "insert into FERIAS(MATRICULA,ADMISSAO)"+
" values(" + matr+ ",'"
+ admissao+"'")";
st.executeUpdate(query);
}
con.close();
}}
catch (ClassNotFoundException cnfex)
{ out.println("Não carregou o Driver!");
}
catch (SQLException sqlex)
{ out.println("Não conectou ao banco!");
}
%>
</body>
</html>
O caso anterior já foi resolvido,agora preciso de uma outra ajuda,que é o oposto da anterior.
Preciso pegar a data que um usuario vai digitar no formato dd-MM-yyyy e trata-la pra entrar no MYSQL assim :yyyy-MM-dd. abaixo segue o codigo.
Amigo, a SimpleDateFormat resolve isso para você. Dê uma olhada nos métodos parse e format.
Abraços
em vez de usar Statement com Strings concatenados ( que vai te da esses problema de ddMMyyyy X yyyyMMdd ), use um
PreparedStatement, e sete as datas com setDate( int pos, Date data )
ps: não é bom usar Date. Eu costumo usar java.sql.Timestamp
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.sql.*"%>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.text.DateFormat"%>
<html>
<body>
<%
Connection con = null;
Statement st = null;
ResultSet res = null;
String matr;
String admissao;
String query = null;
String formato = "yyyy-MM-dd";
SimpleDateFormat formatter = new SimpleDateFormat(formato);
try
{ Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection
("jdbc:mysql://localhost/ferias","rusther","rust");
st = con.createStatement();
matr=request.getParameter("MATRICULA");
admissao=formatter.format(request.getParameter("ADMISSAO"));
{
query = "insert into FERIAS(MATRICULA,ADMISSAO)"+
" values(" + matr+ ",'"
+ admissao+"'")";
st.executeUpdate(query);
}
con.close();
}}
catch (ClassNotFoundException cnfex)
{ out.println("Não carregou o Driver!");
}
catch (SQLException sqlex)
{ out.println("Não conectou ao banco!");
}
%>
</body>
</html>
24: st = con.createStatement();
25: matr=request.getParameter("MATRICULA");
26: admissao=formatter.format(request.getParameter("ADMISSAO"));
root cause
java.lang.IllegalArgumentException: Cannot format given Object as a Date
java.text.DateFormat.format(DateFormat.java:279)
java.text.Format.format(Format.java:133)
org.apache.jsp.incluirsimple_jsp._jspService(incluirsimple_jsp.java:73)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
o que será que está acontecendo???????
Amigo, você não teria que usar o parse?
public Date parse(String text,
ParsePosition pos)
Parses text from a string to produce a Date.
Dá uma olhada aqui:
http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html
Abraços
Lembre-se que o que você recebe com request.getAttribute no servlet é sempre String.
A lógica da sua aplicação está me deixando meio confuso.
Primeiro porque você não usa PreparedStatement.
Faz um esforço, dá uma olhada no PreparedStatement, é molezinha.
Assim, você vai poder resolver seu problema com setTimestamp, como os amigos mencionaram.
Mesmo assim você vai precisar do SDF para “parsear” a String que você recebe da JSP, e jogar dentro do setTimestamp.
Abraços!
Desculpa,pela “bagunça” que estou fazendo ,mas isso é porque sou novo na programação.
Não precisa se desculpar. Também sou novato.
Não foi um esporro, foi uma idéia. 
Pensa nisso que o pessoal te falou e vamos que vamos.
Abraços
Lembre-se que o que você recebe com request.getAttribute no servlet é sempre String.A lógica da sua aplicação está me deixando meio confuso.
Primeiro porque você não usa PreparedStatement.
Faz um esforço, dá uma olhada no PreparedStatement, é molezinha.
Assim, você vai poder resolver seu problema com setTimestamp, como os amigos mencionaram.
Mesmo assim você vai precisar do SDF para “parsear” a String que você recebe da JSP, e jogar dentro do setTimestamp.
Abraços!
errata: request.getAttribute é Object. request.getParameter é String.
Caramba, como ninguém puxou minha orelha?
Abraços
<html>
<body>
<%
Connection con = null;
Statement st = null;
ResultSet res = null;
String matr;
String admissao;
String query = null;
SimpleDateFormat dmy = new SimpleDateFormat("dd-MM-yyyy");
java.sql.Date data;
try{
data= new java.sql.Date(dmy.parse(admissao).getTime());
}
catch(ParseException e){
out.println("data nao formatada");
}
try
{ Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection
("jdbc:mysql://localhost/ferias","rusther","rust");
st = con.createStatement();
matr=request.getParameter("MATRICULA");
admissao=request.getParameter("ADMISSAO");
{
query = "insert into FERIAS(MATRICULA,ADMISSAO)"+
" values(" + matr+ ",'"
+ admissao+"'")";
st.executeUpdate(query);
}
con.close();
}}
catch (ClassNotFoundException cnfex)
{ out.println("Não carregou o Driver!");
}
catch (SQLException sqlex)
{ out.println("Não conectou ao banco!");
}
%>
</body>
</html>
query = "insert into FERIAS(MATRICULA,ADMISSAO)"+
" values(" + matr+ ",'"
+ admissao+"'")";
Pessoal preciso de ajuda,
Estou montando uma tabela na qual tenho o inicio das ferias (INICIOFER) que somo a quantidade de dias de ferias que a pessoa vai tirar (QTDDIAS) e no campo retorno é que está o problema.como somo as duas variaveis .uma Date e outra Int?
<%@ page import="java.sql.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.text.DateFormat"%>
<%@ page import="java.util.*"%>
<html>
<%
Connection con = null;
Statement st = null;
ResultSet res = null;
int qtddias;
String nome;
Date iniciofer;
String formato = "dd/MM/yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(formato);
String retorno;
Date nova_data = new Date(iniciofer.getTime()+((1000*24*60*60)*qtddias));
%>
<body bgcolor="#ffffff">
Consulta férias por nome.
<table id="tb1"nosave="" border="2"cellspacing="2" cols="7">
<tbody>
<tr bgcolor="#e6e6e6">
<td><font face="Arial, Helvetica, sans-serif" size="2"><b>Nome </b></font></td>
<td align="center"><font face="Arial, Helvetica, sans-serif" size="2"><b>Apartir de: </b></font></td>
<td align="center"><font face="Arial, Helvetica, sans-serif" size="2"><b>Qtde de dias</b></font></td>
<td align="center"><font face="Arial, Helvetica, sans-serif" size="2"><b>Retorno</b></font></td>
</tr>
<%
try
{ Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection
("jdbc:mysql://localhost/ferias","rusther","rust");
st = con.createStatement();
String query = "select NOME,INICIOFER,QTDDIAS from FERIAS";
res = st.executeQuery (query);
while ( res.next() )
{
nome=res.getString("NOME");
iniciofer=formatter.format(res.getDate("INICIOFER"));
qtddias=res.getInt("QTDDIAS");
retorno=(iniciofer + qtddias);
%>
<tr>
<td nowrap="nowrap"><"NOME=<%=nome%>&INICIOFER=<%=iniciofer%>&QTDDIAS=<%=qtddias%>";>
<td nowrap="nowrap"><font face="Arial, Helvetica, sans-serif" size="2"><%=nome%></font></td>
<td align="center"nowrap="nowrap"><font face="Arial, Helvetica, sans-serif" size="2"><%=iniciofer%></font></td>
<td align="center"nowrap="nowrap"><font face="Arial, Helvetica, sans-serif" size="2"><%=qtddias%></font></td>
<td align="center"nowrap="nowrap"><font face="Arial, Helvetica, sans-serif" size="2"><%=retorno%></font></td>
</tr>
<%
}
con.close();
}
catch (ClassNotFoundException cnfex)
{
out.println("Não carregou o Driver!");
}
catch (SQLException sqlex)
{ out.println("Não conectou ao banco!");
}
%>
</tbody>
</table>
</body>
</html>
Olhe o Timestamp, ele faz o que precisa!
ps.setTimestamp(1, new Timestamp(suaData().getTime()));
ps.setTimestamp(2, new Timestamp(new Date().getTime()));
ps.setDate(3, precisaFormatar)