JDBC连接数据库详细指南(包含三种数据库)
在项目的开发过程中,数据库的连接支持是非常重要的,今天我就来描述一下使用JDBC访问各种各样数据库的方法。
1.JDBC简介
JDBC全称是Java数据库连接(JavaDatabase connectivity),是java程序与数据库系统通信的标准API,它包含一组用Java语言编写的类和接口。
通过JDBC我们可以方便的向各种数据库发送SQL语句,我们只需要使用JDBC编写一个通用的程序,便可以通过SQL语句调用不同的数据库了。
2. JDBC连接数据库详细步骤如下:
(1)使用Class.forName( )方法加载相应的数据库驱动程序
1.连接mysql数据库
(java连接MySQL数据库驱动可供下载地址:http://pan.baidu.com/s/1bpumAmj)
Ø 加载MySQL驱动程序的语句如下:
Class.forName("com.mysql.jdbc.Driver");
或者:Class.forName("org.gjt.mm.mysql.Driver");
2.连接SQL Server数据库
(java连接SQL Server数据库驱动可供下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=11774)
Ø 加载SQL Server驱动程序的语句如下:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
3.连接Oracle数据库
(java连接Oracle数据库驱动可供下载地址:http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html)
Ø 加载Oracle驱动程序的语句如下:
Class.forName("oracle.jdbc.driver.OracleDriver");
4.注释
该步骤可以替换为在WEB-INF目录下建立名为services的文件夹,然后把驱动放入其中,这样便省略了使用Class.forName( )方法加载驱动。
(2)定义要连接的数据库的URL
1.连接mysql数据库
Ø 语句如下:
StringURL="jdbc:mysql://host:post/dbName";
注:host代表主机IP;
post代表MySQL的端口号;
dbName代表要连接的数据库名称
例如:StringmysqlURL="jdbc:mysql://localhost:3306/dbtest";
或者:String mysqlURL="jdbc:mysql://127.0.0.1:3306/dbtest";
2.连接SQL Server数据库
Ø 语句如下:
StringURL="jdbc:sqlserver://host:post;databaseName=dbName";
注:host代表主机IP;
post代表MySQL的端口号;
dbName代表要连接的数据库名称
例如:String mysqlURL="jdbc:sqlserver://localhost:1433;databaseName=dbtest";
或者:String mysqlURL="jdbc:sqlserver://127.0.0.1:1433;databaseName=dbtest";
3.连接Oracle数据库
Ø 语句如下:
StringURL="jdbc:oracle:thin:@host:post;databaseName=dbName";
注:host代表主机IP;
post代表MySQL的端口号;
dbName代表要连接的数据库名称
例如:String mysqlURL="jdbc:oracle:thin:@localhost:1521:dbtest";
或者:String mysqlURL="jdbc:oracle:thin:@127.0.0.1:1521:dbtest";
(3)调用DriverManager对象的getConnection( )方法,获得一个Connection对象(它表示打开了一个连接)
Ø 语句如下:
Connection conn=DriverManager.getConnection(URL,"数据库用户名","数据库用户密码");
例如://要连接的数据库的URL
StringmysqlURL="jdbc:mysql://127.0.0.1:3306/dbtest";//这里用的MySQL,其他数据库参考上面
StringDBUser="root";//数据库用户名
StringDBPwd="123456";//数据库用户密码
Connectionconn=DriverManager.getConnection(mysqlURL,DBUser,DBPwd);
(4)创建语句对象
使用Connection接口可以创建两种语句对象。
1使用createStatement()方法创建Statement语句对象
该对象用于传递简单的不带参数的SQL语句给数据库管理系统来执行。
语句如下:
Statement st=conn.createStatement();
2使用prepareStatement(String sql )创建的PreparedStatement语句对象(PreparedStatement是Statement的子接口)
该对象用于传送带有一个或多个输入参数的SQL语句。
例如:String sql="insert into test(name,password) values(?,?)";
PreparedStatement pstem=conn.prepareStatement(sql);
pstem.setString(1, "test");
pstem.setString(2, "123456");
3使用prepareCall(String sql)创建一个CallableStatement语句对象(CallableStatement是PreparedStatement的子接口)
该对象用于调用存储过程。
例如: CallableStatement csm=conn.prepareCall("call validate(?,?)}");
csm.setString(parameterName, value);
注:validate是存储过程名
parameterName参数名
value参数值
(5)执行语句
1对应Statement语句对象
Statement接口提供了3个方法执行SQL语句,如下:
n execute(String sql):执行给定的 SQL 语句,返回boolen型值
n executeQuery(String sql) :执行给定的 SQL 查询语句,该语句返回单个 ResultSet 对象;
n executeUpdate(String sql) :执行给定 SQL 语句,该语句可能为 INSERT、 UPDATE 或 DELETE 语句,返回行计数或0 。
例如:String sql="create table `test2`(name varchar(50),passwordvarchar(50));";
Statement stem=conn.createStatement();
int result=stem.executeUpdate(sql);
或者:String sql2="select * from test";
ResultSet rs=stem.executeQuery(sql2);
2对应PreparedStatement语句对象
PreparedStatement接口提供了3个方法执行SQL语句,如下:
n execute( ):在此 PreparedStatement 对象中执行 SQL 语句,返回boolen型值
n executeQuery( ) :在此 PreparedStatement 对象中执行 SQL 查询语句,该语句返回单个 ResultSet 对象;
n executeUpdate( ) :在此 PreparedStatement 对象中执行 SQL 语句,该语句可能为 INSERT、 UPDATE 或 DELETE 语句,返回行计数或0 。
例如:String sql="insert into test(name,password) values(?,?)";
PreparedStatement pstem=conn.prepareStatement(sql);
pstem.setString(1, "test");
pstem.setString(2, "123456");
int result=pstem.executeUpdate( );
或者:ResultSet rs=pstem.executeQuery();
3应CallableStatement语句对象
该对象的执行方法和PreparedStatement语句对象相同,详情可以参考PreparedStatement接口提供的执行方法。
(6)对返回的结果进行处理
1返回结果是int型
在执行语句时,如果使用的方法是executeUpdate方法,便会返回int型结果,我们可以通过该值,知道操作的行数。
2返回的结果是ResultSet 对象
在执行语句时,如果使用的方法是executeQuery方法,便会返回单个 ResultSet 对象。ResultSet 对象包含了SQL语句的执行结果,我们可以使用它的一组get()方法对结果行中每列的数据进行访问,可以通过它的next()方法移动到ResultSet 的下一行,使其变成当前行。
例如:显示结果集所有记录的前两列
代码如下:Statement stem=conn.createStatement();
String sql2="select * from test";
ResultSet rs=stem.executeQuery(sql2);
ResultSetrs=pstem.executeQuery();
while(rs.next()){
Stringname=rs.getString("name");
Stringpassword=rs.getString("password");
System.out.println("用户名:"+name+",密码:"+password);
}
(7)关闭连接。
操作完后,要记得关闭所有的JDBC对象,以释放资源。
包括:关闭结果集、关闭语句对象、关闭连接对象。
如:rs.close(); //关闭结果集
stem.close(); //关闭Statement语句对象
conn.close(); //关闭连接对象