java preparedstatement insert_获取最后一个插入的id--JDBC中Preparedstatement使用小结 及JDBC插入数据后获得Last insert ID...

编写SQL语句, 尤其是要插入多个Filed时, 是一件非常BT的事情, 至少让我很不爽,

使用preparedstatement可以使代码变得更优雅一些, 虽然会有些长, 但会更条理,

而且preparedstatement更高于SQL语句 – 相对来说不太容易随着数据库版本改变而变动.

另外preparedstatement效率更高, 安全性更好

下面是恐怖的SQL:

Statement statement = (Statement) conn.createStatement();

String sql = "INSERT INTO `DEP`.`employee` "

"( `name` , `age` , `address` , `isMale` , `level` ,

`Department_ID` ) "

"VALUES ("

"'" emp.getName() "', "

emp.getAge() ", "

JdbcUtilities.getSqlForString(emp.getAddress()) ", "

emp.getIsMale() ", "

emp.getLevel() ", "

emp.getDepartment_ID() ");"

;

log.debug("Executing sql :" sql);

statement.executeUpdate(sql);

ResultSet rs = statement.executeQuery("SELECT

last_insert_id();");// .execute("SELECT last_insert_id();");

if(rs.next()) {

System.out.println(rs.getInt("1"));

}

这里是使用PreparedStatement后的语句:

String psql = "INSERT INTO Employee (name, age, address, isMale,

level, Department_ID) VALUES (?, ?, ?, ?, ?, ?)";

PreparedStatement ps =

conn.prepareStatement(psql,Statement.RETURN_GENERATED_KEYS);

ps.setString(1, emp.getName());

ps.setInt(2, emp.getAge());

ps.setString(3, emp.getAddress());

ps.setInt(4, emp.getIsMale());

ps.setInt(5, emp.getLevel());

ps.setInt(6, emp.getDepartment_ID());

ps.executeUpdate();

ResultSet keys = ps.getGeneratedKeys(); // equivalent to "SELECT

last_insert_id();"

if(keys.next()) {

System.out.println(keys.getInt(1));

}

PreparedStatement的使用步骤:

声明 PreparedStatement。

PreparedStatement prepStmt;

将一条 SQL 语句指派给 PreparedStatement 对象。

prepStmt = conn.prepareStatement(

"INSERT INTO MyTable(MyColumn) values (?)");

为该语句指派输入参数值。

以下代码显示一个字符串参数。

String newValue;

// assign value

prepStmt.setStringParameter(1, newValue);

执行该语句。

返回值表示受该语句影响的行数。

long rowsInserted = prepStmt.executeStatement();

如果禁用了 [自动提交],请提交更改。

conn.commit();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值