Java 列计数不为';插入mysql时,第1行的值计数不匹配
我试图在表名、电子邮件和密码中插入三个值(我知道我没有对此进行哈希运算,我只是先测试它是否有效)。它告诉我列数不匹配,但名称和列数确实匹配,我不知道会出现什么问题 这是主要活动Java 列计数不为';插入mysql时,第1行的值计数不匹配,java,mysql,Java,Mysql,我试图在表名、电子邮件和密码中插入三个值(我知道我没有对此进行哈希运算,我只是先测试它是否有效)。它告诉我列数不匹配,但名称和列数确实匹配,我不知道会出现什么问题 这是主要活动 package ie.example.artur.adminapp; import android.os.AsyncTask; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import andr
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);}
}
}
包ie.example.artur.adminapp;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.design.widget.FloatingActionButton;
导入android.support.design.widget.Snackbar;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.view.view;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.Statement;
公共类MainActivity扩展了AppCompatActivity{
EditText editTextName、editTextEmail、editTextPassword;
文本视图文本视图;
私有静态最终字符串DB_URL=“jdbc:mysql://192.168.1.6/socialmedia_website";
私有静态最终字符串USER=“zzz”;
私有静态最终字符串传递=“zzz”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
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);
设置支持操作栏(工具栏);
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Snackbar.make(查看“替换为您自己的操作”,Snackbar.LENGTH\u LONG)
.setAction(“Action”,null).show();
}
});
}
公共无效BTNCON(视图){
Send objSend=new Send();
objSend.execute(“”);
}
私有类发送扩展异步任务
{
字符串msg=“”;
字符串名称=editTextName.getText().toString();
字符串email=editTextEmail.getText().toString();
字符串密码=editTextPassword.getText().toString();
@凌驾
受保护的void onPreExecute(){
setText(“请等待插入数据”);
}
@凌驾
受保护的字符串背景(字符串…字符串){
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
Connection conn=DriverManager.getConnection(DB_URL,USER,PASS);
如果(conn==null){
msg=“连接出错”;
}否则{
String query=“插入test1(名称、电子邮件、密码)值(“+name+”、“+email+”、“+password+”)”;
语句stmt=conn.createStatement();
stmt.executeUpdate(查询);
msg=“插入成功!!”;
}
康涅狄格州关闭();
}
抓住(
例外情况e
)
{
msg=“连接出错”;
e、 printStackTrace();
}
返回味精;
}
@凌驾
受保护的void onPostExecute(字符串msg){textView.setText(msg);}
}
}
phpmyadmin中数据库中的表:
错误:
行:
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)”指定的列。但是,因为您将名称+电子邮件+密码连接在一起,所以只插入了一个值(连接的结果),而不是三个单独的值。打印出“查询”字符串,您将很快掌握差异。行:
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)”指定的列。但是,因为您将名称+电子邮件+密码连接在一起,所以只插入了一个值(连接的结果),而不是三个单独的值。打印出“query”字符串,您将很快理解其中的差异。您的查询会导致逗号(“,”)错误,空格请尝试上面的代码
String query = "Insert INTO test1 (name,email,password) VALUES('"+name+","+email+","+password+"')";
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);
msg = "Inserting Successful!!";
String query= "Insert into table (name,email,password) Values(?,?,?)";
Statement st = conn.preparedStatement(query);
st.setString(1, name);
st.setString(2, email);
st.setString(3, password);
现在,使用准备好的语句尝试使用上述代码
String query = "Insert INTO test1 (name,email,password) VALUES('"+name+","+email+","+password+"')";
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);
msg = "Inserting Successful!!";
String query= "Insert into table (name,email,password) Values(?,?,?)";
Statement st = conn.preparedStatement(query);
st.setString(1, name);
st.setString(2, email);
st.setString(3, password);
您的查询会导致逗号(“,”)和空格错误,请尝试上面的代码
String query = "Insert INTO test1 (name,email,password) VALUES('"+name+","+email+","+password+"')";
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);
msg = "Inserting Successful!!";
String query= "Insert into table (name,email,password) Values(?,?,?)";
Statement st = conn.preparedStatement(query);
st.setString(1, name);
st.setString(2, email);
st.setString(3, password);
现在,使用准备好的语句尝试使用上述代码
String query = "Insert INTO test1 (name,email,password) VALUES('"+name+","+email+","+password+"')";
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);
msg = "Inserting Successful!!";
String query= "Insert into table (name,email,password) Values(?,?,?)";
Statement st = conn.preparedStatement(query);
st.setString(1, name);
st.setString(2, email);
st.setString(3, password);
您是否可以尝试在此处添加分隔的值,并将其插入test1(名称、电子邮件、密码)值(““+name+email+password+”)“。在这里,它将作为一个单独的值。您不应该用逗号分隔查询中的值吗?@Raghavendra是的,我可以添加一个值,但我要添加三个值。您正在对三列传递一个值。尝试用逗号分隔值。@请检查单引号。复制并粘贴废弃答案并尝试在此处添加分隔的值插入test1(名称、电子邮件、密码)值(“+name+email+password+”)”。在此处它将作为单个值。您不应该用逗号分隔查询中的值吗?@Raghavendra是的,我可以添加一个值,但我要添加三个值您是p