2014-02-12 48 views
0

我正在研究修改外部MySQL数据库的android应用程序。我知道我可以使用中间的PHP/JSON服务来做到这一点,但我宁愿使用JBDC,因为连接速度更快,我的项目老师希望我这样做。因为这是我的第一个应用程序,我开始使用一个简单的按钮和一个操作(创建一个数据库),它实际上工作(实际上是两个按钮,第一个不能在skd高于9的时候工作,AsyncTask不得不为在他们使用):在android片段中的JDBC不工作?

package com.example.prova; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.SystemClock; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import java.sql.*; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final Button button1 = (Button) findViewById(R.id.btconn1); 
     final Button button2 = (Button) findViewById(R.id.btconn2); 


     button1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       try 
       { 
        String URL = "jdbc:mysql://" + "192.168.1.200" + ":" + "3306"; 
        String USER = "app"; 
        String PASS = "android"; 

        Toast.makeText(getApplicationContext(), 
          "Conectando a servidor MySQL", 
          Toast.LENGTH_SHORT).show(); 

        Class.forName("com.mysql.jdbc.Driver").newInstance(); 
        Connection conn = DriverManager.getConnection(URL, USER, PASS); 

        Toast.makeText(getApplicationContext(), 
          "Conectado Servidor MySQL", 
          Toast.LENGTH_LONG).show(); 

        Statement stmt = conn.createStatement(); 

        String SQL = "CREATE DATABASE SYNC"; 

        stmt.executeUpdate(SQL); 

        conn.close();    
       } 
       catch (ClassNotFoundException e) 
       { 
        Toast.makeText(getApplicationContext(), 
          "Error: " + e.getMessage(), 
          Toast.LENGTH_SHORT).show(); 
       } 
       catch (SQLException e) 
       { 
        Toast.makeText(getApplicationContext(), 
          "Error: " + e.getMessage(), 
          Toast.LENGTH_SHORT).show(); 
       } 
       catch (Exception e) 
       { 
        Toast.makeText(getApplicationContext(), 
          "Error: " + e.getMessage(), 
          Toast.LENGTH_LONG).show(); 
       } 

      } 
     }); 

     button2.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       new LED13ON().execute(); 
      } 
     }); 
     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    public class LED13ON extends AsyncTask<Void, Integer, Void> { 

     @Override 
     protected void onPostExecute(Void result){ 
      SystemClock.sleep(2000); 
     } 

     @Override 
     protected void onPreExecute(){ 
      SystemClock.sleep(2100); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... values){ 
      SystemClock.sleep(100); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0){ 

      try 
       { 
       String URL = "jdbc:mysql://" + "192.168.1.200" + ":" + "3306"; 
       String USER = "app"; 
       String PASS = "android"; 

       Class.forName("com.mysql.jdbc.Driver").newInstance(); 
       Connection conn = DriverManager.getConnection(URL, USER, PASS); 

       Statement stmt = conn.createStatement(); 

       String SQL = "CREATE DATABASE aSYNC"; 

       stmt.executeUpdate(SQL); 

       conn.close();    
       } 
      catch (ClassNotFoundException e) 
      { 
      } 
      catch (SQLException e) 
      { 
      } 
      catch (Exception e) 
      { 
      } 
      return null; 
       } 
    } 
} 

问题是,当我尝试使用碎片,日食不返回错误回报,但JDBC代码是行不通的。我知道那只是JDBC代码不工作,因为它进入LED13ON内部并产生SystemClock.sleep(2000),因为该按钮被标记了两秒钟。这是我对新一类片段的代码:

package com.example.smarthome; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Locale; 


import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.SystemClock; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.NavUtils; 
import android.support.v4.view.ViewPager; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 



public class Fragment_main extends Fragment { 
     public Fragment_main() { 
     } 

     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
       View rootView = inflater.inflate(R.layout.fragment_main,container, false); 

       Button btn = (Button) rootView.findViewById(R.id.btconn1); 
       btn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick (View v) { 
        new LED13ON().execute(); 
       } 
       }); 

       return rootView; 
     } 

     public class LED13ON extends AsyncTask<Void, Integer, Void> { 

      @Override 
      protected void onPostExecute(Void result){ 
       SystemClock.sleep(2000); 
      } 

      @Override 
      protected void onPreExecute(){ 
       SystemClock.sleep(2100); 
      } 

      @Override 
      protected void onProgressUpdate(Integer... values){ 
       SystemClock.sleep(100); 
      } 

      @Override 
      protected Void doInBackground(Void... arg0){ 

       try 
        { 
        String URL = "jdbc:mysql://" + "192.168.1.200" + ":" + "3306"; 
        String USER = "app"; 
        String PASS = "android"; 

        Class.forName("com.mysql.jdbc.Driver").newInstance(); 
        Connection conn = DriverManager.getConnection(URL, USER, PASS); 

        Statement stmt = conn.createStatement(); 

        String SQL = "CREATE DATABASE aSYNC"; 

        stmt.executeUpdate(SQL); 

        conn.close();    
        } 
       catch (ClassNotFoundException e) 
       { 
       } 
       catch (SQLException e) 
       { 
       } 
       catch (Exception e) 
       { 
       } 
       return null; 
      } 
     } 

} 

所以我不明白为什么被相同的代码它不是第二个应用程序的工作,已经改变了setOnClickListener的片段工作。谁能帮我?我真的很喜欢用我的应用程序的滑动视图,因为我认为它适合更多的Android Holo风格。

谢谢你的时间!

+0

我建议的第一件事就是记录您发现的异常。其次,记录不同部分的代码,以确保它没有到达这些部分。请注意,如果您启动AsyncTask,则不会看到该按钮挂起。这是一件好事。要记录...'Log.w(“ClassName”,message);' – JRomero

+0

另外,为什么睡觉? – JRomero

回答

0

我记录的例外,它给我的错误:现在我的应用程序工作

Class.forName ("com.mysql.jdbc.Driver").newInstance(); 

所以这一切,:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

解决的办法是添加的newInstance中的Class.forName正如我的意图。谢谢你的一切!