JDBC基础知识--Connection、ResultSet、ResultSetMetaData、DatabaseMetaData

时间:2022-05-14 12:03:26

        Java连接数据库-JDBC(Java DataBase Connectivity):为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。

一、JDBC使用步骤:
1.加载驱动:
以使用MYSQL为例,Class.forName("com.mysql.jdbc.Driver");
2.创建连接:
Connection con=DriveManager.getConnection("jdbc:mysql://localhost:3306/数据库名称");
3.创建执行SQL语句的对象(Statement/PreparedStatement):
1)Statement:Statement stmt=con.createStatement();
 存在问题:注入攻击
用户输入数据中注入非法的 SQL 语句段或命令,从而利用系统的 SQL 引擎完成恶意行为的做法
 解决方法:使用PreparedStatement就可以了。而且使用PreparedStatement代码的可读性和可维护性比较好
    2)PreparedStatement:PreparedStatement接口是Statement的子接口,它表示一条预编译过的SQL语句PreparedStatement对象所代表的SQL语句中的参数用问号(?)来表示,调用 PreparedStatement对象的setXXX()方法来设置这些参数。set方法有两个参数,第一个参数是要设置的SQL语句中的参数的索引(从1开始),第二个是设置的SQL语句中的参数的值

 //PreparedStatement对SQL语句先预编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
 String sql = "insert into student(sno,sname,sex,height,tel) "+ "values(default,?,?,?,?)";
 stmt = conn.prepareStatement(sql);
 stmt.setString(2, name);
 stmt.setString(3, sex);
 stmt.setDouble(4, height);
 stmt.setString(5, tel);
4.执行SQL语句,得到结果:
int rs=stmt.executeUpdate(sql); //增删改

Resultset re=stme.executeQuery(sql);//查

                        【注】:PreparedStatement要调用无参数的!!!!!Statement调用有参数的。

5.关闭连接:
con.close();
stmt.close();
二、ResultSet
数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet对象具有指向其当前数据行的指针,最初指针被置于第一行之前,next方法将指针移动到下一行。
其他常用方法:
void afterLast()将指针移动到此 ResultSet 对象的末尾,正好位于最后一行之后
boolean last()将指针移动到此 ResultSet 对象的最后一行。
void beforeFirst()将指针移动到此 ResultSet 对象的开头,正好位于第一行之前。
boolean first()将指针移动到此 ResultSet 对象的第一行。
int getXxx(int columnIndex) 以Xxx的形式检索此ResultSet对象的当前行中指定列的值。 
  int getXxx(String columnName) 以Xxx的形式检索此ResultSet对象的当前行中指定列的值。 
int getRow() 检索当前行编号 
ResultSetMetaData getMetaData() 检索此 ResultSet 对象的列的编号、类型和属性 
三、ResultSetMetaData
可用于获取关于ResultSet对象中列的类型和属性信息的对象。
常用方法:
int getColumnCount() 返回此 ResultSet 对象中的列数。
String getColumnName(int column) 获取指定列的名称。 
String getColumnTypeName(int column) 检索指定列的数据库特定的类型名称。
  int getColumnType(int column) 检索指定列的 SQL 类型。
int getColumnDisplaySize(int column) 指示指定列的最大标准宽度,以字符为单位。 
String getTableName(int column) 获取指定列所在表的名称。 
String getCatalogName(int column) 获取指定列所在数据库名称。  
  四、DatabaseMetaData
关于数据库的整体综合信息。 
DataBaseMetaData对象是在Connection对象上调用getMetaData获得的。
常用方法:
String getDatabaseProductName() 检索此数据库产品的名称 
String getDatabaseProductVersion() 检索此数据库产品的版本号。 
int getDatabaseMajorVersion() 检索底层数据库的主版本号。 
  int getDatabaseMinorVersion() 检索底层数据库的次版本号。 
五、多条SQL语句批处理
注意:批处理不同于事务,区分二者的不同。
①Statement
 Statement st=conn.createStatement();
 st.addBatch(sql1);
 st.addBatch(sql2);
 st.addBatch(sql3);
 st.executeBatch();
②PreparedStatement:只适用于结构相似的语句之间做批处理
 PreparedStatement pst=con.preparedStatement(sql1);
 for(int i=0;i<100;i++)
 {
pst.setInt(1,i);
....
pst.addBatch();
 }
 pst.executeBatch();