JDBC
的全称是Java Database Connectivity
,即Java
数据库链接,它是一种能够执行SQL
语句的Java API
。程序可经过JDBC API
链接到关系数据库,并使用结构化查询语言(SQL
,数据库标准的查询语言)来完成对数据库的查询、更新html与其余数据库编程环境相比,
JDBC
为数据库开发提供了标准的API
,使用JDBC
开发的数据库应用能够跨平台运行,并且还能够跨数据库(若是所有使用标准的SQL
语句)。也就是说若是使用JDBC开发一个数据库应用,则该应用既能够在Windows操做系统上运行,又能够在Unix
等其余操做系统上运行,既可使用MySQ
L数据库,又可使用Oracle
等其余的数据库,应用程序不须要作任何的修改java
Class.forName(classDriver)
其中classDrive
r就是数据库驱动类对应的字符串,下面给出加载mysql
,oracle
数据库的例子:python
Class.forName("com.mysql.jdbc.Driver"); //mysql Class.forName("oracle.jabc.driver.OracleDriver"); //oracle
得到数据库链接的方法为DriverManager.getConnection()
,其中有不一样的参数,也对应不一样的方法,下面将会详细介绍mysql
DriverManager.getConnection(String url)
git
DriverManager.getConnection(String url, Properties prop)
这里的Properties是一个属性集,详情请看文档github
DriverManager.getConnection(String url,String user,String password)
这里的url
是jdbc:mysql://localhost:3306/java_demo
,其中java_demo
表示你本身建立的数据库名字,urser
表示当前数据库的登陆的用户名,password
表示密码sql
//第二种方法 String url="jdbc:mysql://localhost:3306/java_demo"; //这是链接的url String user="root"; String password="root"; Properties properties=new Properties(); //建立属性集 properties.setProperty("password", password); //向起中添加属性,很想python中的字典 properties.setProperty("user",user); Class.forName("com.mysql.jdbc.Driver"); //加载数据库驱动 Connection conn=DriverManager.getConnection(url,properties); //链接数据库 //第三种方法 Connection conn=DriverManager.getConnection(url,user,password); //链接数据库
注意:以上只是一些例子,并非完整的代码,其中并无处理异常,还应该注意的是要关闭connection数据库
查询数据有两种方法,分别为静态查询和动态查询,静态查询使用的Statement,动态查询使用的PrepareStatement,下面详细介绍这两种查询方法编程
使用的是
Statement
,其中经常使用的函数以下:api
boolean execute(String SQL)
若是ResultSet
对象能够被检索,则返回的布尔值为true
,不然返回false
。当你须要使用真正的动态SQL
时,可使用这个方法来执行SQL DDL
语句
int executeUpdate(String SQL)
返回执行SQL
语句影响的行的数目。使用该方法来执行SQL
语句,是但愿获得一些受影响的行的数目,例如,INSERT
,UPDATE
或DELETE
语句
ResultSet executeQuery(String SQL)
: 返回一个ResultSet
对象。当你但愿获得一个结果集时使用该方法,就像你使用一个SELECT
语句。
close()
关闭statement
对象,这个是必须有的,为了程序的安全,必须在结束以前关闭实例:
Statement stmt = null; //申请对象 try { stmt = connection.createStatement( ); //经过Connection对象建立statement对象 String sql_1="select * from course;"; String sql_2="select * from course where id=2;"; ResultSet res_1=stm.executeQuery(sql_1); //执行查询语句,返回的是一个结果集合,上面已经说明了 ResultSet res_2=stm.executeQuery(sql_1); while(res_1.next()) { System.out.println(res_1.getInt(1)+"---"+res_1.getString(2)); //分别查询第一列和第二列的值,经过列数查询 System.out.println(res_1.getInt("id")+"---"+res_1.getString("name")); //经过列名查询 } } catch (SQLException e) { //捕捉异常 . . . } finally { if(connection!=null) { connection.close(); //关闭链接 } if(stmt!=null) { stmt.close(); //关闭 } }
说明:
ResultSet
经常使用的方法以下:注意下面的方法会发生SQLException
异常
public void beforeFirst()
将光标移动到第一行以前。
public void afterLast()
将光标移动到最后一行以后。
public boolean first()
将光标移动到第一行。从第一行的数据开始读取
public void last()
将光标移动到最后一行。
public boolean absolute(int row)
将光标移动到指定的第row
行。
public boolean previous()
将光标移动到上一行,若是超过结果集的范围则返回false
。
public boolean next()
将光标移动到下一行,若是是结果集的最后一行则返回 false。
public int getRow()
返回当前光标指向的行数的值。
public void moveToInsertRow()
将光标移动到结果集中指定的行,能够在数据库中插入新的一行。当前光标位置将被记住
public void moveToCurrentRow()
若是光标处于插入行,则将光标返回到当前行,其余状况下,这个方法不执行任何操做
public int getInt(String columnName)
返回当前行中名为columnName
的列的int
值。
public int getInt(int columnIndex)
返回当前行中指定列的索引的int
值。列索引从1
开始,意味着行中的第一列是1
,第二列是2
,以此类推。
getString(int columIndex)
返回指定列的String
类型的数据
getString(String columName)
返回当前行中名为columName
的String
类型的值
动态查询使用的
PrepareStatement
这个类实现的,PreparedStatement
接口扩展了Statement
接口,它让你用一个经常使用的Statement
对象增长几个高级功能。这个statement
对象能够提供灵活多变的动态参数实例:
PreparedStatement pstmt = null; try { String SQL = "select * from course where age=? and name=?"; pstmt = conn.prepareStatement(SQL); //建立对象 pstmt.setInt(1,22); //设置参数age的值 ,1表示第一个参数 pstmt.setString(2,"chenjiabing"); //设置name的值,其中2表示第二个参数 ResultSet res=pstmt.execteQuery(); while(res.next) { .... } . . . } catch (SQLException e) { . . . } finally { if(connection!=null) { connection.close(); } if(pstmt!=null) { pstmt.close(); //关闭 } . . . }
说明:
JDBC
中全部的参数都被用?
符号表示,这是已知的参数标记。在执行SQL
语句以前,你必须赋予每个参数确切的数值。其中PrepareStatement
的经常使用函数以下,固然Statement
中的execute
,executeQuery
,executeUpdate
也可使用
void setInt(int parameterIndex, int x)
parameterIndex
表示第几个?
,这里的int x
表示是mysql
中定义的int
类型的值
void setString(int parameterIndex,String x)
为第parameterIndex
个String
类型的?赋予x
的值
这里还有
delete
,update
,alter
等一系列的操做都是和上面的同样,就是把sql
语句改变如下,若是使用的是静态的就要为delete
,update
,使用Statement.execteUpdate(sql)
这个函数,固然要使用动态的也是executeUpdate
函数