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中我得到了一些值,但有例外说:字段'd_f'没有默认值。在堆栈跟踪中获取以下输出: - &gt;
INSERT INTO cmd(a, b, c) VALUES(233,4.3,0.040)
Field 'd_f' doesn't have a default value
我的插入声明是错误还是格式?
答案 0 :(得分:4)
这正是错误所说的。您的表中有一个名为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代码中执行此操作确实更好。
答案 1 :(得分:2)
正如评论中所述,d_f
是表格中的一栏。
所以我认为,它在你的表中被定义为Not-Nullable而没有默认值。
两种可能的解决方案:
答案 2 :(得分:0)
好像&#39; d_f &#39;是表中的一列,不可为空,
有三种方法可以解决此问题
答案 3 :(得分: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); `