JDBC初步使用

JDBC具体原理这里就不写了,《Java核心技术卷II》写的还是很详细的,java本科教材也写的很好,可惜当时没有动手实践,上课也没认真听。

一、JDBC应用执行的基本流程

简单的说在给定程序启动程序(驱动程序,这个和具体连接使用的数据库有关)、数据源(使用哪个数据库)、数据库用户名和口令之后,执行的流程为:

  • 由DriverManager类取得Connection对象(类方法 DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD));//连接数据库,运行结果为空则检查连接
  • 有Connection对象创建Statement对象;// 执行SQL语句之前必须要创建 Statement 对象(或者是PreparedStatement对象)
  • 有Statement对象执行sql语句并返回执行结果(executeQuery()返回结果集对象 ResultSet,executeUpdate()返回受影响的行数,execute两者都可以); 
二、环境配置

以MySQL5.x为例,下载后在安装文件下有目录Connector J 5.1.20.0,其中有一个.jar文件mysql-connector-java-5.1.20-bin.jar,  在window下可以设置环境变量classpath为这个.jar文件的绝对路径。以后再程序中写驱动程序地址变量是只要设置一个string类型的变量DB_Driver = "com.mysql.jdbc.Driver"; 该jar包下的.class文件。

另外一种方式就是比较直接,在Eclipse中设置添加外部jar包即可。那么程序中国就无需像前面那样显示设置DB_Driver变量;


三、简单例子

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


public class JDBCTest {
	public static void main(String[] argStrings)
	{
		Connection conn = null;
		Statement stmt = null;
		PreparedStatement prepstmt = null;
		final String DB_DRIVER = "com.mysql.jdbc.Driver";
		final String DB_URL = "jdbc:mysql://localhost:3306/test? autoReconnector = true&useUnicode = true";
                //final String DB_URL = "jdbc:mysql://localhost:3306/test";
		final String DB_USER = "root";
		final String DB_PASSWORD = "whu123";
		
		try {
			Class.forName(DB_DRIVER);
			//System.setProperty("jdbc.drivers", DB_DRIVER);
			conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
			String sql = "select * from testusr where id > 1002";
			
			//stmt = conn.createStatement();
			//ResultSet rs = stmt.executeQuery(sql);
			prepstmt = conn.prepareStatement(sql);
			//prepstmt.setString(numb,string);
			ResultSet rs = prepstmt.executeQuery();
			while(rs.next())
			{
				int id = rs.getInt(1);
				String nameString = rs.getString(2);
				System.out.println("id=" + id + ";name=" + nameString);
			}
			
			conn.close();
			conn = null;
		} 
		catch (ClassNotFoundException e) 
		{
		//TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

       本例子中在数据库连接后获得Connection对象,执行SQL语句之前由Connection对象创建的是 PrepareStatement对象,其实面向的使用对象更应该是查询语句中有不确定的列值,并且多次使用此结构查询(唯一不同之处就是列值得不确定性),那么使用setString方法可以对不确定值赋值,程序中注释部分的两个参数分别是(第几个变量, 变量值),当然还有setInt等方法。这样数据库执行查询时只需第一次计算查询策略,无需每次计算,从而提高查询效率。Statement对象就比较直接,执行的SQL语句为确定性语句。

     另外程序中没有使用批处理功能(executeBatch), 具体详见 JDBC batch批处理Statement executeBatch 详解   

      本例子使用的DB URL是
final String DB_URL = "jdbc:mysql://localhost:3306/test? autoReconnector = true&useUnicode = true";

       分析下: JDBC URL中的协议总是jdbc,子协议是mysql,它是驱动程序名或是数据库连接机制,主机名hostname是本机(localhost,没有使用IP地址,本机IP地址127.0.0.1),端口号port为3306(MySQL数据库默认的端口号); 数据库名dbname为 test。 后面的参数值为 autoreconnect表示当数据库连接丢失时是否自动连接,取值true/false;参数值useunicode表示是否使用unicode输出,取值为true/false;   这两个参数值是可选的,但是如果使用的话必须使用?和前面的数据库名隔开;目前不知道默认值是什么;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值