我有一个问题,我正在尝试使用连接到MySQL数据库AsyncTask
。我在按钮事件中放入了连接代码,但这给了我错误,
这是代码:
package com.example.mysqlconnect;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final String url = "jdbc:mysql://cool/app";
private static final String user = "user";
private static final String pass = "password";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
Connect();
}
});
}
TextView tv = (TextView)this.findViewById(R.id.textView1);
private class Connect extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, pass);
// System.out.println("Database connection success");
String result = "Database connection success\n";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from users");
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()) {
result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n";
}
tv.setText(result);
}
catch(Exception e) {
e.printStackTrace();
tv.setText(e.toString());
}
return response;
}
@Override
protected void onPostExecute(String result) {
tv.setText(result);
}
}
public void Connect() {
Connect task = new Connect();
task.execute();
}
}
我是AsyncTask的新手,有人可以帮助我发现错误吗?
这是logcat:
10-23 19:08:41.168: W/dalvikvm(1514): threadid=1: thread exiting with uncaught exception (group=0xb40ca180)
10-23 19:08:41.178: E/AndroidRuntime(1514): FATAL EXCEPTION: main
10-23 19:08:41.178: E/AndroidRuntime(1514): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mysqlconnect/com.example.mysqlconnect.MainActivity}: java.lang.NullPointerException
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.ActivityThread.access$600(ActivityThread.java:123)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.os.Handler.dispatchMessage(Handler.java:99)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.os.Looper.loop(Looper.java:137)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.ActivityThread.main(ActivityThread.java:4424)
10-23 19:08:41.178: E/AndroidRuntime(1514): at java.lang.reflect.Method.invokeNative(Native Method)
10-23 19:08:41.178: E/AndroidRuntime(1514): at java.lang.reflect.Method.invoke(Method.java:511)
10-23 19:08:41.178: E/AndroidRuntime(1514): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-23 19:08:41.178: E/AndroidRuntime(1514): at dalvik.system.NativeStart.main(Native Method)
10-23 19:08:41.178: E/AndroidRuntime(1514): Caused by: java.lang.NullPointerException
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.Activity.findViewById(Activity.java:1794)
10-23 19:08:41.178: E/AndroidRuntime(1514): at com.example.mysqlconnect.MainActivity.<init>(MainActivity.java:51)
10-23 19:08:41.178: E/AndroidRuntime(1514): at java.lang.Class.newInstanceImpl(Native Method)
10-23 19:08:41.178: E/AndroidRuntime(1514): at java.lang.Class.newInstance(Class.java:1319)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
10-23 19:08:41.178: E/AndroidRuntime(1514): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
我在创建时删除了第二个,现在在logcat中收到此错误:
10-23 19:10:29.129: E/AndroidRuntime(1565): FATAL EXCEPTION: main
10-23 19:10:29.129: E/AndroidRuntime(1565): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mysqlconnect/com.example.mysqlconnect.MainActivity}: java.lang.NullPointerException
您的错误是:TextView tv = (TextView)this.findViewById(R.id.textView1);
因为它是在之外声明的onCreate
。
因此,这是您必须做的,TextView tv;
在上面声明onCreate
。然后在里面onCreate
添加tv = (TextView) findViewById(R.id.textView1);
并删除以下项的重复项:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
主要内容:我是该用 MySQLi ,还是 PDO?,MySQLi 和 PDO 连接 MySQL 实例,MySQLi 安装,PDO 安装,连接 MySQL,实例 (MySQLi - 面向对象),实例 (MySQLi - 面向过程),实例 (PDO),关闭连接,实例 (MySQLi - 面向对象),实例 (MySQLi - 面向过程),实例 (PDO)PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP D
主要内容:左连接,右连接在《 MySQL内连接》一节我们了解了 MySQL 的内连接。内连接的查询结果都是符合连接条件的记录,而外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。 外连接可以分为左外连接和右外连接,下面根据实例分别介绍左外连接和右外连接。 左连接 左外连接又称为左连接,使用 LEFT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。 左连接的语法格式
在《 MySQL交叉连接》一节中我们了解了 MySQL 的交叉连接,本节主要介绍多表查询的另一种方式——内连接。 内连接(INNER JOIN)主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接。简单来说,就是利用条件表达式来消除交叉连接的某些数据行。 内连接使用 INNER JOIN 关键字连接两张表,并使用 ON 子句来设置连接条件。 如果没有连接条件,INNER JOIN 和
本章节我们将为大家介绍如何使用 Node.js 来连接 MySQL,并对数据库进行操作。 如果你还没有 MySQL 的基本知识,可以参考我们的教程:MySQL 教程。 本教程使用到的 Websites 表 SQL 文件:websites.sql。 安装驱动 本教程使用了淘宝定制的 cnpm 命令进行安装: $ cnpm install mysql 连接数据库 在以下实例中根据你的实际配置修改数
我使用了以下命令进行端口映射 其中3306端口属于本地主机MySQL,33060是进入docker容器的端口,因此docker中的3306:33060之间正在进行通信。我的问题如下: docker:守护进程的错误响应:驱动程序未能在endpointApp1上编程外部连接(30EC933973ACF63A48EF9A20B0027AF18BD23E1F36CF852E3758EAA1F843):启动
问题内容: 我一直在localhost上建立一个网络,当我尝试在主机上移动它时,它显示了很多错误。似乎无法连接到我的本地数据库。这是代码: 这是输出: 感谢帮助 问题答案: 这是mysql用户权限问题。例如,使用phpmyadmin创建一个新用户,如果从localhost连接,则将其主机设置为localhost;如果从外部连接,则将其主机设置为%。
问题内容: 我试图弄清楚如何构造我的应用程序以最有效地使用MySQL。我正在使用node- mysql模块。这里的其他线程建议使用连接池,因此我设置了一个小模块mysql.js 现在,每当我要查询mysql时,我都需要此模块,然后查询数据库 这是好方法吗?除了非常简单的示例(其中所有操作均在主app.js脚本中完成)之外,我真的找不到太多的使用mysql连接的示例,因此我真的不知道约定/最佳实践是
主要内容:笛卡尔积前面所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 在 MySQL 中,多表查询主要有交叉连接、内连接和外连接。由于篇幅有限,本节主要讲解交叉连接查询。内连接和外连接将在《 MySQL内连接》和《 MySQL外连接》中讲解。 交叉连接(CROSS JOIN)一般用来返回连接表的笛卡尔积。 本节