在获得数据库连接后,紧接着就是执行SQL语句。这里用到俩个类:Statement和PreparedStatement
一、Statment
Statement提供了以下方法用来执行SQL语句:
* executeQuery(String sql):执行一条SQL查询语句,返回查询结果对象(ResultSet)
* executeUpdate(String sql):执行一条SQL更新,插入,删除操作语句。* execute(String sql):执行一条SQL语句
*close():关闭Statement。和Connection一样,Statement使用后也需要关闭。
*注意:Statement通过connection的createStatement方法获得。
以下为执行SQL语句示例:
Statement statement=connection.createStatement();
String sql="insert into table_01 values('呵呵',1,'男'),('哈哈',2,'女'),('嘿嘿',3,'男')";
statement.executeUpdate(sql);
sql="delete from table_01 where id=3";
statement.executeUpdate(sql);
sql="update table_01 set id=3,name='hh' where id=2";
statement.executeUpdate(sql);
//使用后一定要关闭
connection.close();
statement.close();
二、PreparedStatement
ProparedStatement:是Statement的子接口,同样用来执行SQL语句,比Statement书写方便
ProparedStatement的优点:
* 1、书写方便,先写好SQL语句再设置参数。如:INSERT INTO table VALUES(?,?,?...),不用拼写SQL语句
* 2、防止SQL注入(这点很重要)
* 注意:在开始就赋入sql语句(此时的sql语句可以设置未知参数,通过?设置),后通过SetObject(int index,Object obj)设置sql语句里的参数,索引从1开始
PreparedStatement提供了三个方法:
setXxx():设置SQL语句里的参数,Xxx为参数的类型
executeUpdate():参数设置完毕后,执行插入、删除、更新的sql语句。
executeQuery():参数设置完毕后,执行查询的sql语句,返回结果对象(ResultSet)
以下为使用示例:
String sql="insert into table_01 values(?,?,?)";
PreparedStatement preparedstatement=connection.prepareStatement(sql); //需要提前设置好SQL语句
//设置SQL里的参数(索引从1开始)
preparedstatement.setString(1,"张天笑");
preparedstatement.setInt(2,2);
preparedstatement.setString(3,"女");
//直接executeUpdate()方法,不用传入SQL语句
preparedstatement.executeUpdate();
不要求掌握知识:即在插入时获得主键
//获得主键
String sql="INSERT INTO table_01(name,sex) VALUES(?,?)";
Connection connection=JDBCTools.getConnection();
//设置好PreparedStatement是返回主键类型
PreparedStatement preparedstatement=
connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
preparedstatement.setObject(1,"王富贵");
preparedstatement.setObject(2, "男");
preparedstatement.executeUpdate();
ResultSet resultset=preparedstatement.getGeneratedKeys();
ResultSetMetaData resultsetmetadata=resultset.getMetaData();
System.out.println(resultsetmetadata.getColumnName(1));
while(resultset.next()) {
System.out.println(resultset.getObject(1));
}
JDBCTools.release(connection, preparedstatement,resultset);