2016-05-09 3 views
0
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 я получаю некоторые значения, но есть исключения говорят, что: «d_f» поле не имеет value.Getting по умолчанию следующего вывода в трассировка стека: ->Вставка записей в MySQL с помощью Java

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

Является ли мое заявление вставки неправильным или форматируемым?

+1

- столбец d_f, не имеющий значения NULL, в таблице, в которую вы пытаетесь вставить запись? –

+0

Да, я принял d_f в качестве даты – joe

+2

, если вы хотите, чтобы это поле было необязательным при вставке, тогда значение параметра равно нулю в вашей таблице или значение по умолчанию – Abubakkar

ответ

2

Как упоминалось в вашем комментарии, d_f - столбец в вашей таблице.

Так что, я думаю, он определен как Not-Nullable в вашей таблице без значения по умолчанию.

два возможных решения:

  1. Если вы хотите сохранить это поле в качестве дополнительного при выполнении вставки, сделать его обнуляемым в таблице
  2. Если вы хотите, чтобы он не пустой, дают его значение по умолчанию (либо на уровне кода, либо на уровне базы данных).
4

Это именно то, что говорит ошибка. у вас есть поле под названием d_f в вашей таблице, но вы не вставляете ничего в этот столбец с этим выражением, созданным вашим кодом.

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

Поскольку значение по умолчанию не specied для этого столбца базы данных не знает, что делать, и возвращает эту ошибку.

У вас есть два варианта, изменить таблицу, чтобы создать значение по умолчанию или передать значение некоторой по умолчанию следующим образом

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

Третий вариант является для изменения таблицы, чтобы позволить аннулирует как это было предложено @ chris569 и, как @ tim-biegeleisen указывает, что лучше делать это на уровне базы данных, а не в вашем Java-коде.

+1

Или разрешите NULL для d_f – chris579

+1

Я голосую за обработку этого на уровне базы данных, если это вообще возможно, так что вам не нужно воспроизводить логику в нескольких местах вашего кода. –

0

Похоже, «d_f» представляет собой столбец в таблице, которая не является обнуляемым,

Есть три возможных пути решения этой проблемы

  1. сделать этот столбец nullable
  2. Укажите значение по умолчанию для этого столбца, например текущую временную метку
  3. Положите некоторую ценность для th в колонке при вставке записей
0

Возможно, у вашего запроса может быть проблема. Почему бы вам не попробовать, создав подготовленный оператор, а не как ниже.

`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); ` 
+0

Я не даю здесь одного значения для a, b и c здесь Я пытаюсь напечатать строку массива, поэтому невозможно написать одно значение, подобное этому + "(a, b, c)" + "VALUES" + "(?,?,?)"; – joe