JDBC 小结
1
ResultSetMetaData metaData = resultSet.getMetaData();
-
获取列数
int columnCount = metaData.getColumnCount(); -
获取列名
//需要一个下标,下标从1开始。 String columnName = metaData.getColumnName(index); -
获取列的别名
//同样需要下标。 String columnLabel = metaData.getColumnLabel(index); -
必须在声明sql时,使用类属性名来命名字段的别名。
-
使用
ResultSetMetaData时,需要使用getColumnName时使用getColumnLabel代替。 -
如果字段没有别名,
getColumnLabel仍然可以获取列名

-
针对于不同表的通用的查询操作
public <T> T forAllQuery(Class<T> clazz,String sql,Object...args){ try{ //获取连接 Connection connection = MysqlUtil.getConnection(); //预编译sql语句 PreparedStatement preparedStatement = connection.prepareStatement(sql); //填充占位符 for (int i = 0; i < args.length; i++) { preparedStatement.setObject(i+1,args[i]); } //执行executeQuery ResultSet resultSet = preparedStatement.executeQuery(); //获取列数 ResultSetMetaData rsmd = resultSet.getMetaData(); int columnCount = rsmd.getColumnCount(); //创建集合对象 List list = new ArrayList(); if (resultSet.next()){ //创建相应类的对象 T t = clazz.newInstance(); for (int i = 0; i < columnCount; i++) { //获取列值 Object columnValue = resultSet.getObject(i + 1); //获取列名(别名) String columnLabel = rsmd.getColumnLabel(i + 1); //使用反射给指定对象赋值 Field field = clazz.getDeclaredField(columnLabel); field.setAccessible(true); field.set(t,columnValue); } list.add(t); } return list; }catch (Exception e){ e.printStackTrace(); }等学到反射再回来看
-
为什么PreparedStatement可以解决SQL注入
-
因为PreparedStatement进行了预编译,将sql语句的逻辑进行了确定
-
PreparedStatement可以来操作Blob类型的文件
-
PreparedStatement可以进行更高效的批量操作。
2 小结及课后练习
练习题1:从控制台向数据库的表customers中插入一条数据,表结构如下:

Connection connection = MysqlUtil2.getConnection();
String sql = "INSERT INTO customers Values(null,?,?,?,null)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,username);
preparedStatement.setString(2,email);
preparedStatement.setString(3,birthday);
preparedStatement.executeUpdate();
练习题2:创立数据库表 examstudent,表结构如下:

向数据表中添加如下数据:

代码实现1:插入一个新的student 信息
请输入考生的详细信息
Type:
IDCard:
ExamCard:
StudentName:
Location:
Grade:
信息录入成功!
//使用增删改的通用模板进行操作。
String sql = "INSERT INTO examstudent Values(null,?,?,?,?,?,?)";
testUpdate(sql,type,idCard,examCard,studentName,locatin,grade);

浙公网安备 33010602011771号