我正在尝试将三个值插入到表名、电子邮件和密码中(我知道我没有这个散列,我只是先测试它看看它是否有效)。它告诉我列数不匹配,但名称和列数匹配,我不知道可能是什么问题。
这是 MainActivity
package ie.example.artur.adminapp;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
EditText editTextName,editTextEmail,editTextPassword;
TextView textView;
private static final String DB_URL = "jdbc:mysql://192.168.1.6/socialmedia_website";
private static final String USER = "zzz";
private static final String PASS = "zzz";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
textView = (TextView) findViewById(R.id.textView);
editTextName = (EditText) findViewById(R.id.editTextName);
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
editTextPassword = (EditText) findViewById(R.id.editTextPassword);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
public void btnConn(View view) {
Send objSend = new Send();
objSend.execute("");
}
private class Send extends AsyncTask<String, String, String>
{
String msg = "";
String name = editTextName.getText().toString();
String email = editTextEmail.getText().toString();
String password = editTextPassword.getText().toString();
@Override
protected void onPreExecute() {
textView.setText("Please Wait Inserting Data");
}
@Override
protected String doInBackground(String... strings) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
if (conn == null) {
msg = "Connection goes wrong";
} else {
String query = "Insert INTO test1 (name,email,password) VALUES('"+name+","+email+","+password+"')";
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);
msg = "Inserting Successful!!";
}
conn.close();
}
catch(
Exception e
)
{
msg = "Connection goes Wrong";
e.printStackTrace();
}
return msg;
}
@Override
protected void onPostExecute(String msg) {textView.setText(msg);}
}
}
最佳答案
行:
String query = "Insert INTO test1 (name,email,password) VALUES('" + name+email+password+"')";
实际上应该是:
String query = "Insert INTO test1 (name,email,password) VALUES('" + name+"','"+email+"','"+password+"')";
您只插入了一个值,即 name+email+password 值的串联,而实际上您打算插入三个单独的值。
当您编写“Insert INTO test1 (name,email,password)”时,这意味着您将向“test1”中插入 3 个值,“(name,email,password)”指定的每一列都有一个值”。但是,因为您连接了名称+电子邮件+密码,所以您只插入了一个值(连接的结果)而不是三个单独的值。打印出“查询”字符串,您将很快掌握其中的区别。
关于java - 插入 mysql 时,列数与第 1 行的值数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142094/