package metadata; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql.PreparedStatement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; import util.SQLUtil; /** * 参数元数据: * * @author mzy * */ public class Demo02 { public static void main(String[] args) throws Exception { // easyUse(); // insert(); // update(); } private static void update() { SQLUtil.update("update student set name=?, gender=? where id=?", new Object[]{"Lily", "男", 3}); } private static void insert() { SQLUtil.update("insert into student(id, name, gender, score, birth) values (?, ?, ?, ?, ?)", new Object[]{3, "lucy", "女", 90, "2018-05-04"}); } private static void easyUse() throws Exception { DataSource ds = new ComboPooledDataSource(); Connection conn = ds.getConnection(); String sql = "insert into student(id, name, gender, score, birth) values(?, ?, ?, ?, ?)"; // 预编译sql PreparedStatement stmt = conn.prepareStatement(sql); // 参数赋值 /* stmt.setInt(1, 1); stmt.setString(2, "mzy"); stmt.setString(3, "男"); stmt.setDouble(4, 99); stmt.setString(5, "2017-05-04"); int i = stmt.executeUpdate(); System.out.println(i+"行受到影响!"); */ // 知道预编译的sql有几个参数 // 得到参数元数据 ParameterMetaData metaData = stmt.getParameterMetaData(); // 得到sql中有几个参数 int count = metaData.getParameterCount(); System.out.println(count); Object[] values = new Object[]{2, "stu", "女", 100, "2018-05-04"}; // 有了参数元数据之后,就可以换一种方式进行赋值了 for(int i=0; i<count; i++) { stmt.setObject(i+1, values[i]); } stmt.executeUpdate(); System.out.println("插入成功!"); } }
其中部分已经封装到了SQLUtil中,请点击