您的位置:首页 > 其它

深入浅出学习Hibernate框架(二):JDBC基础操作

2012-03-24 21:36 555 查看
上篇博客《深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架》简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate。这篇博客将介绍JDBC的基本操作,说起这JDBC,大部分程序员是已经非常熟悉了,为了我的Hibernate学习的连载,所以在这篇要简单介绍一下JDBC的有关操作,因为这是Hibernate实现的基础,没有了JDBC也就没有了Hibernate框架,因为Hibernate框架是对JDBC做的高度封装。这篇博客主要介绍JDBC建立数据库配置连接和JDBC中的相关类和接口以及JDBC各种操作的实现。

希望读者能够认真的学习学习JDBC,基础的东西才是最重要的,没有基础其它一切都是浮云,当然这篇也是以后要深入学习Hibernate框架的基础和伏笔,希望读者能够好好学习一下。

先说什么是JDBC,JDBC是由一组用java编写的类和接口的组成。在具体的开发中,JDBC提供了一个标准的API,有了它我们能够用JAVA API来编写数据库应用程序。

下面来说如何建立和配置连接。数据库连接是JDBC进行查询的先决条件,而且经过了开发的朋友门都知道,现在主流的数据库都提供了本身专用的数据库连接驱动,有了数据库连接驱动给我们带来了不少帮助,但是也给我们带来了许多麻烦,例如版本不兼容等等问题。

下面以Mysql为例来建立和配置连接:

1. 加入驱动程序。拷贝Mysql的JDBC驱动到运行程序能够找到的目录

2. 确保Mysql数据库处于运行状态(前两步是傻瓜式级别的操作在这里就不介绍了)

3. 编写JDBC程序(在这里给出源代码)

源代码:

[java]
view plaincopyprint?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public classDBUtil {

/**
* 取得Connection
* @return
*/
public static Connection getConnection() {

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(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
return conn;
}

public static void main(String []args){
System.out.println("测试开始");
System.out.println(DBUtil.getConnection());
System.out.println("测试结束");
}
}

[java]
view plaincopyprint?

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class StatementTest {

public static void main(String[] args) throws SQLException {
String sql="insert into User (name,password,id) values ('1','2','11111')";
Connection conn=DBUtil.getConnection();
Statement stmt=conn.createStatement();
stmt.executeUpdate(sql);
System.out.println("执行成功");

}

}

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class StatementTest {

public static void main(String[] args) throws SQLException {
String sql="insert into User (name,password,id) values ('1','2','11111')";
Connection conn=DBUtil.getConnection();
Statement stmt=conn.createStatement();
stmt.executeUpdate(sql);
System.out.println("执行成功");

}

}


PreparedStatement源代码:

[java]
view plaincopyprint?

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class PreparedStatementTest {

public static void main(String[] args) throws SQLException {
String sql="insert into User (name,password,id) values (?,?,?)";
Connection conn=DBUtil.getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, "1");
pstmt.setString(2, "2222");
pstmt.setString(3,"3333");
pstmt.executeUpdate();
System.out.println("执行成功");

}

}

[java]
view plaincopyprint?

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ResultSetTest {

public static void main(String[] args) throws SQLException {
String sql="select * from User where id=?";
Connection conn=DBUtil.getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, "11111");
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
System.out.println("name="+rs.getString("name"));
System.out.println("password="+rs.getString("password"));
}
}

}

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ResultSetTest {

public static void main(String[] args) throws SQLException {
String sql="select * from User where id=?";
Connection conn=DBUtil.getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, "11111");
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
System.out.println("name="+rs.getString("name"));
System.out.println("password="+rs.getString("password"));
}
}

}


结果:



ResultSetMetaData

ResultSetMetaData接口可以通过数组形式,遍历数据库的各个字段的属性,对于开发者来说,这个机制意义非常大。

举例:

源代码:

[java]
view plaincopyprint?

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class ResultSetMetaDataTest {

public static void main(String[] args) throws SQLException {
String sql ="select * from User order by id";
Connection conn=DBUtil.getConnection();
//获得可以前后滚动的类型
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs=stmt.executeQuery(sql);
ResultSetMetaData rsm=rs.getMetaData();
System.out.println("共获的"+rsm.getColumnCount()+"列信息");
for(int i=1;i<rsm.getColumnCount();i++){
System.out.println("第"+i+"列的名称为"+rsm.getColumnName(i)+"类型为"+rsm.getColumnTypeName(i));

}

}

}

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class ResultSetMetaDataTest {

public static void main(String[] args) throws SQLException {
String sql ="select * from User order by id";
Connection conn=DBUtil.getConnection();
//获得可以前后滚动的类型
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs=stmt.executeQuery(sql);
ResultSetMetaData rsm=rs.getMetaData();
System.out.println("共获的"+rsm.getColumnCount()+"列信息");
for(int i=1;i<rsm.getColumnCount();i++){
System.out.println("第"+i+"列的名称为"+rsm.getColumnName(i)+"类型为"+rsm.getColumnTypeName(i));

}

}

}

结果:



总结:

这一篇博客对JDBC、JDBC一些重要接口做了简要的分析,主要是为了让读者对JDBC有所了解,对以后学习Hibernate有很大帮助,hibernate的操作最终也是转换为jdbc的操作。所以这篇博客的意义在于后面学习深入的引子。学习JDBC之后,在下一篇博客要介绍java反射机制,因为这个知识也对以后深入学习Hibernate有非常大的帮助。敬请期待!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: