问题描述
出现这个问题是我在连接数据使用语句查询的时候报的错误,当时反反复复检查线程里的数据库查询代码,一时没有发现问题。报的错误就是标题所述。
具体代码,当时也是立马到了85行代码这里(当然从代码的错误说明上也感觉是conn是空,后面有测试了一下,发现果然是这样。)
package com.example.mysqlconnectiontest;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button,button_delete,button_insert,button_update;
private TextView textView;
private static final int TEST_USER_SELECT = 1;
int i =0,d=0,z=0;
private EditText editText,editText_update;
private final static int SEARCH_MOHU =1;
String url,user_phonenumber;
private List<NewsBean.ResultBean.DataBean> list;
@SuppressLint("HandlerLeak")
private Handler searchHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case SEARCH_MOHU:
list = ((NewsBean) msg.obj).getResult().getData();
System.out.println("*&*&*&*&*&*&*&*&");
System.out.println(list.size());
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.bt_send);
textView = (TextView) findViewById(R.id.tv_response);
button_delete = (Button) findViewById(R.id.bt_delete);
button_insert = (Button) findViewById(R.id.bt_insert);
button_update = (Button) findViewById(R.id.bt_update);
editText_update = (EditText) findViewById(R.id.ed_update);
}
@Override
protected void onStart() {
super.onStart();
button.setOnClickListener(this);
button_delete.setOnClickListener(this);
button_insert.setOnClickListener(this);
button_update.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bt_send:
new Thread(new Runnable() {
@Override
public void run() {
NewsBean newsBean = new NewsBean();
List<NewsBean.ResultBean.DataBean> dataBeanList = new ArrayList<>();
Connection conn = null;
conn =(Connection) DBOpenHelper.getConn();
String sql ="select title from news_info where match(title,category) AGAINST ('体育' IN BOOLEAN MODE )";
Statement st;
try {
st = (Statement) conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while (rs.next()){
NewsBean.ResultBean.DataBean dataBean = new NewsBean.ResultBean.DataBean();
//下一行就是报错的位置
//
dataBean.setTitle(rs.getString(1));
//
dataBeanList.add(dataBean);
}
newsBean.setResult(new NewsBean.ResultBean());
newsBean.getResult().setData(dataBeanList);
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
Message msg = searchHandler.obtainMessage();
msg.what = SEARCH_MOHU;
msg.obj = newsBean;
searchHandler.sendMessage(msg);
}
}).start();
break;
default:
}
}
}
解决思路
既然他到这里就崩掉了,而且说是空对象,那我在上面弄一个判断来看一下是不是真的是这样。
修改部分代码(因为篇幅过长,就贴出改动的那部分了)
Connection conn = null;
conn =(Connection) DBOpenHelper.getConn();
if (conn ==null){
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
System.out.println(""+conn);
}
String sql ="select title from news_info where match(title,category) AGAINST ('体育' IN BOOLEAN MODE )";
Statement st;
控制台信息:
我在获取连接之后就判断conn是否为空如果为空的话,则说明是DBOPenHelper.getConn()方法里有错误。
点击蓝色的错误信息上的,DBOpenHelper.java: 20行,发现是conn出错,然后这个方法参数有三个url,user,password,最后发现是url出了错误,数据库test不存在,所以conn连接也不存在,到这里问题解决。
如果找到这里还是没有发现问题的话,检查一下驱动版本和数据库版本是不是大版本不一致。
欢迎一起讨论哦!