【问题标题】:How to resolve NullPointerException error in android studio?如何解决 Android Studio 中的 NullPointerException 错误?
【发布时间】:2015-06-30 09:13:23
【问题描述】:

我正在尝试将我的 android 应用程序连接到 MS SQL Server 2008。我正在使用 Android Studio。这是我的MainActivity.java 文件:

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class MainActivity extends ActionBarActivity {

Button add;
TextView errorlbl;
EditText name, address, pincode;
Connection connect;
PreparedStatement preparedStatement;
Statement st;
String ipaddress, db, username, password;

@SuppressLint("NewApi")
private Connection ConnectionHelper(String user, String password,
                                    String database, String server) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    Connection connection = null;
    String ConnectionURL = null;
    try {
        Class.forName("net.sourceforge.jtds.jdbc.Driver");
        ConnectionURL = "jdbc:jtds:sqlserver://" + server + ";"
                + "databaseName=" + database + ";user=" + user
                + ";password=" + password + ";";
        connection = DriverManager.getConnection(ConnectionURL);
    } catch (SQLException se) {
        Log.e("ERRO", se.getMessage());
    } catch (ClassNotFoundException e) {
        Log.e("ERRO", e.getMessage());
    } catch (Exception e) {
        Log.e("ERRO", e.getMessage());
    }
    return connection;
}

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

    add = (Button) findViewById(R.id.btnadd);

    errorlbl = (TextView) findViewById(R.id.lblerror);

    name = (EditText) findViewById(R.id.txtname);
    address = (EditText) findViewById(R.id.txtaddress);
    pincode = (EditText) findViewById(R.id.txtpincode);

    ipaddress = "192.168.0.9";
    db = "mydatabase";
    username = "myusername";
    password = "mypassword";
    connect = ConnectionHelper(username, password, db, ipaddress);
    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            try {


      connect = ConnectionHelper(username, password, db, ipaddress);
      st = connect.createStatement();

                preparedStatement = connect
                        .prepareStatement("insert into studentRecord(Name,Address,Pincode) values ('"
                                + name.getText().toString()
                                + "','"
                                + address.getText().toString()
                                + "','"
                                + pincode.getText().toString() + "')");
                preparedStatement.executeUpdate();
                errorlbl.setText("Data Added successfully");
            } catch (SQLException e) {
                errorlbl.setText(e.getMessage().toString());
            }

        }
    });

}
}

但我收到以下错误:

java.lang.NullPointerException: Attempt to invoke interface method   'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at app.mysqlapp.MainActivity$1.onClick(MainActivity.java:77)

错误指向以下代码

st = connect.createStatement();

我该如何解决这个问题?

我已包含 jtds-1.2.7 jar 文件,并且已正确设置清单文件。

我是 Android 开发的初学者。请帮我解决这个问题。谢谢!

【问题讨论】:

    标签: java android sql-server-2008


    【解决方案1】:

    URL format for jTDS,是:

    jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]
    

    在您的字符串中有 2 个额外的 ; 和一个缺失的 /

    "jdbc:jtds:sqlserver://" + server + ";"     + "databaseName=" + database +
                                         ↑ here!   ↑ here!                                                                  
    
    ";user=" + user + ";password=" + password + ";";
                                                 ↑ here!
    

    我猜是这样的:

    "jdbc:jtds:sqlserver://" + server + "/databaseName=" + database + ";user=" + user + ";password=" + password;    
    

    您将解决您的问题...如果没有,请分享您的 ConnectionURL 字符串(System.out 或调试),我会仔细检查结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 2020-12-11
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多