Queria saber como eu faço essa conexão sem usar o web service, sei que não é viável, só para estudo mesmo.
Também queria saber como eu faço para testar no emulador virtual do android do eclipse, o banco está no meu pc.
Mais uma vez: sei que não é o melhor jeito de fazer isso, é só pra estudo mesmo, queria uma conexão direta
[RESOLVIDO] Conexão Android com MySQL sem web services
59 Respostas
Acredito que não seja possível.
eu uso o mongodb, pois já vem com api.
Faz conexão direta com o banco.
Já que é para estudo, experimente o https://mongolab.com/welcome/.
jukajr como o android vai conectar com o banco ?
Por que conectamos com o mysql, temos que ter o serviço rodando por trás, no android não tem isso.
Eu usei algumas vezes em 1 projeto para faculdade, usei o phonegap, e desenvolvi em html, css e js. para conectar no banco usei o angularjs.
posso postar o apk, se quiserem.
Eu comecei usando o eclipse, + troquei para o icenium que achei bem melhor para desenvolvimento de apk(http://www.icenium.com/). Tem simulador tbm.
html ? css ? js ? No caso é um aplicativo web que roda em qualquer plataforma ? IOS, Android ? rs
Valeio Bezerra, eu dei uma pesquisada e vi que é possível sim, porém não tinham muitas explicações sobre como fazer.
jukajr eu queria usar o MySQL mesmo, sem coisas muito complicadas, não é um projeto grande, é só para estudar mesmo.
Acho que o Valeio não entendeu sua pergunta…
vc quer dizer conectar em um mysql que está em um outro computador, certo?
se for isso, tem como sim. eu desenvolvi um app que sincroniza com um banco mysql num servidor remoto, e conecto pelo ip fixo dele da internet…
faz o seguinte, cara… entra no site do mysql, lá tem a biblioteca de conexão java (ou entao eu uso essa aqui http://puu.sh/3qsos.jar)
aí vc vai conectar normalmente, sem segredo, como normalmente aprende-se no java mesmo…
vc joga esse .jar dentro da pasta LIBS do seu projeto, e se quiser, pode seguir essas minhas funções que eu criei para conectar e desconectar nele:
public void conectarMySQL(String host, String porta, String banco, String usuario, String senha){
try{
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
} catch(Exception erro){
Log.e(“MYSQL”,"Erro: "+erro);
}
try{
conn=DriverManager.getConnection("jdbc:mysql://"+host+":"+porta+"/"+banco+"?connectTimeout=9000&socketTimeout=9000&autoReconnect=true&secondsBeforeRetryMaster=3",usuario,senha);
Log.i("MYSQL", "Conectado.");
} catch(Exception erro){
Log.e("MYSQL","Erro: "+erro);
}
}
public void desconectarMySQL(){
try{
conn.close();
Log.i(“MYSQL”,“Desconectado.”);
} catch(Exception erro){
Log.e(“MYSQL”,"Erro: "+erro);
}
}
Simples e sem segredo algum… e ao contrário do que muitos dizem, o desempenho fica bom… só peca um pouco na segurança de usar assim, mas dependendo do seu intuito, isso não é tão relevante.
se quiser, segue este modelo também de funções para dar comandos, fazer selects e tudo mais:
public ResultSet queryMySQL(String qry){
try{
st = conn.createStatement();
sql = qry;
rs = st.executeQuery(sql);
rs.first();
return rs;
} catch(Exception erro){
Log.e("MYSQL","Erro: "+erro);
return null;
}
}
public void comandoMySQL(String comando){
try{
st = conn.createStatement();
st.execute(comando);
} catch(Exception erro){
Log.e("MYSQL","Erro: "+erro);
}
}
espero que lhe ajude um pouco
esqueci de um detalhe… tem que declarar as variáveis lá em cima, se não isso nao funciona, rs…
são essas:
private Connection conn = null;
private Statement st;
private ResultSet rs;
private String sql;
saryoromulo eu te amo, cara!
Acredite, você salvou vidas =D
Vou testar assim que chegar em casa
A parte do ResultSet e do Statement eu consigo subtituir o Statement por PreparedStatement? como se fosse a conexão normal de java EE e SE?
uhahuahuAHUAUH <3
cara, consegue sim…
fica mais ou menos assim:
java.sql.PreparedStatement pstm = conn.prepareStatement(“replace into mimimi values (?,?,?)”);
pstm.setBytes(1, campo1);
pstm.setBytes(2, campo2);
pstm.setBytes(3, campo3);
pstm.executeUpdate();
enfim, só pra te clarear um pouco… é Java cara, qualquer coisa que vc faz no Java, vc consegue fazer pro android
Cara, você é fera, muito obrigado mesmo! <3
Cara, desculpa incomodar de novo, é que tá dando uns erros, dizendo que não achou a classe do driver, mas eu coloquei ela na pasta libs, importei como jar externo… mesmo assim dá erro nisso
acho que nao precisa importar nada, só de copiar pra pasta libs já funciona…
mas por via das duvidas, dá uma olhada nas propriedades do projeto, se tá mais ou menos desse jeito:
eu já passei por esse erro aí, e lembro que é algum lugar das propriedades aí que vc marca alguma opção pra usar o jar q vc importou, mas nao consigo lembrar se é realmente ali onde postei o print…
qualquer coisa cara, STFW… uaheuhaehuae da uma procurada no google, que vc vai achar onde fica a opção…
Então cara, deu esse erro aqui:
http://imageshack.us/f/6/i9.png/
Já copiei o conector, mas ainda asism não vai
esse erro aí é de conexão com o mysql mesmo…
se apareceu isso, significa que no android tá certo, mas tem algum problema pra conectar no mysql… ve se a instalação tá certinha, se vc consegue conectar de outro lugar… se tem banco criado, etc, etc, etc…
ve configuração de timeout no mysql tbm…
qlqr coisa tenta desinstalar e instalar td de novo
Eu conecto certinho na mesma base de dados por uma aplicação de pc, eu queria saber se é o ip que tem que mudar ou algo assim, não se se coloco localhost ou o ip dela, não coloquei a porta também, não sei se o emulador android fica na mesma rede que o meu pc pra poder testar
cola o código aí
Classe Conectar:
package com.example.conexao;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Connection;
public class Conectar {
Connection conn;
public Connection getConexato() throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.1.77/tcc","root","admin");
return conn;
}
}
MainActivity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Conectar conectar = new Conectar();
try {
conn = conectar.getConexato();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
AlertDialog.Builder msg = new Builder(MainActivity.this);
msg.setTitle("Conctar!");
msg.setMessage("Erro! " + e);
msg.setNeutralButton("OK", null);
msg.show();
} catch (SQLException e) {
// TODO Auto-generated catch block
AlertDialog.Builder msg = new Builder(MainActivity.this);
msg.setTitle("Conctar!");
msg.setMessage("Erro! " + e);
msg.setNeutralButton("OK", null);
msg.show();
}
Button bt = (Button)findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder msg = new Builder(MainActivity.this);
msg.setTitle("Conctar!");
msg.setMessage("Conectado!");
msg.setNeutralButton("OK", null);
msg.show();
try {
conn.close();
msg.setTitle("Conctar!");
msg.setMessage("Desconectado!");
msg.setNeutralButton("OK", null);
msg.show();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
tá faltando a porta…
quando vc vai conectar em algum serviço que uma maquina tá disponibilizando, ele fica aberto em uma porta pra fora, e vc tem que informar ela…
tá acontecendo que o driver tá tentando conectar na maquina, mas não tá achando por onde entrar, entende?
então vc tem que informar qual é o numero da porta que seu serviço mysql está instalado…
de padrão, é 3306 ou 3307… então vc tem que fazer assim:
conn = (Connection) DriverManager.getConnection(“jdbc:mysql://192.168.1.77:3306/tcc”,“root”,“admin”);
tenta aí.
se nao der certo, tenta adicionar exceção no firewall do windows, e libera essa porta aí no TCP e tenta de novo.
já tentei com a porta, mesmo assim não dava
adicionei as exceções no Firewall na porta 3306, mesmo assim não vai =/
Eu sei que é pedir muito, mas você poderia fazer uma conexão remota pelo TeamViewer só pra dar uma olhadinha nisso, quando você não estiver ocupado e puder, se não quiser deixa pra lá, sei que já to enchendo você com isso
cara, não vou conectar, resolve sozinho aí! 
tenta passar esses parametros de timeout e essa coisa toda igual o do exemplo q te passei…
conn=DriverManager.getConnection(“jdbc:mysql://”+host+":"+porta+"/"+banco+"?connectTimeout=9000&socketTimeout=9000&autoReconnect=true&secondsBeforeRetryMaster=3",usuario,senha);
usa igualzinho do jeito que passei, cria umas variaveis, host, porta, banco… alimenta elas e passa pra essa linha aí sem alterar nada, ve se dá.
Vlw kkkkk
Tentei de tudo, coloquei esse trem ae e nada ainda, um cara me disse pra liberar acesso remoto ao banco e também n deu certo…
Acho que to fazendo alguma coisa estupidamente errada kkkkk deve ser coisa boba que to errando, mas vlw ae cara
cara, verdade… isso me lembrou uma coisa…
ve nos usuarios do mysql se o usuario root tá liberado pra qualquer host, ou se tá só localhost…
pra ficar pra qualquer maquina acessar vc coloca % no host
Já tentei isso também, mas mesmo assim não vai =/
Liberei o acesso ao banco para o usuário root e ainda assim não quer funcionar
Bom se você tenta acessar o mysql pela rede, você tem que ter o MySQL instalado na máquina, como qualquer banco. E que eu saiba nativamente android só tem suporte a SQLite.
Vou ter que ir para o Plano B, Web Service com PHP, mas vlw a todos que tentaram ajudar
<3 pra todos vcs
cara, então vai, eu conecto pra ver com vc…
me passa seu skype aí que eu add e a gente combina algum jeito…
Ronaldo123
add lá
Passa o seu também que aqui tá com um probleminha de aparecer quem me adicionou
Cara, obrigado mesmo por conectar lá…
Para quem tá com o mesmo erro, tinha que adicionar a permissão pra poder acessar a Internet
Vlw msm, sz
Entao, deu certo, teria que mudar o titulo agora pra { RESOLVIDO }… quem faz isso? o dono do post? ou algum admin?
Igora Cenzi ou saryoromulo… estou com esse mesmo problema… teria como detalhar melhor o que foi feito para resolver o erro.
Tem como usar via web services? Eu uso via php e http.
No meu caso é somente para o tcc… gostaria de fazer a conexão direta como o Igor Cenzi conseguiu…
Não queria usar web service… somente em ultimos casos.
Eu uso sem web service. Como disse acima. Utilizo php e http.
Voce não sabe como conectar via TCP/IP… meu andorid ta conectado na rede… ai gostaria de fazer dessa forma…
Segui todos os passos desse tópico mas parei no mesmo erro que o Igor Cenzi encontrou.
cara, o problema dele foi permissão pra acessar a internet lá no manifest.xml…
é só adicionar a permissão
Foi o que o Rômulo disse, estava tudo certo com o código, o único problema foi essa permissão para o Android acessar a rede, depois que você adiciona a permissão, ele vai funcionar
Eu ja tenho ela adicionada no meu projeto… mas não sei porque não esta funcionando…
teria talvez outro detalhe que voce lembra que eu posso verificar?
O ultimo erro que esta acontecendo é o seguinte:
Erro! java.lnag.ClassCastException: com.mysql.jdbc.connectionImpl
O Rômulo também verificou se meu MySQL estava configurado pra possibilitar acesso remoto, eu acho que era isso, porque ele reinstalou o MySQL umas 5 vezes pra ver se tava lá o problema
cara, cola o código aí que vc ta usando pra conectar…
import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Connection;
//import android.database.SQLException;
public class Conectar {
Connection conn;
public Connection getConexato() throws ClassNotFoundException,
SQLException, java.sql.SQLException, InstantiationException,
IllegalAccessException {
Class.forName("com.mysql.jdbc.Driver").newInstance();
connectTimeout=9000&autoReconnect=true&secondsBeforeRetryMaster=3", "root", "senha");
conn = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.1.15:3306/control","root","tcc");
return conn;
}
}
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Conectar conectar = new Conectar();
try {
conectar = (Conectar) conectar.getConexato();
AlertDialog.Builder msg = new Builder(MainActivity.this);
msg.setTitle("conectou!");
msg.setMessage("ok! ");
msg.setNeutralButton("OK", null);
msg.show();
} catch (Exception e) {
// TODO Auto-generated catch block
AlertDialog.Builder msg = new Builder(MainActivity.this);
msg.setTitle("Conctar!");
msg.setMessage("Erro! " + e);
msg.setNeutralButton("OK", null);
msg.show();
}
}
Nessa linha aqui:
Você não precisaria criar uma variável do tipo Connection pra receber a conexão? Ou assim funciona do mesmo jeito?
essa linha:
conectar = (Conectar) conectar.getConexato();
muda pra isso:
Connection conec = conectar.getConexato();
Cara desse jeito ai que voce me passou conectou 
muito obrigado saryromulo… muito obrigado mesmo.
Que bom que deu certo ‘-’
falo cara!
Sensacional… sera que rola conectar com o MySQL pelo Localhost na aplição android ??
Pra conexão localhost, você tem que colocar o ip da sua máquina, que é onde vai estar o banco de dados
saryoromulo Não querendo pedir muito mas ja pedindo, existe alguma forma de eu crrar um banco de dados externo (por exemplo em alguma hospedagem) e o meu app somente sincronizar/atualizar os dados do bando dentro do android ??? A ideia é que o usuario tenha os dados na mão mesmo sem conectar a internet e que quando ele conecte o app crie um espelho dos bancos…
tem, basta que você configure no seu app o ip de onde ta hospedado o banco…
Ola…
Tenho um galaxy ace com android 2.3.6 e neste realizo a conexão sem problemas, e tambem possuo um tablet genisis com android 4.1.1 e nos dois aparelhos a mesma aplicação, porem no tablet não consigo realizar a conexão diretamente com o mysql.
Alguma ideia do motivo de nao conseguir conectar.
Obrigado
Só para reforçar…
Estou usando jar mencionando durante o tópico.
Bom dia galera. Poderiam dispor de um exemplo pronto só com a conexão? Estou precisando disso também.
Como carregar um ListView com dados do MySQL?