java数据库操作
在jdbc之前,各个厂家只通过自己的API访问数据库,给开发人员访问不同数据库造成了很大困难,如果需要更换数据库,则需要修改大量代码。
JDBC(Java DataBase Connectivity),它提供一套统一的javaAPI,为各个数据库厂商提供了标准接口的实现。
使用jdbc链接数据库流程如下
- 加载数据库驱动
- 建立数据库连接
- 创建并执行sql语句对象(例如Statement、PreparedStatement)
- 处理结果集
Java数据类型和SQL数据类型映射关系如下
Java数据类型 | SQL数据类型 | 长度(字节) |
byte、Byte | TINYINT | 1 |
Short、short | SMALLINT | 2 |
Integer、int | INTEGER | 4 |
Long、long | BIGINT | 8 |
Float、float | FLOAT | 2 |
Double、double | DOUBLE | 8 |
Boolean、boolean | BIT | 1 |
Character、char | CHAR(1) | 固定长度,括号内数字表示字符数 |
String | VARCHAR(n) | 可变长度,括号中数字表示字符数 |
常用类和接口
DriverManager类是用来管理数据库所有驱动程序的,他作用于用户和驱动程序之间,管理可用的驱动程序,负责在数据库和驱动程序之间建立连接。
DriverManager的方法 | 返回值类型 | 描述 |
getConnection(String url) | Connection | 创建指定数据库链接 |
getDriver(String url) | Driver | 获取相应数据库驱动 |
Connection接口代表java程序与特定的数据库之间的连接,在对数据库进行操作之前,需要获取数据库的连接。
Connection方法 | 返回值类型 | 描述 |
createStatement() | Statement | 创建Statement对象 |
prepareStatement(String sql) | PreparedStatement | 创建PreparedStatement对象 |
Statement 接口用于创建向数据库中传递SQL语句的对象,该接口提供了一些可以实现对数据库的常用操作。 DML(数据操作语言)包括insert,delete、update。
Statement方法 | 返回值类型 | 描述 |
executeQuery(String sql) | ResultSet | 执行查询语句,并返回查询结果对应RusultSet对象 |
executeUpdate(String sql) | int | 执行DML语句,并返回受影响的行数 |
execute(String sql) | boolean | 执行给定的sql语句,可能返回多个结果。如果执行后第一个结果为ResultSet对象,则返回false。如果执行后第一个结果为受影响的行数或没有任何结果,则返回false |
PreparedStatement接口继承于Statement接口,用于执行动态sql语句。通过PreparedStatement执行sql语句,被预编译后可以反复执行。
PreparedStatement方法 | 返回值类型 | 描述 |
execute() | boolean | 执行sql语句 |
executeQuery() | ResultSet | 执行查询语句,并返回查询结果对应的ResultSet对象 |
executeUpdate() | int | 执行DML语句 |
例:
oracle、mysql、sqlserver
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CommodityTest {
public static void main(String[] args){
connectOracle();
}
public static void connectOracle(){
Connection conn = null;//创建一个数据库连接
PreparedStatement pre = null;//Statement容易出现sql注入
ResultSet result = null;//创建一个结果集对象
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
// Class.forName("com.mysql.jdbc.Driver");
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:oralce"+"thin@loacalhost:1521:test";//oracle
// String url2 = "jdbc:mysql://localhost:3306/test"; //mysql
// String url3 = "jdvc:sqlserver://localhost:1433;DatabaseName=test";//sqlserver
String user = "root";//连接用户名
String password = "password";//连接密码
conn = DriverManager.getConnection(url,user,password);//获取连接
String sql = "select * from commodity where cname =?";
pre = conn.prepareStatement(sql);
pre.setString(1, "可口可乐");
result = pre.executeQuery();
while(result.next()){
System.out.println("cname"+result.getString("cname")+" cid"+result.getInt("cid")+" cprice"+result.getInt("cprice"));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
//先使用的先关闭
if(conn!=null)
conn.close();
if(pre!=null)
pre.close();
if(result!=null)
result.close();
System.out.println("数据库连接已关闭");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}