goods表字段为number(文本,主键) name(文本) madeTime(日期) price(数字,双精度)
AddRecord.java
import java.sql.*;
public class AddRecord {
String databaseName=""; //数据库名
String tableName=""; //表名
String number="", //商品号
name="", //名称
madeTime; //生产日期
double price; //价格
public AddRecord() {
try{ Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
}
catch(ClassNotFoundException e) {
System.out.print(e);
}
}
public void setDatabaseName(String s) {
databaseName=s.trim();
}
public void setTableName(String s) {
tableName=s.trim();
}
public void setNumber(String s) {
number=s.trim();
}
public void setName(String s) {
name=s.trim();
}
public void setPrice(double n) {
price=n;
}
public void setMadeTime(String b) {
madeTime=b;
}
public String addRecord() {
String str="";
Connection con;
PreparedStatement sql; //预处理语句
try { String uri="jdbc:derby:"+databaseName+";create=true";
con=DriverManager.getConnection(uri);
String insertCondition="INSERT INTO "+tableName+" VALUES (?,?,?,?)";
sql=con.prepareStatement(insertCondition);
if(number.length()>0) {
sql.setString(1,number);
sql.setString(2,name);
sql.setString(3,madeTime);
sql.setDouble(4,price);
int m=sql.executeUpdate();
if(m!=0)
str="对表中添加"+m+"条记录成功";
else
str="添加记录失败";
}
else {
str="必须要有雇员号";
}
con.close();
}
catch(SQLException e) {
str="没有提供添加的数据或"+e;
}
return str;
}
}
Test.java
public class Example11_10 {
public static void main(String args[]) {
AddRecord insertRecord=new AddRecord();
String database="shop";
String tableName="goods";
insertRecord.setDatabaseName(database);
insertRecord.setTableName(tableName);
insertRecord.setNumber("D001");
insertRecord.setName("联想电脑");
insertRecord.setMadeTime("2015-12-10");
insertRecord.setPrice(5600);
String backMess=insertRecord.addRecord();
System.out.println(backMess);
}
}
为什么prepareStatement方法中insert语句的in参数,在set第三个日期时是setString而不是setDate,我知道madeTime定义是String类型,但是为什么可以用setString来对应日期类型字段?