繁体   English   中英

使用Java将记录插入mysql

[英]Inserting records into mysql using java

package Simple;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;


public class CheckJdbc {

  private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
  private static final String DB_CONNECTION = "jdbc:mysql://localhost:3306/db";

  private static final String DB_USER = "root";
  private static final String DB_PASSWORD = "root";

  private static int RECORD_COUNT = 1;
  static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
  static final String DATE_FORMAT = "yyyy-MM-dd";
  static final String TIME_FORMAT = "HH:mm:ss";
  private static final int ADD_MINUTES = 2;
  static final String FromDate = "2016-01-01 00:00:00";

  @SuppressWarnings("unused")
public static void main(String[] args) throws Exception {

    List<String> records = new ArrayList<String>();
    StringBuffer record = new StringBuffer();
    DateFormat d_f = new SimpleDateFormat(DATE_FORMAT);
    @SuppressWarnings("unused")
    DateFormat tf = new SimpleDateFormat(TIME_FORMAT);
    Calendar cal = Calendar.getInstance();
    cal.setTime(d_f.parse(FromDate));
   // record.append("\t");
    for (int i = 1; i <= RECORD_COUNT; i++) {
        records = new ArrayList<String>(RECORD_COUNT);
      }
      for (int j = 0; j < 5; j++) {

          int a2 = 230 + j % 15; // 230 - 244 by 1
          String wString = Integer.toString(a2);
          String a = String.valueOf(a2);
          record.append(a+" ");            
          double b2 = 1.3 + j % 17 ; // 1.3 - 2.9 by 0.1 
          String aString = Double.toString(b2);
          String b = String.valueOf(b2);
          record.append(b+" ");  
          double c2 = 0.01 + j % 49 * 0.01; // 0.01 - 0.49 by 0.01
          String bString = Double.toString(c2);
          String c = String.valueOf(c2);
          record.append(c+" ");         

      record.append((d_f.format(cal.getTime()))+" "+tf.format(cal.getTime())+" ");

        record.delete(0, record.length());
        record.append(a + "," + b + "," + c );
        record.append("\t\t");

        record.append("\n");
        cal.add(Calendar.MINUTE, ADD_MINUTES);
        records.add(record.toString());

    try {
        String insertTableSQL = "INSERT INTO cmd"
                + "(a, b, c) " + "VALUES"
                + "("+record.toString()+")";
            System.out.println("insertTableSQL - " + insertTableSQL);     
            Statement.executeUpdate(insertTableSQL);

      insertRecordIntodb();
      Connection dbConnection = null;
      Statement statement = null;
      dbConnection = getDBConnection();
      statement = dbConnection.createStatement();
      System.out.println(insertTableSQL);
      // execute insert SQL stetement
      statement.executeUpdate(insertTableSQL);
      System.out.println(insertTableSQL);
      System.out.println("Record is inserted into Db table!");
    } catch (SQLException e) {
      System.out.println(e.getMessage());
    } finally {
    }
  }
    }

  private static void insertRecordIntodb() {

  }

  private static Connection getDBConnection() {
    Connection dbConnection = null;
    try {
      Class.forName(DB_DRIVER);
    } catch (ClassNotFoundException e) {
      System.out.println(e.getMessage());
    }
    try {
      dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
      return dbConnection;
    } catch (SQLException e) {
      System.out.println(e.getMessage());
    }
    return dbConnection;
  }
} 

我正在尝试将数据插入mysql db中,但我得到了一些值,但有一个例外说:Field'd_f'没有默认值。在堆栈跟踪中获取以下输出:->

INSERT INTO cmd(a, b, c) VALUES(233,4.3,0.040)
    Field 'd_f' doesn't have a default value

我的插入语句是否错误或格式?

错误恰恰说明了这一点。 您的表中有一个名为d_f的字段,但没有使用代码生成的此语句在该列中插入任何内容。

INSERT INTO cmd(a, b, c) VALUES(233,4.3,0.040)

由于尚未为该列指定默认值,因此数据库不知道该怎么做并返回此错误。

您有两个选择,可以更改表以创建默认值,或者按如下所示传递一些默认值

INSERT INTO cmd(a, b, c, d_f) VALUES(233,4.3,0.040,'some default')

第三种选择是按照@ chris569的建议修改表以允许空值,正如@ tim-biegeleisen指出的那样,确实最好在数据库级别而不是在Java代码中执行此操作。

如您的注释中所述, d_f是表中的一列。

因此,我认为它在表中被定义为不可为空,没有默认值。

两种可能的解决方案

  1. 如果要在插入时将该字段保留为可选字段,请使其在表中为空
  2. 如果希望它不为null,则为其提供默认值(在代码级别或数据库级别)。

似乎“ d_f ”是表中的一列,不能为空,

有三种方法可以解决此问题

  1. 使该列可为空
  2. 为该列提供一些默认值,例如当前时间戳
  3. 在插入记录时为该列添加一些值

您的查询可能有问题。 您为什么不尝试通过创建如下所示的预备语句来尝试。

    `String a = "somevalue";
String b = "somevalue";

String c = "somevalue";

String insertTableSQL = "INSERT INTO cmd"
                    + "(a, b, c) " + "VALUES"
                    + "(?, ?, ?)";
                System.out.println("insertTableSQL - " + insertTableSQL);    
 Statement.executeUpdate(insertTableSQL,a,b,c); `

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM