我所创建的表:
create database mcs; use mcs; create table customer( customer_id int(8) primary key AUTO_INCREMENT, customer_name varchar(10), customer_sex varchar(2), customer_address varchar(50), id_type varchar(20), id_num varchar(20), customer_brithday date ); create table account( account_id int(8) primary key, contact_person varchar(10), contact_address varchar(50), account_balance double ); create table tuser( user_id int(8) primary key AUTO_INCREMENT, mobile_num varchar(11), roaming_state varchar(1), com_level varchar(1), customer_id int(8), account_id int(8), foreign key (customer_id) REFERENCES customer(customer_id), foreign key (account_id) REFERENCES account(account_id) );
运行程序:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import dao.MySqlDAOFactory; public class TuserTest { public static void main(String[] args){ String sql = "insert into tuser(mobile_num, roaming_state, com_level, customer_id, account_id) vlaues(?,?,?,?,?)"; Connection conn = MySqlDAOFactory.getConnection(); try { PreparedStatement stmt = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS); stmt.setString(1, "13752113210"); stmt.setString(2, "国内漫游"); stmt.setString(3, "国内长途"); stmt.setInt(4, 10000020); stmt.setInt(5, 30000001); stmt.executeUpdate();//这里出现了异常 //获得数据库自动产生的user_id ResultSet rs = stmt.getGeneratedKeys(); rs.next(); System.out.println(rs.getInt(1)); } catch (SQLException e) { e.printStackTrace(); } } }
所报错误:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'vlaues('13752113210','?????…??????','?????…é??é?”',10000020,30000001)' at line 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2934) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708) at com.mysql.jdbc.Connection.execSQL(Connection.java:3255)
向tuser表中插入的customer_id=10000020, account_id=30000001在customer表,account表中是存在的.不知道哪里出现了问题.
那位大侠给帮帮看看
问题补充:
roaming_state varchar(1),
com_level varchar(1),
我后来改了长度
roaming_state varchar(10),
com_level varchar(10),
还是同样的结果