我一直在尝试制作一个应用程序来连接到在 xampp 服务器上运行的数据库。过去我制作了一个 java 应用程序来执行此操作,我使用 JDBC 连接到数据库。我检查了这是否适用于android,我找到了一个在android上使用JDBC的教程,但它对我不起作用。我另外两次连接数据库的尝试是 HttpURLConnection 和 HttpClient 方法。我通过浏览找到的解决方案尚未解决我的问题。我尝试的两个解决方案是,编辑 xampp httpd-xampp.conf 以允许任何连接。第二个是在 PhpMyAdmin 权限部分为电话添加用户。我不知道我可以尝试哪些其他选择。谁能给我任何关于这个问题的建议。一个普通的java应用程序可以毫无问题地连接到服务器,我也可以在我的手机网络浏览器上访问服务器。只是应用程序无法建立连接。
编辑在我在这里找到的一个问题之后。我尝试使用 AsyncTask 使用 JDBC 连接到我的数据库,发布该问题的用户在建立连接时没有遇到问题。所以如果全班,我看不出我的代码在哪里出错了
应用代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
public class ViewCarsEntered extends Activity implements OnTouchListener
{
private TextView displayCars;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_cars_entered);
displayCars = (TextView)findViewById(R.id.carSpaceDisplay);
displayCars.setOnTouchListener(this);
}
/**
* Connect to the database
* @return String
*/
private class ConnectToDatabase extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... arg0)
{
String response = " ";
String total = "";
int rowCounter = 0;
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://server_ip:3306/dbname", "username", "password");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT VehicleDetected FROM entry");
while(resultSet.next())
{
rowCounter++;
}
total = Integer.toString(rowCounter);
response = " I am connected to the database";
Log.d("DebugTag", response);
}catch(Exception e){
response = "Couldn't get a connection";
Log.e("Error_Tag", response);
}
return response;
}
@Override
protected void onPostExecute(String result)
{
displayCars.setText(result);
}
}
/**
* Constructor for the AsynchronousTask inner Class
*/
public void ConnectToDatabase()
{
ConnectToDatabase connect = new ConnectToDatabase();
connect.execute();
}
@Override
public boolean onTouch(View v, MotionEvent event)
{
ConnectToDatabase();
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.view_cars_entered, menu);
return true;
}
}