Substring data

13 respostas
R

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?

13 Respostas

C

Creio que este tópico vá te ajudar.

http://www.guj.com.br/posts/list/74016.java

R
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. O que devo mudar no codigo pra fazer isso?
<%@ 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("£o carregou o Driver!");
}
catch (SQLException sqlex)
{    out.println("£o conectou ao banco!");
}
%>
</body>
</html>
Agradeço a ajuda anterior.
C

rusther:
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

F

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

R
Boa Tarde Celso estou fazendo assim,mas ta dando erro.
<%@ 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("£o carregou o Driver!");
}
catch (SQLException sqlex)
{    out.println("£o conectou ao banco!");
}
%>
</body>
</html>
org.apache.jasper.JasperException: Exception in JSP: /incluirsimple.jsp:27

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???????

C

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

C

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!

R

Desculpa,pela “bagunça” que estou fazendo ,mas isso é porque sou novo na programação.

C

Não precisa se desculpar. Também sou novato.

Não foi um esporro, foi uma idéia. :wink:

Pensa nisso que o pessoal te falou e vamos que vamos.

Abraços

C

celso.martins:
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

R
<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("£o carregou o Driver!");  
   }  
   catch (SQLException sqlex)  
   {    out.println("£o conectou ao banco!");  
   }  
   %>  
   </body>  
   </html>
Agora ele faz a inclusão,usando o codigo acima,porém,no formato yyyy-MM-dd,acredito que está faltando algo neste trecho abaixo,mas o que???????
query = "insert into FERIAS(MATRICULA,ADMISSAO)"+    
                      " values(" + matr+ ",'"    
                         + admissao+"'")";
Se puderem me ajudar ficarei muito grato!!!!!!:)
R

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&eacute;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>
E

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)
Criado 9 de novembro de 2007
Ultima resposta 13 de nov. de 2007
Respostas 13
Participantes 4