`

Java之JDBC

 
阅读更多

一、JDBC的使用形式

1、JDBC-ODBC桥连接形式:程序—>JDBC—>ODBC—>数据库

这种方式的操作性能很差,但是支持度很高,它是java默认的支持方式,不需要任何的第三方驱动程序进行配置就可以使用

2、JDBC连接形式:程序—>JDBC—>数据库

这种方式的操作性能较第一种方式来说有所改善

3、JDBC网络连接形式:程序—>JDBC连接协议—>数据库

此方法在实际的开发过程中使用的最多

4、JDBC协议连接形式:即:使用特定的数据库生产商提供的协议标准进行数据库的操作,难度较高,一般不太使用

二、JDBC使用的包、接口及类

1、java.sql包

2、DriverManager类

3、接口:Connection、Statement、PreparedStatement、ResultSet

三、数据库操作步骤

1、加载数据库驱动程序(以Oracle为例)

     (1)打开Oracle的两个服务,即监听服务和实例服务,以提供Oracle数据库连接的支持

     (2)①配置数据库驱动程序,数据库驱动程序的路径:数据库安装目录中找到jdbc文件夹/bin/ojdbc6.jar

      相关说明:如果使用的是记事本开发,则需要在系统环境变量ClassPath中加入此驱动程序的路径;

                      如果使用开发工具进行开发,则需要在【Java Build Path】中配置扩展的程序包:右键项目—选择属性—选择Java Build Path—选择libraries—add External jar —将驱动程序的路径复制上去

         ②所有数据库的驱动加载都是容器(java application容器)加载,利用Class.forName(驱动名称)进行加载。Oracle驱动程序类名称:驱动jar包下的Oracle.jdbc.driver.oracleDriver

2、依靠DriverManager类连接数据库

     这个类的构造方法被私有化,使用这个类的静态方法

public static Connection getConnection(String url,
                                       String user,
                                       String password)
                                throws SQLException
url:对于Oracle来说,格式为:jdbc:oracle:thin:@IP地址:端口号:数据库的SID名称(默认情况和数据库名相同)
例如连接mldn数据库:jdbc:oracle:thin:@localhost:1521:mldn
user:用户名
password:用户密码

 这个方法会放回一个Connection接口对象,每一个Connection接口对象都表示一个数据库连接

3、进行数据库的CRUD操作(用到的接口有:Statement、PreparedStatement、ResultSet)

4、关闭数据库連接

 四、具体实现(以下代码均有异常,最好使用try-catch-finally进行处理)

1、获取数据库的连接

//(3)从属性文件中获取数据库连接所需的参数url、user、password、driver
InputStream in = this.getClass().getClassLoader()
			                      .getResourceAsStream("jdbc.properties");
			Properties properties = new Properties();
			properties.load(in);
			String driver = properties.getProperty("driverClass");
			String url = properties.getProperty("url");
			String user = properties.getProperty("user");
			String password = properties.getProperty("password");
  //(2)加载驱动(无驱动会报SQLException:No suitable driver found)
Class.forName(driver);
//(1)通过DriverManager类的静态方法getConnection()方法获取数据库的连接
Connection conn = DriverManager.getConnection(url, user, password);
//System.out.println(conn);

 2、src文件夹下的属性文件jdbc.properties(以oracle为例)

driverClass = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@10.131.118.71:1521:orcl
user = orcl //登录数据库的用户名
password = orcl //登录数据库的密码

 3、进行增、删、改操作(使用的接口:statement、PreparedStatement)

(1)使用statement

//获取statement对象
Statement state = conn.createStatement();
//通过sql实现增加一条数据的操作,改、查操作只是sql不同
String sql = "insert into student(id,name,email,birth,age) "
					+ "values(student_sq.nextval,'王五','wangwu@qq.com',to_date('1995-09-09','yyyy/mm/dd'),23)";
//执行sql
state.execute(sql);
//关闭statement
state.close();
//关闭connection
conn.close();

(2)使用 PreparedStatement

//2、sql参数
String sql = "Insert into student(id,name) values(?,?)";
//1、创建PrepareStatement对象
PrepareStatement ps = conn.PrepareStatement(sql);
//3、调用ps的setXxx(index,value)设置占位符?的值
//4、执行ps的executeQuery()或executeUpdate()方法,实现sql的增删改操作,此时不需要传入sql参数


 使用PreparedStatement的好處:

1、可以避免拼寫SQL語句,有利于代码的维护;

2、可以避免SQL的注入,提升了代码的安全性。

4、查询操作

String sql = "select id,name from student ";
ResultSet  rs =  state.executeQuery(sql);

while(rs.next()){
int id = rs.getInt(1);//获得第一列的值
String name= rs.getName(2);//获得第二列的值
。。。
System.out.println(id);
System.out.pringln(name);
。。。
}

 五、ResultSetMetaData类(元数据类)

通过此类可以获取通过sql查询后返回的结果集的一些属性,比如,列数,列的别名等。

//1、创建ResultSetMetaData对象
ResultSetMetaData rsmd =  PrepareStatement.getMetaData();
//2、通过调用此类中的方法获得相应的属性,比如获得结果集中的列数:
int count =  rsmd.getColumnCount();

 六、BeanUtils工具类

通过此类的setProperty(Object,name,value)方法可以给某个对象中的成员变量赋值,可以返回一个对象。

1、在使用BeanUtils工具包之前需要的Jar包有以下几种:

(1)   BeanUtils相关包

commons-beanutils-1.8.3.jar

commons-beanutils-1.8.3-javadoc.jar

commons-beanutils-1.8.3-javadoc.jar

commons-beanutils-bean-collections-1.8.3.jar

commons-beanutils-core-1.8.3.jar

(2)   Logic4j相关包

commons-logging.jar

log4j.jar

 

2、将通过ResultSetMetaData类获得结果集中的一些属性放入一个Map中,然后通过遍历Map,将Map中值通过此工具类可以返回一个对象。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics