renanedpedroso 22 de mar. de 2010
Não entendi uma coisa…
No access 97 funciona?
renanedpedroso 22 de mar. de 2010
Tente assim:
import java.sql.Connection ;
import java.sql.Driver ;
import java.sql.DriverManager ;
public class MyConnection {
public static Connection getConnection ( String caminhoArquivoBD ) throws Exception {
Driver d = ( Driver ) Class . forName ( "sun.jdbc.odbc.JdbcOdbcDriver" ). newInstance ();
Connection c = DriverManager . getConnection ( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + caminhoArquivoBD );
return c ;
}
}
Espero ter ajudado.
Abraço!
anamilagaia 22 de mar. de 2010
Se eu converter a base de dados para 2007 consigo fazer o insert, mas depois o programa não consegue ler.
Eu coloquei o código que me indicou, mas dá novo erro: “[Microsoft][Gestor de controladores de ODBC] Atributo de cadeia de ligação inválido”
Obrigada por ter respondido
renanedpedroso 22 de mar. de 2010
Verifique se o arquivo não está em modo somente leitura.
Tente verificar se o caminho do banco de dados está correto.
Qualquer coisa poste seu código para que possamos tentar te ajudar melhor.
Abraço!
anamilagaia 22 de mar. de 2010
package msi ;
import java.io.* ;
import java.sql.Connection ;
import java.sql.Date ;
import java.sql.DriverManager ;
import java.sql.Statement ;
import java.sql.Driver ;
import java.text.SimpleDateFormat ;
import java.util.* ;
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
public class Open extends Thread
{
public static void lerficheiro (){
ArrayList < String > a = new ArrayList < String > ();
String linha = null ;
try {
File f = new File ( "c:/msi" );
File [] lista = f . listFiles ();
for ( File arquivo : lista ) {
//System.out.println(arquivo.getAbsolutePath());
if ( arquivo . length () > 1000 )
arquivo . delete ();
FileReader reader = new FileReader ( arquivo );
BufferedReader leitor = new BufferedReader ( reader );
while (( linha = leitor . readLine ()) != null ) {
StringTokenizer st ;
st = new StringTokenizer ( linha , "\t" );
String t = "<CR>" ;
Pattern p = Pattern . compile ( t );
Matcher m = p . matcher ( linha );
while ( m . find ()) {
String x = arquivo . getPath ();
System . out . println ( "" + x );
System . out . println ( m . group ());
BufferedReader rd = new BufferedReader ( new FileReader ( x ));
LineNumberReader lineNumberReader = new LineNumberReader ( rd );
String id = null ;
String nome = null ;
String prim = null ;
String ult = null ;
String dn = null ;
String ano = null ;
String mes = null ;
String dia = null ;
String fimdn = null ;
String fimdt = null ;
String fimt = null ;
int sex = 0 ;
String nr = null ;
String sala = null ;
String mod = null ;
String sd = null ;
String dat = null ;
String tim = null ;
String hora = null ;
String min = null ;
String seg = null ;
Date data = null ;
Pattern pattern = Pattern . compile ( "(.+) <([^>]+)>" );
String line ;
while (( line = lineNumberReader . readLine ()) != null ) {
Matcher matcher = pattern . matcher ( line );
if ( matcher . matches ()) {
String chave = matcher . group ( 1 ); //lê a 1ª coluna
System . out . println ( chave );
String valor = matcher . group ( 2 ); //lê a 2ª coluna
System . out . println ( valor );
if ( chave . equals ( "PATIENT_ID" )) {
id = valor ;
} else if ( chave . equals ( "PATIENT_NAME" )) {
nome = valor ;
int cont = nome . split ( " " ). length ;
String s [] = nome . split ( "\ " );
prim = s [ 0 ] ;
ult = s [ cont - 1 ] ;
System . out . println ( ult );
} else if ( chave . equals ( "PATIENT_BIRTH_DATE" )) {
dn = valor ;
char [] letras = dn . toCharArray ();
char primeira = dn . charAt ( 0 );
char segunda = dn . charAt ( 1 );
char terceira = dn . charAt ( 2 );
char quarta = dn . charAt ( 3 );
char priseg = dn . charAt ( 4 );
char segseg = dn . charAt ( 5 );
char priter = dn . charAt ( 6 );
char segter = dn . charAt ( 7 );
ano = ( "" + primeira + "" + segunda + "" + terceira + "" + quarta + "" );
mes = ( "" + priseg + "" + segseg + "" );
dia = ( "" + priter + "" + segter + "" );
fimdn = ( "" + dia + "-" + mes + "-" + ano + "" );
SimpleDateFormat format = new SimpleDateFormat ( "dd-MM-yyyy" );
data = new java . sql . Date ( format . parse ( fimdn ). getTime ());
} else if ( chave . equals ( "PATIENT_SEX" )){
if ( valor . equals ( "M" )){
sex = 0 ;
}
else if ( valor . equals ( "F" )){
sex = 1 ;
}
System . out . println ( sex );
} else if ( chave . equals ( "STUDY_ID" )){
nr = valor ;
} else if ( chave . equals ( "SCHEDULED_STUDY_RESOURCE" )){
sala = valor ;
} else if ( chave . equals ( "MODALITY" )){
mod = valor ;
} else if ( chave . equals ( "STUDY_DESCRIPTION" )){
sd = valor ;
} else if ( chave . equals ( "SCHEDULED_STUDY_START_DATE" )){
dat = valor ;
char [] letras = dat . toCharArray ();
char primeira = dat . charAt ( 0 );
char segunda = dat . charAt ( 1 );
char terceira = dat . charAt ( 2 );
char quarta = dat . charAt ( 3 );
char priseg = dat . charAt ( 4 );
char segseg = dat . charAt ( 5 );
char priter = dat . charAt ( 6 );
char segter = dat . charAt ( 7 );
ano = ( "" + primeira + "" + segunda + "" + terceira + "" + quarta + "" );
mes = ( "" + priseg + "" + segseg + "" );
dia = ( "" + priter + "" + segter + "" );
fimdt = ( "" + dia + "-" + mes + "-" + ano + "" );
} else if ( chave . equals ( "SCHEDULED_STUDY_START_TIME" )){
tim = valor ;
char [] letras = tim . toCharArray ();
char primeira = tim . charAt ( 0 );
char segunda = tim . charAt ( 1 );
char priseg = tim . charAt ( 2 );
char segseg = tim . charAt ( 3 );
char priter = tim . charAt ( 4 );
char segter = tim . charAt ( 5 );
hora = ( "" + primeira + "" + segunda + "" );
min = ( "" + priseg + "" + segseg + "" );
seg = ( "" + priter + "" + segter + "" );
fimt = ( "" + hora + ":" + min + ":" + seg + "" );
}
}
}
String caminho = "C:/Program Files/PTW/DataBase/user.mdb" ;
Driver d = ( Driver ) Class . forName ( "sun.jdbc.odbc.JdbcOdbcDriver" ). newInstance ();
Connection con = DriverManager . getConnection ( "jdbc:odbc:Driver = {Microsoft Access Driver (*.mdb)} DBQ = " + caminho );
Statement stm = con . createStatement ();
stm . executeUpdate ( "INSERT INTO PatientData (Id, Surname, [First Name], [Date Of Birth], Sex) VALUES ('" + nr + "','" + ult + "','" + prim + "','" + fimdn + "'," + sex + ")" );
// arquivo.delete();
con . close ();
rd . close ();
} //end while
} //end while
reader . close ();
// arquivo.delete();
} //end for
mostrar ( a );
} catch ( Exception e ) { //end try
e . printStackTrace ();
} //end catch
} //end lerficheiro
public static void mostrar ( ArrayList < String > b )
{
for ( int i = 0 ; i < b . size (); i ++ )
{
System . out . println ( b . get ( i ));
}
}
/*public void run() {
while(true){
try{
lerficheiro();
Thread.sleep(120000); // refaz o ciclo após 2 minutos (120000 milissegundos)
}catch(InterruptedException e){
e.printStackTrace( System.err );
}
}
}*/
public static void main ( String [] args ){
lerficheiro ();
}
}
o código é este!!!
em relação há base de dados ela não está restrita a leitura!
Mais uma vez obrigada
renanedpedroso 22 de mar. de 2010
Do jeito que você me passou, realmente não consegui conectar…
Mas aí vi como você está criando a conexão e mudei para conseguir conectar…
Nesta linha você está tentando se conectar assim:
Connection con = DriverManager . getConnection ( "jdbc:odbc:Driver = {Microsoft Access Driver (*.mdb)} DBQ = " + caminho );
Mudei para:
Connection c = DriverManager . getConnection ( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + caminho );
Repare no excesso de espaços e também na falta do ‘;’ antes de ‘DBQ’.
Verifique isso e poste os resultados.
Do jeito que te passei funcionou normalmente.
Espero ter ajudado.
Abraço!
anamilagaia 22 de mar. de 2010
Agradeço imenso a sua ajuda, mas continua a surgir o erro de que a operação tem que utilizar uma consulta actualizavel :?
renanedpedroso 22 de mar. de 2010
Acho que a forma como você está fazendo o insert não deve estar correta, você pode me passar a estrutura dessa tabela do banco de dados?
anamilagaia 22 de mar. de 2010
Já consegui mto mto mto obrigada!!!
Era sim um erro num insert, estava colocando um valor numerico num local de texto.
Mais uma vez mto obrigada por tudo
renanedpedroso 22 de mar. de 2010
Imaginei mesmo…
heheheh
Por nada.
Coloca ‘[RESOLVIDO]’ no título do tópico.
Abraço!