|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。上篇博客《深切浅出进修Hibernate框架(一):从实例动手初识Hibernate框架》复杂先容了一下Hibernate框架,而且举了一个实例来懂得Hibernate。这篇博客将先容JDBC的基础操纵,提及这JDBC,年夜部分程序员是已十分熟习了,为了我的Hibernate进修的连载,以是在这篇要复杂先容一下JDBC的有关操纵,由于这是Hibernate完成的基本,没有了JDBC也就没有了Hibernate框架,由于Hibernate框架是对JDBC做的高度封装。这篇博客次要先容JDBC创建数据库设置毗连和JDBC中的相干类和接口和JDBC各类操纵的完成。
但愿读者可以仔细的进修进修JDBC,基本的工具才是最主要的,没有基本别的统统都是浮云,固然这篇也是今后要深切进修Hibernate框架的基本和伏笔,但愿读者可以好勤学习一下。
先说甚么是JDBC,JDBC是由一组用java编写的类和接口的构成。在详细的开辟中,JDBC供应了一个尺度的API,有了它我们可以用JAVAAPI来编写数据库使用程序。
上面来讲怎样创建和设置毗连。数据库毗连是JDBC举行查询的先决前提,并且经由了开辟的伴侣门都晓得,如今支流的数据库都供应了自己公用的数据库毗连驱动,有了数据库毗连驱动给我们带来了很多匡助,可是也给我们带来了很多贫苦,比方版本不兼容等等成绩。
上面以Mysql为例来创建和设置毗连:1.到场驱动程序。拷贝Mysql的JDBC驱动到运转程序可以找到的目次
2.确保Mysql数据库处于运转形态(前两步是傻瓜式级其余操纵在这里就不先容了)
3.编写JDBC程序(在这里给出源代码) [java]
- importjava.sql.Connection;
- importjava.sql.DriverManager;
- importjava.sql.SQLException;
- publicclassDBUtil{
- /**
- *获得Connection
- *@return
- */
- publicstaticConnectiongetConnection(){
- Connectionconn=null;
- try{
- Class.forName("com.mysql.jdbc.Driver");
- Stringurl="jdbc:mysql://localhost:3306/User";
- Stringusername="root";
- Stringpassword="123";
- conn=DriverManager.getConnection(url,username,password);
- }catch(ClassNotFoundExceptione){
- e.printStackTrace();
- }catch(SQLExceptione){
- e.printStackTrace();
- }
- returnconn;
- }
- publicstaticvoidmain(String[]args){
- System.out.println("测试入手下手");
- System.out.println(DBUtil.getConnection());
- System.out.println("测试停止");
- }
- }
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassDBUtil{/***获得Connection*@return*/publicstaticConnectiongetConnection(){Connectionconn=null;try{Class.forName("com.mysql.jdbc.Driver");Stringurl="jdbc:mysql://localhost:3306/User";Stringusername="root";Stringpassword="123";conn=DriverManager.getConnection(url,username,password);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}returnconn;}publicstaticvoidmain(String[]args){System.out.println("测试入手下手");System.out.println(DBUtil.getConnection());System.out.println("测试停止");}}
了局截图:
<br>
上面先容一下JDBC接口:
JDBC接口是指举行数据库操纵供应的大众会见办法,利用这些办法能够简化对数据库的操纵,JDBC的接口放在了JDK中的java.sql包里。
截图:
<br>
这内里就先容几个对照重用的也是对照主要的几个接口和一个driverManager类。
<br>
下面一部分都是单调的观点和实际,上面来看看JDBC怎样使用这些接口和类来完成各类操纵的。
Statement和PreparedStatement:
Statement接口代表一个数据库的形态,在向数据库发送响应的SQL语句时分都要用这两个接口。而statement是操纵没有参数的sql语句,而preparedStatement便可以操纵有参数的,也能够操纵没有参数的,以是preparedStatement制止了sql注进成绩。
举例:
Statement源代码:
[java]
- importjava.sql.Connection;
- importjava.sql.SQLException;
- importjava.sql.Statement;
- publicclassStatementTest{
- publicstaticvoidmain(String[]args)throwsSQLException{
- Stringsql="insertintoUser(name,password,id)values(1,2,11111)";
- Connectionconn=DBUtil.getConnection();
- Statementstmt=conn.createStatement();
- stmt.executeUpdate(sql);
- System.out.println("实行乐成");
- }
- }
importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.Statement;publicclassStatementTest{publicstaticvoidmain(String[]args)throwsSQLException{Stringsql="insertintoUser(name,password,id)values(1,2,11111)";Connectionconn=DBUtil.getConnection();Statementstmt=conn.createStatement();stmt.executeUpdate(sql);System.out.println("实行乐成");}}
PreparedStatement源代码:
[java]
- importjava.sql.Connection;
- importjava.sql.PreparedStatement;
- importjava.sql.SQLException;
- importjava.sql.Statement;
- publicclassPreparedStatementTest{
- publicstaticvoidmain(String[]args)throwsSQLException{
- Stringsql="insertintoUser(name,password,id)values(?,?,?)";
- Connectionconn=DBUtil.getConnection();
- PreparedStatementpstmt=conn.prepareStatement(sql);
- pstmt.setString(1,"1");
- pstmt.setString(2,"2222");
- pstmt.setString(3,"3333");
- pstmt.executeUpdate();
- System.out.println("实行乐成");
- }
- }
importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.sql.Statement;publicclassPreparedStatementTest{publicstaticvoidmain(String[]args)throwsSQLException{Stringsql="insertintoUser(name,password,id)values(?,?,?)";Connectionconn=DBUtil.getConnection();PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.setString(1,"1");pstmt.setString(2,"2222");pstmt.setString(3,"3333");pstmt.executeUpdate();System.out.println("实行乐成");}}
ResultSet
ResultSet接口是查询了局集接口,它前往的了局集举行处置。
举例:
源代码:
[java]
- importjava.sql.Connection;
- importjava.sql.PreparedStatement;
- importjava.sql.ResultSet;
- importjava.sql.SQLException;
- publicclassResultSetTest{
- publicstaticvoidmain(String[]args)throwsSQLException{
- Stringsql="select*fromUserwhereid=?";
- Connectionconn=DBUtil.getConnection();
- PreparedStatementpstmt=conn.prepareStatement(sql);
- pstmt.setString(1,"11111");
- ResultSetrs=pstmt.executeQuery();
- if(rs.next()){
- System.out.println("name="+rs.getString("name"));
- System.out.println("password="+rs.getString("password"));
- }
- }
- }
importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassResultSetTest{publicstaticvoidmain(String[]args)throwsSQLException{Stringsql="select*fromUserwhereid=?";Connectionconn=DBUtil.getConnection();PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.setString(1,"11111");ResultSetrs=pstmt.executeQuery();if(rs.next()){System.out.println("name="+rs.getString("name"));System.out.println("password="+rs.getString("password"));}}}
了局:
<br>
ResultSetMetaData
ResultSetMetaData接口能够经由过程数组情势,遍历数据库的各个字段的属性,关于开辟者来讲,这个机制意义十分年夜。
举例:
源代码:
[java]
- importjava.sql.Connection;
- importjava.sql.ResultSet;
- importjava.sql.ResultSetMetaData;
- importjava.sql.SQLException;
- importjava.sql.Statement;
- publicclassResultSetMetaDataTest{
- publicstaticvoidmain(String[]args)throwsSQLException{
- Stringsql="select*fromUserorderbyid";
- Connectionconn=DBUtil.getConnection();
- //取得能够前后转动的范例
- Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
- ResultSetrs=stmt.executeQuery(sql);
- ResultSetMetaDatarsm=rs.getMetaData();
- System.out.println("共获的"+rsm.getColumnCount()+"列信息");
- for(inti=1;i<rsm.getColumnCount();i++){
- System.out.println("第"+i+"列的称号为"+rsm.getColumnName(i)+"范例为"+rsm.getColumnTypeName(i));
- }
- }
- }
importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;importjava.sql.Statement;publicclassResultSetMetaDataTest{publicstaticvoidmain(String[]args)throwsSQLException{Stringsql="select*fromUserorderbyid";Connectionconn=DBUtil.getConnection();//取得能够前后转动的范例Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSetrs=stmt.executeQuery(sql);ResultSetMetaDatarsm=rs.getMetaData();System.out.println("共获的"+rsm.getColumnCount()+"列信息");for(inti=1;i<rsm.getColumnCount();i++){System.out.println("第"+i+"列的称号为"+rsm.getColumnName(i)+"范例为"+rsm.getColumnTypeName(i));}}}
了局:
<br>
总结:
这一篇博客对JDBC、JDBC一些主要接口做了扼要的剖析,次要是为了让读者对JDBC有所懂得,对今后进修Hibernate有很年夜匡助,hibernate的操纵终极也是转换为jdbc的操纵。以是这篇博客的意义在于前面进修深切的引子。进修JDBC以后,鄙人一篇博客要先容java反射机制,由于这个常识也对今后深切进修Hibernate有十分年夜的匡助。敬请等候!
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听, |
|