JDBC总结(不定时更新)

那些名词:

  • 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";
//数据库用户名,必须有权限访问world
String userName = "root";
//数据库用户密码
String password = "root";
Connection conn = DriverManager.getConnection(url,userName,password);
  • 使用连接,以下详细讲解

  • 关闭连接

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

使用数据库:

  • Statement的使用
//一个连接可以创建多个Statement,但每个Statement只能打开一个结果集
Statement st1 = conn.createStatement();
//执行查询只能使用executeQuery
ResultSet 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);
//将第一个?设为24
ps.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值