0
私のAndroidプロジェクトに少し問題があります。 私のMySQLデータベースのデータをリストに入れたいのですが、アンドロイドはそれに接続しません。Android経由のMySQL接続エラー
MySQLConnector:
private static Connection con = null;
private static String dbHost = "85.214.101.213"; // changed the ip :)
private static String dbPort = "3306"; // Port -- Standard: 3306
private static String dbName = "ticketsystem"; // Datenbankname
private static String dbUser = "admin"; // Datenbankuser
private static String dbPass = "root"; // Datenbankpasswort
public static void conect() {
try {
Class.forName("com.mysql.jdbc.Driver"); // Datenbanktreiber für JDBC
System.out.println("jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName + "?" + "user="
+ dbUser + "&" + "password=" + dbPass);
con = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName + "?" + "user="
+ dbUser + "&" + "password=" + dbPass);
} catch (ClassNotFoundException e) {
System.out.println("Treiber nicht gefunden");
} catch (SQLException e) {
System.out.println(e);
System.out.println("Verbindung nicht moglich");
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
}
SQLManager:
public SQLManager() {
MySQLConnection.conect();
Log.e("test", "nach conect");
con = MySQLConnection.getCon();
}
public String[] getFreeEvents() {
ArrayList<String> mList = new ArrayList();
try
{
PreparedStatement ps = con.prepareStatement(" SELECT `EventID`,`Name`,`Zeit`,`Ort` FROM `event` WHERE `freeTickets` >= ?");
ps.setInt(1, 0);
ResultSet rs = ps.executeQuery();
while (rs.next())
{
int EventID = rs.getInt("EventID");
String Name = rs.getString("Name");
String Zeit = rs.getString("Zeit");
String Ort = rs.getString("Ort");
String info = Name +"," + Zeit + ","+Ort ;
mList.add(info);
System.out.println(info);
}
}
catch (SQLException e)
{
e.printStackTrace();
}
String[] array = mList.toArray(new String[0]);
return array;
}
And the Class form the Android activity:
Button b;
ListView list;
EditText vor;
TextView nach;
SQLManager man = new SQLManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_ticket);
setContentView(R.layout.activity_main);
b = findViewById(R.id.button);
b.setOnClickListener(this);
list = findViewById(R.id.list);
list.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, man.getFreeEvents())); //here is the SQL request...
vor = findViewById(R.id.editText);
nach = findViewById(R.id.editText2);
}
マイprobemはAndroidがconnctionを開くことができませんでしたということです。
は、ここに私のコードです。 私はAndroidのマニフェストに許可要求を追加しました:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
だから、少なくとも私はこのエラーを得た:
I/System.out: `com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.´
I/System.out: Verbindung nicht moglich
I/System.out: SQLException: Could not create connection to database server.
I/System.out: SQLState: 08001
I/System.out: VendorError: 0
E/test: nach conect
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ml.gottfried.myapp, PID: 10440
java.lang.RuntimeException: Unable to start activity ComponentInfo{ml.gottfried.myapp/ml.gottfried.myapp.NewTicket}: java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.PreparedStatement java.sql.Connection.prepareStatement(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.PreparedStatement java.sql.Connection.prepareStatement(java.lang.String)' on a null object reference
at ml.gottfried.myapp.SQLManager.getFreeEvents(SQLManager.java:82)
at ml.gottfried.myapp.NewTicket.onCreate(NewTicket.java:43)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
私はあなたが私に
感謝:)
を助けることを願ってPS:何か疑問がある場合はお問い合わせください:)
あなたのデータベースに接続できないことは明らかです。 この接続で作業を開始すると、NPEが表示されます。 デバイスが同じネットワーク内にあるかどうかを確認するのは大丈夫です –
大丈夫...今、私は通常のjavaでMySQLConnectorとSQLManagerをテストしました。ここでそれは正常に動作します...私の問題は、なぜ私は私のデータベースへの接続を取得しないか分からない...編集:私のデータベースは、外部サーバー上にあります。 –
あなたは完全なセットアップ/環境を私たちに提供できますか? –