JDBC总结(不定时更新)

来源:互联网 发布:linux message日志分析 编辑:程序博客网 时间:2024/04/28 23:26

那些名词:

  • JDBC API:应用程序开发者使用的api.
  • JDBC驱动管理器:Sun公司为第三方驱动程序提供的驱动管理器.
  • JDBC驱动程序:由第三方供应商提供的java与数据库连接的桥梁.
  • JDBC驱动api:Sun公司为数据库开发人员提供的驱动开发api.
    详情如下图所示:
    JDBC与数据库通信

JDBC配置:

  • 下载驱动,如mysql-connector*.jar等,为一个jar文件
  • 注册驱动器类:
    /*从供应商下载的驱动器类名为com.mysql.jdbc.Driver,    解压jar包可以找到Driver.class其路径即是名字*/    //法一:     Class.forName("com.mysql.jdbc.Driver");     //法二:     System.SetProperty("jdbc.drivers","com.mysql.jdbc.Driver");
  • 连接到数据库:
//mysql -->修改为你的数据库名字//127.0.0.1:3306 --> 访问数据库的地址//world访问的数据库的名字String url = "jdbc:mysql://127.0.0.1:3306/world";//数据库用户名,必须有权限访问worldString userName = "root";//数据库用户密码String password = "root";Connection conn = DriverManager.getConnection(url,userName,password);
  • 使用连接,以下详细讲解

  • 关闭连接

if(conn != null){    conn.close();}

使用数据库:

  • Statement的使用
//一个连接可以创建多个Statement,但每个Statement只能打开一个结果集Statement st1 = conn.createStatement();//执行查询只能使用executeQueryResultSet rs1 = st1.executeQuery("SELECT * FROM myTable");...//Statement与ResultSet使用完应该及时关闭rs1.close();st1.close();//执行其他操作使用executeUpdate,其不返回结果集Statement st2 = conn.createStatement();st2.executeUpdate("INSERT INTO myTable(name,age) values("haha",10)");
  • PreparedStatement:用于批量查询或更新等操作,每次操作只需重新设置?的值,然后查询即可
String preparedSql = "SELECT FROM myTable where age = ?",name = ?)PreparedStatement ps = conn.prepareStatement(preparedSql);//将第一个?设为24ps.setInt(1,24);//将第二个?设为"haha"ps.setObject(2,"haha");//执行查询ResultSet rs = ps.executeQuery();/*也可以 ps.execute();    rs = ps.getResultSet();*/
  • ResultSet:类似迭代器,但其初始位置指向第一行前,然后调用next()指向下一行(迭代器则是跨过下一行),若无下一行则next()方法返回false。所以第一行数据应该是rs.next()然后执行rs.getObject(index);而不是直接执行rs.getObject(index).index为查询行数据的列号,起始值为1。

注意事项:

  • Statement执行语句时,对于String变量应该用单引号包含,否则语句无法执行。
String name = "BOB";st.executeQuery("delete from message where name = '"+name+"')");
  • PreparedStatement采用预编译的形式,所以在多次执行的时候,效率明显高于Statement,但单条语句还是建议使用Statement。

  • 可滚动的结果集:默认情况下结果集将一直调用next()方法直到该方法返回false,不能回滚到上一行。

Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);rs = st.executeQuery();PreparedStatement st1 = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);rs1 = st1.executeQuery();/*则两个结果集均可调用previous()回滚到上一行,并可用relative(n),向下滚动|n|行(n>0)或回滚|n|行(n<0).absolute(x),将直接定位至第x行*/
  • 可更新的结果集:
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs = st.executeQuery();/*结果集可以调用rs.update("name","Bob");+rs.updateRow();更新行数据。可以调用rs.deleteRow()删除当前指针所指的行。调用getConcurency()查看当前结果集是否可更新。*/
0 0
原创粉丝点击