java访问数据库技术
JDBC概述以及功能 概述
JDBC(Java DataBase Connectivity)是数据库公司开发的一种提供给Java编程者使用的Java API(类库),能够帮助Java程序访问表格数据,主要应用在对关系数据库的访问中。
在Java程序中,需要JDK中java.sql和javax.sql包中的类和JDBC包中的类配合完成对数据库的访问。
功能
连接数据源(数据库)。
将SQL语句(查询、更新)发送到数据库。
获取并处理从数据库中返回的结果
基本代码 省去项目加载驱动包过程,直接代码
加载驱动类 1 Class.forName(driverClass);
连接数据库,获取Connection对象 1 Connection con = DriverManager.getConnection(URL, databaseUserName, databasePassword);
1 public interface Connection extends Wrapper , AutoCloseable ;
DriverManager类的静态方法通过数据库URL,可以连接数据库并获得一个Connection对象,方法的后两个参数是连接数据库的用户名和密码。
获取Statement对象,用于执行SQL语句 1 Statement stmt = con.creatStatement();
1 public class Statement extends Object ;
执行SQL语句,获取查询结果 1 ResultSet rs = stmt.executeQuery(querySQL);
1 ResultSet executeQuery(String sql) throws SQLException //执行给定的SQL语句,返回单个ResultSet对象
querySQL代表是SQL的查询语句
1 public interface ResultSet extends Wrapper , AutoCloseable ;
关闭数据库连接,释放资源 1 2 3 rs.close(); rs = null ; stmt.close(); stmt = null ; con.close(); con = null ;
依次关闭ResultSet、Statement、Connection对象,通过赋值null释放资源。
ResultSet
ResultSet对象表示数据库查询结果集,可以看成一个数据表,通常通过执行查询数据库来生成。
实现Statement接口的任何对象(包括PreparedStatement,CallableStatement和RowSet)都可以创建一个ResultSet对象。
访问ResultSet中的对象:
可以通过游标访问ResultSet对象中的数据,游标可以看做是指向ResultSet对象中的一行数据的指针。
最初,游标位于数据表第一行之前。ResultSet.next()方法将游标移动到下一行。 如果游标位于最后一行之后,此方法返回false,否则返回true。 该方法可以作为while循环的条件,来遍历ResultSet中的所有数据。
常用默认类型是游标只能前移,只读
1 2 3 4 while (rs.next()){ System.out.println(rs.getString("Name" )); }
1 2 String getString (int columnIndex) throws SQLException String getString (int columnIndex) throws SQLException
rs:数据集,即ResultSet对象。 rs.getInt(int index); rs.getInt(String columName); 可以通过索引或者列名来获得查询结果集中的某一列的值。
概念 元数据:描述数据库或数据表本身属性的数据,例如数据库中的表名,每个表中的列名称,主键,外键,存储过程等。
所谓的MetaData在英文中的解释为“Data about Data”,直译成中文则为“有关数据的数据”或者“描述数据的数据”,实际上就是描述及解释含义的数据。以Result的MetaData为例,ResultSet是以表格的形式存在,所以getMetaData就包括了数据的字段名称、类型以及数目等表格所必须具备的信息。
获取 JDBC提供了ResultSetMetaData接口,该接口可以获得数据表的元数据
1 2 ResultSetMetaData getMetaData ()
总结代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 import java.sql.*;public class DB { static Statement stm = null ; static ResultSet rs = null ; public DB (String driverClass, String dataBase, String usrName, String passWord) { try { Class.forName(driverClass); Connection con = DriverManager.getConnection(dataBase, usrName, passWord); stm = con.createStatement(); }catch (ClassNotFoundException e){ e.printStackTrace(); }catch (SQLException e){ e.printStackTrace(); } } public void queryDatabase (String querySQL) { try { rs = stm.executeQuery(querySQL); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); for (int i = 1 ; i <= columnCount; i++) System.out.print(rsmd.getColumnName(i) + " " ); System.out.println(); while (rs.next()) { for (int i = 1 ; i <= columnCount; i++) System.out.print(rs.getObject(i) + " " ); System.out.println(); } }catch (SQLException e){ e.printStackTrace(); } } public void updateDatabase (String updateSQL) { try { int numUpate = stm.executeUpdate(updateSQL); System.out.println("已更新了" + numUpate + "条记录" ); }catch (SQLException e){ e.printStackTrace(); } } public void deleteDatabase (String deleteSQL) { try { stm.executeUpdate(deleteSQL); }catch (SQLException e){ e.printStackTrace(); } } public void insertDatabase (String insertSQL) { try { stm.executeUpdate(insertSQL); }catch (SQLException e){ e.printStackTrace(); } } public void close () { try { rs.close(); rs = null ; stmt.close(); stmt = null ; con.close(); con = null ; }catch (SQLException e){ e.printStackTrace(); } } public static void main (String[] args) { String schema = "data" ; String table = "new_table" ; String driverClass = "com.mysql.cj.jdbc.Driver" ; String database = "jdbc:mysql://localhost:3306/" + schema + "?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=UTF-8" ; String username = "root" ; String password = "123456" ; String querySQL = "select* from " + table; String updateSQL = "update " + table + " set grade=70 where name='小陈'" ; String deleteSQL = "delete from " + table + " where name='小丽'" ; String insertSQL = "insert into " + table + " values('小白', '男', '98')" ; DB db = new DB(driverClass, database, username, password); System.out.println("原先的数据库数据为" ); db.queryDatabase(querySQL); System.out.println(); db.updateDatabase(updateSQL); System.out.println("执行update将小陈成绩变成70" ); db.queryDatabase(querySQL); System.out.println(); System.out.println("将名为小丽那一行删除" ); db.deleteDatabase(deleteSQL); db.queryDatabase(querySQL); System.out.println(); System.out.println("添加名为小白一行" ); db.insertDatabase(insertSQL); db.queryDatabase(querySQL); db.close(); } }