Jdbc的学习,全面总结

来源:互联网 发布:php开源文档管理系统 编辑:程序博客网 时间:2024/06/05 07:22

在JAVA学习中过程中,当你向数据库展开进攻的时候,第一个接触到的就应该是JDBC了。

下面是我当初学习的时候做的一些总结,不好的地方请指出。谢谢!!

一.JDBC连接实例(尽量把程序写完善)

1.读驱动
Class.forName()|Class.forName().newInstance()|new DriverName()
实例化时自动向DriverManager注册,不需显式调用DriverManager.registerDriver方法

2.连接数据库
DriverManager.getConnection()
例:
 Class.forName("oracle.jdbc.driver.OracleDriver");
 String url = "jdbc:oracle:thin:@localhost:1521:FOX";
 String user = "scott";
 String password = "tiger";
 Connection conn = DriverManager.getConnection(url, user, password);

3.执行SQL语句
Connection.CreateStatement()
Statement.executeQuery()
Statement.executeQuery()
例: Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("select * from emp");

4.循环返回结果集
while(rs.next()){
 
}

5.显示数据库数据
把数据库各种类型转换为JAVA的类型用get***()方法

例:
 while(rs.next()) {
  System.out.print(rs.getInt("EMPNO")+ " ");
  System.out.print(rs.getInt(8)+ " ");
 }
6.关闭资源
调用ResultSet|Statement|Connection 的close()方法
例:
 try {
  if (rs != null) {
   rs.close();
   rs = null;
  }
  if (stmt != null) {
   stmt.close();
   stmt = null;
  }
  if (conn != null) {
   conn.close();
   conn = null;
  }
 } catch (SQLException e) {
  e.printStackTrace();  
   }

二.JDBC进阶

1.prepareStatement接口--是Statement的子接口
可以再方便的书写SQL语句,用问号替换字段变量。

String sql = "insert into dept values (?,?,?)";
prepareStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,deptno);
pstmt.setString(2,dname);
pstmt.setString(3, loc);

pstmt.executeUpdate();

2.JDBC调用存储过程--用CallableStatement接口
继承来自Statement和prepareStatement接口

String sql = "{call p(?, ?, ?, ?)}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);

cstmt.execute();
System.out.println(cstmt.getInt(3));

3.JDBC批处理--用prepareStatement接口的addBatch();

String sql = "insert into dept values (?,?,?)";
prepareStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,87);
pstmt.setString(2,'haha');
pstmt.setString(3,'bj');
pstmt.addBatch();

pstmt.executeBatch();
pstmt.close();

4.JDBC处理Transaction
保证同时有效性。
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (51, 'GAME', 'FZ'));
...
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);

}catch(SQLException e) {
 e.printStackTrace();
 try{
  if(conn != null)
  {
   conn.rollback();
   conn.setAutoCommit(true);
  }
 }catch(){}
}

5.JDBC处理可以滚动的结果集
设置对滚动敏感不、只读
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("select * from emp order by sal");
rs.next();
System.out.println(rs.getInt(1)); //打印当前字段
rs.last(); //最后一条
System.out.println(rs.getString(1));
System.out.println(rs.isLast()); //是否为最后一条
System.out.println(rs.isAfterLast()); //是否为最后一条的下一条
System.out.println(rs.getRow()); //打印当前是第几条
rs.previous(); //滚动到前一条
rs.absolute(6); //滚动到第六条
System.out.println(rs.getString(1));
rs.close();

6.JDBC处理可更新的结果集 (不过有些数据库不支持像Oracle)
设置对滚动敏感不、可更新
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("select * from emp2");
rs.next();
//更新一行
rs.updateString("ename","AAAA");
rs.updateRow();

//插入新行
rs.moveToInsertRow();
rs.updateString("ename","AAA");
rs.updateInt("mgr",7893);
rs.insertRow();
//光标移到新建的行
rs.moveToCurrentRow();
//删除行
rs.absolute(5);
rs.deleteRow();

//取消更新
rs.cancelRowUpdate();

7.JDBC新增加接口
1).DataSource
DriverManager的替代,可以方便实现连接池和分布式(属性可以动态改变)。

2).RowSet
新的ResultSet
从ResultSet继承
支持断开的结果集
支持JavaBean标准,可以保持连接


三.JDBC连接池
1.启动Tomcat服务器,打开浏览器,输入http://localhost:8080/admin/ 登陆到管理界面,

选择Resources-Data sources进入配置数据源界面,选择Data Source Actions ->选择Create New Data Source,进入配置详细信息界面,内容如下:

JNDI Name: jdbc/mysql
Data Source URL: jdbc:mysql://192.168.0.16/SUBRDB
JDBC Driver Class: com.jdbc.mysql.Driver
User Name: root
Password: ****
Max. Active Connections: 4
Max. Idle Connections: 2
Max. Wait for Connection: 500
Validation Query:

要求输入的JNDI Name等信息,其中除了JDBC DriverClass之外,其他的可以根据你的需要填写。比如Data Source URL的内容可能是:jdbc:mysql:// IP或是名称/DataBaseName,其中DataBaseName是你的数据库名称,IP是你的数据库的所在的服务器的IP或是名称。最后点击Save->Commit Change.这样你的数据源的基本资料配置一半了。

2、 web.xml和%TOMCAT_HOME%/conf/Catalina/localhost下对应你的引用的配置文件修改

通过文件夹导航到%TOMCAT_HOME%/conf,打开web.xml,在</web-app>的前面添加以下内容:

<resource-ref>

<description>DB Connection</description>

<res-ref-name>jdbc/mysql</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>


注意res-ref-name填写的内容要与在上文提到的JNDI Name名称一致。

通过文件夹导航到%TOMCAT_HOME%/conf/Catalina/localhost下,找到你的web应用对应的.xml文件,如 ROOT.xml,并在此文件的下添入代码:

<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSourcer"/>

到这里,配置工作就基本完成了。

3.测试代码节选

<%
   out.print("我的测试开始");
   DataSource ds = null;
   try{

   InitialContext ctx=new InitialContext();
   ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
   Connection conn = ds.getConnection();
   Statement stmt = conn.createStatement();
   String strSql = " select * from users";
   ResultSet rs = stmt.executeQuery(strSql);
  
  while(rs.next()){
      out.print(rs.getString(1));                
     }
  }catch(....)

%>

总结:差不多到这里了。。感觉挺详细的。

现在都很少用这个了。都是用连接池,用Hibernate整合了。不过这个是最底层的吧。学了好处还是大大的有的。

 JDBC的速度好像是最快的。只是比较麻烦了。