【问题标题】:MySQL Java Data Insertion errorMySQL Java 数据插入错误
【发布时间】:2015-01-21 17:21:01
【问题描述】:

我正在尝试连接到 mySQL DB 并在我的 Java 应用程序中的 3 列 osName、version、notes 上执行插入操作。我下面的教程是http://alvinalexander.com/java/java-mysql-insert-example-preparedstatement。任何输入或 cmets 都有帮助。这是我的数据库信息 -

创建表oslog.entry ( osName VARCHAR(10) 非空, version VARCHAR( 10 ) NOT NULL , notes VARCHAR( 20 ) NOT NULL , 主键 (osName) ) 引擎 = InnoDB;

 package com.tutorialspoint.struts2;

 import java.sql.*;

 import com.opensymphony.xwork2.ActionSupport;

 public class HelloWorldAction extends ActionSupport{
private String osName;
private String version;
private String notes;

public String execute() throws Exception {
    return "success";
 }
{

        try
        {
            // created a datbase connection
            String myDriver = "org.gjt.mm.mysql.Driver";
            String myURL = "jdbc:mysql://localhost/HelloWorld";
            Class.forName(myDriver);
            Connection conn = DriverManager.getConnection(myURL, "root", "");

            //insert statement

            String query = "INSERT INTO oslog.entry (osName,version,notes " + 
            "values osName, version, notes";

            //mysql insert preparedstatement

            PreparedStatement preparedStmt = conn.prepareStatement(query);
            preparedStmt.setString(1, osName);
            preparedStmt.setString(2, version);
            preparedStmt.setString(3, notes);
            //excute the preparedstatement
            preparedStmt.execute();
            conn.close();

        }
        catch(Exception e)
        {
            System.err.println("Got an Exception!");
            System.err.println(e.getMessage());
        }


}




    public String getOsName() {
    return osName;
}
public void setOsName(String osName) {
    this.osName = osName;
}
public String getVersion() {
    return version;
}
public void setVersion(String version) {
    this.version = version;
}
public String getNotes() {
    return notes;
}
public void setNotes(String notes) {
    this.notes = notes;
}

public void validate()
{
    if (osName == null || osName.trim().equals(""))
    { 
        addFieldError("osName","The OS name is required");
    }
    if (version == null || version.trim().equals(""))
    {
        addFieldError("version","The OS version is required");
    }
}
}

【问题讨论】:

  • 我相信您在查询中的值周围需要圆括号;您还没有关闭第一个圆括号(围绕列名)。
  • 不返回错误。无论发生什么,我都有我的 jsp 和行动要成功。
  • 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“values null, null, null”附近使用正确的语法

标签: java mysql sql


【解决方案1】:

我看到你正在使用PreparedStatement 您需要将 query 字符串从:

 String query = "INSERT INTO oslog.entry (osName,version,notes " + 
        "values osName, version, notes";

 String query = "INSERT INTO oslog.entry(osName,version,notes) " + 
        "values (?, ?, ?)";

【讨论】:

  • 字符串查询 = "INSERT INTO oslog.entry(osName,version,notes)" + "values (?, ?, ?)";那并没有解决它。我没有出现任何错误。
【解决方案2】:

您使用的是PreparedStatement,因此您的查询应该有占位符。试试这个:

String query = "INSERT INTO oslog.entry (osName,version,notes) " + 
            "values (?, ?, ?)";

【讨论】:

  • “您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行的 'values null, null, null' 附近使用的正确语法”是错误我明白了。
  • @Kyas 那是因为你从来没有初始化你传递给preparedStmt的变量(osName,version,notes)并且你的表不接受null列。
  • 我可以更改我的表格,但我将如何初始化变量?
  • @Kyas 您没有使用我在回答中提到的字符串,您似乎在值之后缺少 '('。我相信您的 sql 字符串就像 "values ?, ?, ?"; 而不是“值(?,?,?)”;
  • 我已将操作文件更改为:String query = "INSERT INTO oslog.entry (osName,version,notes) " + "values (?, ?, ?)";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2017-03-08
  • 2012-01-25
相关资源
最近更新 更多