jdbc连接数据库的代码和步骤
jdbc连接数据库的代码和步骤
学习目标
介于大家使用Mysql的比较多,最下面有UXDB和MySQL两种数据库连接的完整代码
JDBC连接数据库的程序,主要包含7个步骤
1、加载JDBC 驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
可以通过java.lang.Class类的静态方法forName(String className)实现。
示例1:(加载UXDB的驱动类)
// 加载 UXDB的驱动 try{ Class.forName("com.uxsino.uxdb.Driver"); }catch (Exception e){ e.printStackTrace(); }
示例2:(加载MySQL的驱动类)
try{//加载MySql的驱动类Class.forName("com.mysql.jdbc.Driver") ;}catch(ClassNotFoundException e){System.out.println("找不到驱动程序类 ,加载驱动失败!");e.printStackTrace() ;}
成功加载后,会将Driver类的实例注册到DriverManager类中。
注意:不管加载什么数据库的驱动,可能都得提前导入驱动的jar包
如果你会用maven的话,就可以直接镜像下载,就不用再手动导入了。
2、提供JDBC连接需要的URL
连接JDBC的 URL定义了连接数据库时的协议、子协议、数据源标识
URL的书写形式:书写形式:协议:子协议:数据源标识
- 协议:在JDBC中总是以jdbc开始 。
- 子协议:是桥连接的驱动程序或是数据库管理系统名称。
- 数据源标识:标记找到数据库来源的地址与连接端口。
示例1:(UXDB的连接URL)
// UXDB的连接URLString url = "jdbc:uxdb://192.71.1.31:5432/uxdb";
示例2:(MySQL的连接URL)
String url = "jdbc:mysql://localhost:3306/mysql" ;
3、创建数据库的连接
(1)要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
获取到的 Connection 对象就代表一个数据库的连接。
(2)使用DriverManager的getConnection(String url , String username ,
String password )方法传入 连接的 数据库的路径、数据库的用户名和
密码来获得。
示例1:(连接UXDB数据库,用户名,密码)
// 连接UXDB数据库String url = "jdbc:uxdb://192.71.1.31:5432/uxdb"; try{Connection conn = DriverManager.getConnection(url,"uxdb","123456"); }catch(Exception e){System.out.println("数据库连接失败!");e.printStackTrace() ; }
示例2:(连接MySQL数据库)
String username = "root" ; String password = "root" ; try{Connection conn = DriverManager.getConnection(url , username , password ) ; }catch(SQLException se){System.out.println("数据库连接失败!");se.printStackTrace() ; }
4、创建一个Statement
(1)要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下 3 种类型:
- 执行静态SQL语句。通常通过Statement实例实现。
- 执行动态SQL语句。通常通过PreparedStatement实例实现。
- 执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式: (这里不管什么数据库基本一致,大同小异)
Statement st = con.createStatement() ; PreparedStatement ps = con.prepareStatement(sql) ; CallableStatement cs = con.prepareCall("{CALL demoSp(? , ?)}") ;
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和 execute
- ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,
返回一个结果集(ResultSet)对象。 - int executeUpdate(String sqlString):用于执行INSERT、UPDATE或
DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等 - execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
-(这里不管什么数据库基本一致,大同小异)
// 这里的st 就是上面 第4步 中,你获取的Statement实例 ResultSet rs = st.executeQuery("SELECT * FROM ...") ;int rows = st.executeUpdate("INSERT INTO ...") ;boolean flag = st.execute(String sql) ;
6、对数据库中 查询的结果做处理
两种情况:
(1)执行更新返回的是本次操作影响到的记录数。
(2)执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据
while(rs.next()){ String name = rs.getString("name") ; String password = rs.getString(1) ; // 此方法比较高效 }
rs.getString(1)的意思是取表中第一列的数据(列是从左到右编号的,并且从列1开始)
7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和连接顺序刚好相反
(1)关闭记录集
(2)关闭声明
(3)关闭连接对象
if(rs != null){ // 关闭结果集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(st != null){ // 关闭声明 try{ stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 关闭连接对象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } }
连接UXDB数据库整个完整的代码:
package com.song.jdbc;import java.sql.*;public class ConnTest { public static void main(String[] args) { Connection connection = getConn(); String sql = "select * from student"; PreparedStatement statement; statement = null; ResultSet resultSet; resultSet = null; try {// statement = connection.createStatement();// resultSet = statement.executeQuery(sql); //4、创建一个Statement PreparedStatement statement1 = connection.prepareStatement(sql); //5、执行SQL语句 resultSet = statement1.executeQuery(); System.out.println("======"); //6、对数据库中 查询的结果做处理 while (resultSet.next()){ System.out.println("===22222===="); System.out.println(resultSet.getString(1)); System.out.println("\n"); } }catch (Exception e){ e.printStackTrace(); }finally { //7、关闭JDBC对象 if (resultSet != null){ try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null){ try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null){ try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } private static Connection getConn(){ Connection connection; connection = null; try{ //1、加载JDBC 驱动程序 Class.forName("com.uxsino.uxdb.Driver"); //2、提供JDBC连接需要的URL String url = "jdbc:uxdb://192.71.1.31:5432/uxdb"; try { //3、创建数据库的连接 return DriverManager.getConnection(url,"uxdb","123123"); }catch (Exception e){ e.printStackTrace(); } }catch (Exception e){ e.printStackTrace(); } return connection; }}
连接MySQL数据库整个完整的代码:
package sqldemo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class main { public static void main(String[] args) { //声明Connection对象 Connection con; //驱动程序名 String driver = "com.mysql.jdbc.Driver"; //URL指向要访问的数据库名mydata String url = "jdbc:mysql://localhost:3306/sqltestdb"; //MySQL配置时的用户名 String user = "root"; //MySQL配置时的密码 String password = "123456"; //遍历查询结果集 try { //加载驱动程序 Class.forName(driver); //1.getConnection()方法,连接MySQL数据库!! con = DriverManager.getConnection(url,user,password); if(!con.isClosed()) System.out.println("Succeeded connecting to the Database!"); //2.创建statement类对象,用来执行SQL语句!! Statement statement = con.createStatement(); //要执行的SQL语句 String sql = "select * from emp"; //3.ResultSet类,用来存放获取的结果集!! ResultSet rs = statement.executeQuery(sql); System.out.println("-----------------"); System.out.println("执行结果如下所示:"); System.out.println("-----------------"); System.out.println("姓名" + "\t" + "职称"); System.out.println("-----------------"); String job = null; String id = null; while(rs.next()){ //获取stuname这列数据 job = rs.getString("job"); //获取stuid这列数据 id = rs.getString("ename"); //输出结果 System.out.println(id + "\t" + job); } rs.close(); con.close(); } catch(ClassNotFoundException e) { //数据库驱动类异常处理 System.out.println("Sorry,can`t find the Driver!");e.printStackTrace(); } catch(SQLException e) { //数据库连接失败异常处理 e.printStackTrace();}catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ System.out.println("数据库数据成功获取!!"); } } }