java - 插入 mysql 时,列数与第 1 行的值数不匹配

标签 java mysql

我正在尝试将三个值插入到表名、电子邮件和密码中(我知道我没有这个散列,我只是先测试它看看它是否有效)。它告诉我列数不匹配,但名称和列数匹配,我不知道可能是什么问题。

这是 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);}



    }




}

phpmyadmin中数据库中的表: enter image description here

错误: enter image description here

最佳答案

行:

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/

相关文章:

java - = java中的运算符

java - Tapestry 返回区和流响应

sql - LAMP 与 Hudson : How to run SQL Statement every hour

mysql - 如何向联合结果添加唯一列?

mysql - $this->db->insert_id() 在 mysql codeigniter 中不起作用

Mysql:在子表中插入一个新行,其中包含从父表获取的外键列以外的新值

java - 当构造函数中的局部变量和实例变量相同时,调用clone()是一个不错的选择

java - 空间计数器在 Java 中不起作用

java - 使用 synchronizedSet 同步两个线程之间的访问

mysql - 多列配置单元上的动态分区