jdbc连接数据库
jdbc核心api
java.sql.* 和 javax.sql.*
|- Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。
|- connect(url, properties): 连接数据库的方法。
url: 连接数据库的URL
URL语法: jdbc协议:数据库子协议://主机:端口/数据库
user: 数据库的用户名
password: 数据库用户密码
|- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序
|-registerDriver(driver) : 注册驱动类对象
|-Connection getConnection(url,user,password); 获取连接对象
|- Connection接口: 表示java程序和数据库的连接对象。
|- Statement createStatement() : 创建Statement对象
|- PreparedStatement prepareStatement(String sql) 创建PreparedStatement对象
|- CallableStatement prepareCall(String sql) 创建CallableStatement对象
|- Statement接口: 用于执行静态的sql语句
|- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML)
|- ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL)
|-PreparedStatement接口:用于执行预编译sql语句
|- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)
|-ResultSet executeQuery() : 执行预编译的查询sql语句(DQL)
|-CallableStatement接口:用于执行存储过程的sql语句(call xxx)
|-ResultSet executeQuery() : 调用存储过程的方法
|- ResultSet接口:用于封装查询出来的数据
|- boolean next() : 将光标移动到下一行
|-getXX() : 获取列的值
1.加载jdbc的驱动程序,创建数据库得连接有,多种方法
其中推荐实用下面的加载方法
1 //注册方法 2 Class.forName("com.mysql.jdbc.Driver"); 3 Class.forName("com.mysql.jdbc.Driver").newInstance(); 4 //连接到数据库得方法 5 Connection conn =DriverManager.getConnection(url, user, password); 6 Connection conn = DriverManager.getConnection(url);(这弓写法的user和password以参数的形式跟在url后面,如:url = "jdbc:mysql://localhost:3306/day17?user=root&password=root";) 7 //各种数据库的driverClass 和url 8 10 oracle 11 driverClass:oracle.jdbc.driver.OracleDriver 12 url:jdbc:oracle:thin:@127.0.0.1:1521:dbname 13 mysql 14 driverClass:com.mysql.jdbc.Driver 15 16 PS:有的时候,mysql的驱动类也也会看到使用org.gjt.mm.mysql.Driver的情况,org.gjt.mm.mysql.Driver是早期的驱动名称,后来就改名为com.mysql.jdbc.Driver,现在一般都推荐使用 com.mysql.jdbc.Driver。在最新版本的mysql jdbc驱动中,为了保持对老版本的兼容,仍然保留了org.gjt.mm.mysql.Driver,但是实际上 org.gjt.mm.mysql.Driver中调用了com.mysql.jdbc.Driver,因此现在这两个驱动没有什么区别。 17 url:jdbc:mysql://localhost:3306/mydbname 18 DB2 19 driverClass:com.ibm.db2.jcc.DB2Driver 20 url:jdbc:db2://127.0.0.1:50000/dbname 21 sybase 22 driverClass:com.sybase.jdbc.SybDriver 23 url:jdbc:sybase:Tds:localhost:5007/dbname 24 PostgreSQL 25 driverClass:org.postgresql.Driver 26 url:jdbc:postgresql://localhost/dbname 27 Sql Server2000 28 driverClass:com.microsoft.jdbc.sqlserver.SQLServerDriver 29 url:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname 30 Sql Server2005 31 driverClass:com.microsoft.sqlserver.jdbc.SQLServerDriver 32 url:jdbc:sqlserver://localhost:1433; DatabaseName=dbname
2.连接到具体的数据库url后面的参数详解
user 用户名 password 密码 autoReconnect 联机失败,是否重新联机(true/false) maxReconnect 尝试重新联机次数 initialTimeout 尝试重新联机间隔 maxRows 传回最大行数 useUnicode 是否使用Unicode字体编码(true/false) characterEncoding 何种编码(GB2312/UTF-8/…) relaxAutocommit 是否自动提交(true/false) capitalizeTypeNames 数据定义的名称以大写表示
3.创建一个Statement 。
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
Statement stmt = con.createStatement() ; PreparedStatement pstmt = con.prepareStatement(sql) ; CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
4.执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句
,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或
DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的
语句。
具体实现的代码:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; int rows = stmt.executeUpdate("INSERT INTO ...") ; boolean flag = stmt.execute(String sql) ;
5.处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:
1 while(rs.next()){ 2 3 String name = rs.getString("name") ; 4 5 String pass = rs.getString(1) ; // 此方法比较高效 6 7 }
(列是从左到右编号的,并且从列1开始)
7.关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
1 if(rs != null){ // 关闭记录集 2 3 try{ 4 5 rs.close() ; 6 7 }catch(SQLException e){ 8 9 e.printStackTrace() ; 10 11 } 12 13 } 14 15 if(stmt != null){ // 关闭声明 16 17 try{ 18 19 stmt.close() ; 20 21 }catch(SQLException e){ 22 23 e.printStackTrace() ; 24 25 } 26 27 } 28 29 if(conn != null){ // 关闭连接对象 30 31 try{ 32 33 conn.close() ; 34 35 }catch(SQLException e){ 36 37 e.printStackTrace() ; 38 39 } 40 41 }