JAVA访问数据库之连接数据库
2016-01-06 09:57
459 查看
开发一个访问数据库的应用程序,首先要加载数据库的驱动程序,只需要在第一次访问数据库时加载一次,然后每次运行时创建一个Connection实例,紧接着执行操作数据库的SQL语句,并处理返回的结果集,最后在完成完成此次操作时销毁前面创建的Connection,释放与数据库的连接。
Statement实例:该类型的实例只能用来执行静态的SQL
PreparedStatement实例:该类型的实例可以执行动态的SQL
CallableStatement实例:该类型的实例可以执行数据库的存储过程
http://www.h2database.com/html/main.html
H2是一个短小精干的嵌入式数据库引擎,主要的特性包括:
1. 免费、开源、快速
2. 嵌入式的数据库服务器,支持集群
3. 提供JDBC、ODBC访问接口,提供基于浏览器的控制台管理程序
4. Java编写,可使用GCJ和IKVM.NET编译
5. 短小精干的软件,1M左右
如电脑上已经安装了数据库,直接使用对应数据库厂商提供的驱动包即可,操作过程一致。
其中[]为需要替换的部分。
加载数据库驱动
在连接数据库之前,首先要把JDBC驱动类加载到java虚拟机,可以使用java.lang.Class类的静态方法forName(String className)。成功加载后会将加载的驱动类注册给DriverManager类,加载失败将抛出ClassNotFoundException异常。创建数据库连接
DriverManager类跟踪已注册的驱动程序,通过调用DriverManager类的静态方法getConnection(String url, String user, String password)可以建立与数据库的连接。3个参数依次为欲连接的数据库的路径、用户名和密码,方法返回值类型为java.sql.Connection。当调用该方法时,会搜索整个驱动程序列表,直到找到一个能够连接至数据连接字符串中指定的数据库的驱动程序为止。执行SQL语句,得到结果集
当数据库连接建立以后,就可以使用该连接创建Statement实例,并将SQL语句传递给它所连接的数据库,并返回类型为ResultSet的对象(查询的时候),Statement实例分为3种类型:Statement实例:该类型的实例只能用来执行静态的SQL
PreparedStatement实例:该类型的实例可以执行动态的SQL
CallableStatement实例:该类型的实例可以执行数据库的存储过程
处理查询结果
对于返回的结果集,使用ResultSet对象的next()方法将光标指向下一行。最初光标位于第一行之前,因此第一次调用next()方法将光标置于第一行上,如果到达结果集的末尾,则ResultSet的next()方法会返回false,方法getXXX提供了获取当前行中某一列的值的途径,列名或列号可用于标识要从中获取数据的列。连接示例
为了方便操作,这里我选用H2数据库,这样电脑上没有安装数据库的朋友也可以快速的构建程序,H2数据库的官网地址为:http://www.h2database.com/html/main.html
H2是一个短小精干的嵌入式数据库引擎,主要的特性包括:
1. 免费、开源、快速
2. 嵌入式的数据库服务器,支持集群
3. 提供JDBC、ODBC访问接口,提供基于浏览器的控制台管理程序
4. Java编写,可使用GCJ和IKVM.NET编译
5. 短小精干的软件,1M左右
如电脑上已经安装了数据库,直接使用对应数据库厂商提供的驱动包即可,操作过程一致。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCConnectDemo { public static void main(String[] args) { // 加载数据库驱动 try { Class.forName("org.h2.Driver"); } catch (ClassNotFoundException e) { System.out.println("加载数据库驱动失败..."); return; } // 初始化数据库,方便运行加的这一段代码,实际开发中,数据库应该是初始化好的,如果已存在数据库,请将该段代码注释掉,无需执行 try { initDataBase(); } catch (SQLException e1) { System.out.println("数据库表初始化失败驱动失败..."); return; } Connection conn = null; Statement statement = null; ResultSet resultSet = null; try { // 获得数据库连接 conn = DriverManager.getConnection("jdbc:h2:h2.db", "test", "123"); statement = conn.createStatement(); resultSet = statement .executeQuery("SELECT USER_ID, USER_NAME FROM USER_INFO"); System.out.printf("%20s %50s\n", "USER_ID", "USER_NAME"); // 遍历结果集 while (resultSet.next()) { System.out.printf("%20s %50s\n", resultSet.getString("USER_ID"), resultSet.getString("USER_NAME")); } } catch (SQLException e) { System.out.println("出现异常..."); } finally { // 释放资源 if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * 初始化数据库 * * @throws SQLException */ private static void initDataBase() throws SQLException { Connection conn = null; Statement statement = null; try { // 获得数据库连接 conn = DriverManager.getConnection("jdbc:h2:h2.db", "test", "123"); // 创建一张表 String sql = "CREATE TABLE IF NOT EXISTS USER_INFO (USER_ID VARCHAR(20) PRIMARY KEY, USER_NAME VARCHAR(50))"; statement = conn.createStatement(); statement.executeUpdate(sql); } catch (SQLException e) { throw e; } finally { if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
常用数据库驱动类及连接字符串
数据库 | 驱动类 | 连接字符串 |
---|---|---|
Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@[IP]:[PORT]:[SID] |
DB2 | com.ibm.db2.jdbc.app.DB2Driver | jdbc:db2://[IP]:[PORT]/[databaseName] |
Sql Server | com.microsoft.jdbc.sqlserver.SQLServerDriver | jdbc:microsoft:sqlserver://[IP]:[PORT];databaseName=[databaseName] |
Sybase | com.sybase.jdbc.SybDriver | jdbc:sybase:Tds:[IP]:[PORT]/databaseName |
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://[IP]:[PORT]/databaseName |
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android之获取手机上的图片和视频缩略图thumbnails
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序